- if(chan->chanbot == user && (chan->flags & CHANFLAG_REJOINING)) {
- struct ClientSocket **clients = chan->rejoin_array;
- while(*clients) {
- putsock(*clients, "JOIN %s", chan->name);
- clients++;
+ if(chan->usercount == 0) {
+ if((chan->flags & CHANFLAG_REJOINING)) {
+ struct ClientSocket **clients = chan->rejoin_array;
+ while(*clients) {
+ putsock(*clients, "JOIN %s", chan->name);
+ clients++;
+ }
+ free(chan->rejoin_array);
+ chan->flags &= ~CHANFLAG_REJOINING;
+ }
+ delChannel(chan, 1);
+ keep_channel = 0;
+ } else if(isBot(user)) //bot parted - check if theres another bot in the channel
+ keep_channel = checkChannelVisibility(chan);
+
+ // free user if he/she is in no other channel
+ if(user->channel == NULL && !(user->flags & USERFLAG_ISBOT))
+ delUser(user, 1);
+
+ if(keep_channel && (chan->flags & CHANFLAG_RECEIVED_USERLIST) && !(chan->flags & CHANFLAG_REJOINING))
+ check_full_rejoin(chan);
+ else if(keep_channel && (chan->flags & CHANFLAG_REJOINING) && chan->usercount == 1) {
+ //bot is alone... rejoin!
+ 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(isUserOnChan(bot->user, chan)) {
+ putsock(bot, "PART %s :magic hop", chan->name);
+ putsock(bot, "JOIN %s", chan->name);
+ }