repo: ngircd action: commit revision: path_from: revision_from: 5ef1a657f49d983f442eefb6ccf5474dc02ba3f5: path_to: revision_to:
commit 5ef1a657f49d983f442eefb6ccf5474dc02ba3f5
Author: ewired <37567272+ewired@users.noreply.github.com>
Date: Fri Apr 16 13:28:00 2021 -0500
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.
diff --git a/src/ngircd/irc-server.c b/src/ngircd/irc-server.c
--- 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])
-----END OF PAGE-----