diff --git a/source/ircd/connection.d b/source/ircd/connection.d index e9dc6bd..d07dc89 100644 --- a/source/ircd/connection.d +++ b/source/ircd/connection.d @@ -120,7 +120,7 @@ class Connection break; default: writeln("unknown command '", message.command, "'"); - send(Message(_server.name, "421", [nick, "Unknown command"])); + send(Message(_server.name, "421", [nick, message.command, "Unknown command"])); break; } } diff --git a/source/ircd/message.d b/source/ircd/message.d index 350c027..d48866f 100644 --- a/source/ircd/message.d +++ b/source/ircd/message.d @@ -24,6 +24,11 @@ struct Message line = line[prefix.length + 1 .. $]; } + if(!line.canFind(' ')) + { + return Message(prefix, line, [], false); + } + auto command = line[0 .. line.indexOf(' ')]; line = line[command.length + 1 .. $]; string[] params = []; @@ -60,6 +65,11 @@ struct Message message = ":" ~ prefix ~ " "; } + if(parameters.length == 0) + { + return message ~ command; + } + message ~= command ~ " "; if(parameters.length > 1) { diff --git a/source/ircd/server.d b/source/ircd/server.d index bf90c07..44bbc07 100644 --- a/source/ircd/server.d +++ b/source/ircd/server.d @@ -127,7 +127,7 @@ class Server } else { - peer.send(Message(connection.mask, "QUIT")); + peer.send(Message(connection.mask, "QUIT", [connection.nick], true)); } } }