diff options
| -rw-r--r-- | handle.c | 10 | ||||
| -rw-r--r-- | reply.c | 6 |
2 files changed, 16 insertions, 0 deletions
diff --git a/handle.c b/handle.c index 9d705e0..2a6fe1c 100644 --- a/handle.c +++ b/handle.c @@ -99,9 +99,19 @@ mode(struct Message *msg, struct Peer *peer) static int nick(struct Message *msg, struct Peer *peer) { + size_t i; + ensure(msg->params[0] && msg->params[0], reply(peer, 431), 0); ensure(!(peer->modes & RESTRICTED), reply(peer, 484), 0); + for (i = 0; i < peers_c; ++i) + if (peers[i].fd != peer->fd) + ensure( + !strcmp(peers[i].nick, peer->nick), + reply(peer, 433, msg->params[0]), + 0 + ); + user_reg(peer, msg->params[0], NULL, NULL, NULL); return 0; diff --git a/reply.c b/reply.c index 2aa0e9b..5409908 100644 --- a/reply.c +++ b/reply.c @@ -125,6 +125,12 @@ vreply(const struct Peer *peer, int number, va_list ap) hostname, getnick(peer) ), _); + REPLY(433, WRITE( + ":%s 431 %s %s :Nickname is already in use", + hostname, + getnick(peer), + nick + ), nick, _); REPLY(442, WRITE( ":%s 442 %s %s :You're not on that channel", hostname, |