]> arthur.barton.de Git - ngircd-alex.git/commitdiff
Send NAMES list and channel topic to NJOIN'ed users
authorewired <37567272+ewired@users.noreply.github.com>
Fri, 16 Apr 2021 18:28:00 +0000 (13:28 -0500)
committerAlexander Barton <alex@barton.de>
Mon, 26 Dec 2022 16:45:44 +0000 (17:45 +0100)
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

index 2e031bd5b37d906f16efd73ebfcc2e011d3ccadf..3e83978263adc6d68bff2ad8808466ce2309f164 100644 (file)
@@ -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])