diff options
| -rw-r--r-- | src/ngircd/irc-server.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/ngircd/irc-server.c b/src/ngircd/irc-server.c index 2e031bd5..3e839782 100644 --- a/src/ngircd/irc-server.c +++ b/src/ngircd/irc-server.c @@ -250,7 +250,7 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req ) GLOBAL bool IRC_NJOIN( CLIENT *Client, REQUEST *Req ) { - char nick_in[COMMAND_LEN], nick_out[COMMAND_LEN], *channame, *ptr, modes[8]; + char nick_in[COMMAND_LEN], nick_out[COMMAND_LEN], *channame, *ptr, modes[8], *topic; bool is_owner, is_chanadmin, is_op, is_halfop, is_voiced; CHANNEL *chan; CLIENT *c; @@ -320,6 +320,27 @@ IRC_NJOIN( CLIENT *Client, REQUEST *Req ) IRC_WriteStrChannelPrefix(Client, chan, c, false, "JOIN :%s", channame); + /* If the client is connected to me... */ + if(Client_Conn(c) != NONE) { + /* Send NAMES list to the joined user */ + if(IRC_Send_NAMES(c, chan)) + IRC_WriteStrClient(c, RPL_ENDOFNAMES_MSG, Client_ID(Client), + Channel_Name(chan)); + + /* Send topic to the joined user */ + topic = Channel_Topic(chan); + assert(topic != NULL); + if (*topic) { + IRC_WriteStrClient(c, RPL_TOPIC_MSG, Client_ID(c), channame, topic); +#ifndef STRICT_RFC + IRC_WriteStrClient(c, RPL_TOPICSETBY_MSG, + Client_ID(c), channame, + Channel_TopicWho(chan), + Channel_TopicTime(chan)); +#endif + } + } + /* Announce "channel user modes" to the channel, if any */ strlcpy(modes, Channel_UserModes(chan, c), sizeof(modes)); if (modes[0]) |