Implement NOTICE
This commit is contained in:
parent
4df3b43138
commit
4f8aedddc9
|
@ -45,4 +45,12 @@ class Channel
|
|||
member.send(Message(sender.mask, "PRIVMSG", [name, text], true));
|
||||
}
|
||||
}
|
||||
|
||||
void sendNotice(Connection sender, string text)
|
||||
{
|
||||
foreach(member; members.filter!(m => m.nick != sender.nick))
|
||||
{
|
||||
member.send(Message(sender.mask, "NOTICE", [name, text], true));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -137,6 +137,10 @@ class Connection
|
|||
if(!registered) sendErrNotRegistered();
|
||||
else onPrivMsg(message);
|
||||
break;
|
||||
case "NOTICE":
|
||||
if(!registered) sendErrNotRegistered();
|
||||
else onNotice(message);
|
||||
break;
|
||||
case "WHO":
|
||||
if(!registered) sendErrNotRegistered();
|
||||
else onWho(message);
|
||||
|
@ -332,6 +336,32 @@ class Connection
|
|||
}
|
||||
}
|
||||
|
||||
void onNotice(Message message)
|
||||
{
|
||||
//TODO: Support special message targets
|
||||
auto target = message.parameters[0];
|
||||
auto text = message.parameters[1];
|
||||
|
||||
//TODO: Figure out what we are allowed to send exactly
|
||||
|
||||
if(message.parameters.length < 2)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if(Server.isValidChannelName(target))
|
||||
{
|
||||
if(_server.channels.canFind!(c => c.name == target))
|
||||
{
|
||||
_server.noticeToChannel(this, target, text);
|
||||
}
|
||||
}
|
||||
else if(Server.isValidNick(target) && _server.connections.canFind!(c => c.nick == target))
|
||||
{
|
||||
_server.noticeToUser(this, target, text);
|
||||
}
|
||||
}
|
||||
|
||||
void onWho(Message message)
|
||||
{
|
||||
if(message.parameters.length == 0)
|
||||
|
@ -377,7 +407,7 @@ class Connection
|
|||
void sendWhoReply(string channel, Connection user, uint hopCount)
|
||||
{
|
||||
auto flags = user.modes.canFind('a') ? "G" : "H";
|
||||
if(user.isOperator) flags ~= "*";
|
||||
if(user.isOperator) flags ~= "*";
|
||||
//TODO: Add channel prefix
|
||||
|
||||
send(Message(_server.name, "352", [nick, channel, user.user, user.hostname, user.servername, user.nick, flags, hopCount.to!string ~ " " ~ user.realname], true));
|
||||
|
|
|
@ -182,6 +182,18 @@ class Server
|
|||
user.send(Message(sender.mask, "PRIVMSG", [target, text], true));
|
||||
}
|
||||
|
||||
void noticeToChannel(Connection sender, string target, string text)
|
||||
{
|
||||
auto channel = channels.find!(c => c.name == target)[0];
|
||||
channel.sendNotice(sender, text);
|
||||
}
|
||||
|
||||
void noticeToUser(Connection sender, string target, string text)
|
||||
{
|
||||
auto user = connections.find!(c => c.nick == target)[0];
|
||||
user.send(Message(sender.mask, "NOTICE", [target, text], true));
|
||||
}
|
||||
|
||||
void listen(ushort port = 6667)
|
||||
{
|
||||
listenTCP(port, &acceptConnection);
|
||||
|
|
Loading…
Reference in New Issue