1
0
mirror of https://github.com/osmarks/ngircd.git synced 2024-10-28 04:46:17 +00:00

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.
This commit is contained in:
ewired 2021-04-16 13:28:00 -05:00 committed by Alexander Barton
parent 3e23f7d2c3
commit 5ef1a657f4

View File

@ -250,7 +250,7 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req )
GLOBAL bool GLOBAL bool
IRC_NJOIN( CLIENT *Client, REQUEST *Req ) 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; bool is_owner, is_chanadmin, is_op, is_halfop, is_voiced;
CHANNEL *chan; CHANNEL *chan;
CLIENT *c; CLIENT *c;
@ -320,6 +320,27 @@ IRC_NJOIN( CLIENT *Client, REQUEST *Req )
IRC_WriteStrChannelPrefix(Client, chan, c, false, IRC_WriteStrChannelPrefix(Client, chan, c, false,
"JOIN :%s", channame); "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 */ /* Announce "channel user modes" to the channel, if any */
strlcpy(modes, Channel_UserModes(chan, c), sizeof(modes)); strlcpy(modes, Channel_UserModes(chan, c), sizeof(modes));
if (modes[0]) if (modes[0])