Просмотр исходного кода

* Fix bot thinking its still on a channel if kicked from a chan while +B before it pushes out its PARTs

Bryan Drewery 16 лет назад
Родитель
Сommit
04627b02d8
1 измененных файлов с 18 добавлено и 12 удалено
  1. 18 12
      src/mod/irc.mod/chan.c

+ 18 - 12
src/mod/irc.mod/chan.c

@@ -2842,13 +2842,16 @@ static int gotkick(char *from, char *origmsg)
 
   char *nick = newsplit(&msg);
 
-  if (match_my_nick(nick) && channel_pending(chan) && shouldjoin(chan) && !channel_joining(chan)) {
+  if (match_my_nick(nick) && channel_pending(chan)) {
     chan->ircnet_status = 0;
-    chan->ircnet_status |= CHAN_JOINING;
-    dprintf(DP_MODE, "JOIN %s %s\n",
-            (chan->name[0]) ? chan->name : chan->dname,
-            chan->channel.key[0] ? chan->channel.key : chan->key_prot);
-    clear_channel(chan, 1);
+    if (shouldjoin(chan) && !channel_joining(chan)) {
+      chan->ircnet_status |= CHAN_JOINING;
+      dprintf(DP_MODE, "JOIN %s %s\n",
+              (chan->name[0]) ? chan->name : chan->dname,
+              chan->channel.key[0] ? chan->channel.key : chan->key_prot);
+      clear_channel(chan, 1);
+    } else
+      clear_channel(chan, 0);
     return 0; /* rejoin if kicked before getting needed info <Wcc[08/08/02]> */
   }
   if (channel_active(chan)) {
@@ -2889,13 +2892,16 @@ static int gotkick(char *from, char *origmsg)
     }
     irc_log(chan, "%s was kicked by %s (%s)", s1, from, msg);
     /* Kicked ME?!? the sods! */
-    if (match_my_nick(nick) && shouldjoin(chan) && !channel_joining(chan)) {
+    if (match_my_nick(nick)) {
       chan->ircnet_status = 0;
-      dprintf(DP_MODE, "JOIN %s %s\n",
-              (chan->name[0]) ? chan->name : chan->dname,
-              chan->channel.key[0] ? chan->channel.key : chan->key_prot);
-      chan->ircnet_status |= CHAN_JOINING;
-      clear_channel(chan, 1);
+      if (shouldjoin(chan) && !channel_joining(chan)) {
+        dprintf(DP_MODE, "JOIN %s %s\n",
+                (chan->name[0]) ? chan->name : chan->dname,
+                chan->channel.key[0] ? chan->channel.key : chan->key_prot);
+        chan->ircnet_status |= CHAN_JOINING;
+        clear_channel(chan, 1);
+      } else
+        clear_channel(chan, 0);
     } else {
       killmember(chan, nick);
       check_lonely_channel(chan);