diff options
| author | ewired <37567272+ewired@users.noreply.github.com> | 2021-04-16 13:28:00 -0500 |
|---|---|---|
| committer | Alexander Barton <alex@barton.de> | 2022-12-26 17:45:44 +0100 |
| commit | 5ef1a657f49d983f442eefb6ccf5474dc02ba3f5 (patch) | |
| tree | 88521301d6b61b780603d3cd8d829d3a86b9453d /src | |
| parent | 3e23f7d2c33df287941d26b84c2a26d6ee22faf2 (diff) | |
| download | ngircd-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.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]) |