From 5ef1a657f49d983f442eefb6ccf5474dc02ba3f5 Mon Sep 17 00:00:00 2001 From: ewired <37567272+ewired@users.noreply.github.com> Date: Fri, 16 Apr 2021 13:28:00 -0500 Subject: [PATCH] Send NAMES list and channel topic to NJOIN'ed users Send the NAMES list and channel topic to users "forcefully" joined to a channel using NJOIN, like they joined on their own using JOIN. Closes #288. --- src/ngircd/irc-server.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) 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]) -- 2.39.2