From e77f75ad6cda0f1856710d685895284d694ef70d Mon Sep 17 00:00:00 2001 From: pk910 Date: Fri, 10 Aug 2012 21:18:14 +0200 Subject: [PATCH] fixed auto-rejoin when only bots are in an opless channel --- src/IRCParser.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/IRCParser.c b/src/IRCParser.c index ca42770..2c30d69 100644 --- a/src/IRCParser.c +++ b/src/IRCParser.c @@ -239,11 +239,11 @@ static IRC_CMD(raw_join) { free(chan->rejoin_array); chan->flags &= ~CHANFLAG_REJOINING; } - } else if(chan->usercount == 1 && isUserOnChan(user, chan)) { + } else if(isUserOnChan(user, chan)) { //user is already in the channel? ^^ //first bot rejoined + chan->flags &= ~CHANFLAG_RECEIVED_USERLIST; struct ChanUser *chanuser = getChanUser(user, chan); - chanuser->flags &= ~CHANUSERFLAG_VOICED; - chanuser->flags |= CHANUSERFLAG_OPPED; + get_userlist_with_invisible(chan, 0, got_channel_userlist, chanuser); } DESYNCHRONIZE(cache_sync); return 1; @@ -329,8 +329,14 @@ static IRC_CMD(raw_part) { } else if(keep_channel && (chan->flags & CHANFLAG_REJOINING) && chan->usercount == 1) { //bot is alone... rejoin! - putsock(client, "PART %s :magic hop", chan->name); - putsock(client, "JOIN %s", chan->name); + struct ClientSocket *bot; + //find the last bot in the channel + for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) { + if(bot->user == chan->chanbot) { + putsock(bot, "PART %s :magic hop", chan->name); + putsock(bot, "JOIN %s", chan->name); + } + } } DESYNCHRONIZE(cache_sync); return 1; -- 2.20.1