From 08f52018c6ca6873ae2df6eb10ab1c9ed3f32c0b Mon Sep 17 00:00:00 2001 From: pk910 Date: Fri, 12 Aug 2011 06:40:52 +0200 Subject: [PATCH] request MODE list when joining a channel and prevent mode event duplicates --- IRCParser.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/IRCParser.c b/IRCParser.c index f4e8bd4..8f1834c 100644 --- a/IRCParser.c +++ b/IRCParser.c @@ -114,6 +114,7 @@ static IRC_CMD(raw_join) { chan->chanbot = user; struct ChanUser *chanuser = addChanUser(chan, user); //it must be a bot get_userlist(chan, got_channel_userlist, chanuser); + putsock(client, "MODE %s", chan->name); } else if(!isUserOnChan(user, chan) && (chan->flags & CHANFLAG_RECEIVED_USERLIST)) { struct ChanUser *chanuser = addChanUser(chan, user); event_join(chanuser); @@ -305,6 +306,15 @@ static IRC_CMD(raw_315) { return 1; } +static IRC_CMD(raw_324) { //MODE LIST + //Watchcat #pktest +stnzN + if(from == NULL || argc < 3) return 0; + struct ChanNode *chan = getChanByName(argv[1]); + if(chan == NULL) return 0; + parseModes(chan, argv[2], argv+3, argc-3); + return 1; +} + static IRC_CMD(raw_invite) { if(from == NULL || argc < 2) return 0; struct UserNode *user = getUserByMask(from); @@ -323,6 +333,7 @@ static IRC_CMD(raw_mode) { //ChannelMode struct ChanNode *chan = getChanByName(argv[0]); if(!chan) return 0; + if(chan->chanbot != client->user) return 1; event_mode(user, chan, argv[1], argv+2, argc-2); parseModes(chan, argv[1], argv+2, argc-2); } else { @@ -334,6 +345,7 @@ static IRC_CMD(raw_mode) { void parser_init() { //all the raws we receive... register_irc_function("001", raw_001); + register_irc_function("324", raw_324); register_irc_function("INVITE", raw_invite); register_irc_function("NOTICE", raw_notice); register_irc_function("TOPIC", raw_topic); -- 2.20.1