summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorewired <37567272+ewired@users.noreply.github.com>2021-04-16 13:28:00 -0500
committerAlexander Barton <alex@barton.de>2022-12-26 17:45:44 +0100
commit5ef1a657f49d983f442eefb6ccf5474dc02ba3f5 (patch)
tree88521301d6b61b780603d3cd8d829d3a86b9453d /src
parent3e23f7d2c33df287941d26b84c2a26d6ee22faf2 (diff)
downloadngircd-5ef1a657f49d983f442eefb6ccf5474dc02ba3f5.tar.gz
ngircd-5ef1a657f49d983f442eefb6ccf5474dc02ba3f5.zip
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.
Diffstat (limited to 'src')
-rw-r--r--src/ngircd/irc-server.c23
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])