Sfoglia il codice sorgente

* Port [3702] to 1.2.15
* Fix some cases where the bot would pointlessly do WHO on users instead of on the channel to resolve a desync.



svn: 3703

Bryan Drewery 18 anni fa
parent
commit
d0df79c337
4 ha cambiato i file con 13 aggiunte e 11 eliminazioni
  1. 1 0
      doc/UPDATES
  2. 1 1
      src/chan.h
  3. 4 4
      src/mod/irc.mod/chan.c
  4. 7 6
      src/mod/irc.mod/mode.c

+ 1 - 0
doc/UPDATES

@@ -19,6 +19,7 @@
 * Fix bot hosts/users being cached internally as wrong, even when a new host is added
 * Fix segfault in cmd_mmode (fixes #399)
 * Fix segfault from receiving from non-recursive dns servers. (fixes #401)
+* Fix some cases where the bot would pointlessly do WHO on users instead of on the channel to resolve a desync.
 
 1.2.14 - http://wraith.botpack.net/milestone/1.2.14
 * Fix another bug in shell functions. (fixes #321)

+ 1 - 1
src/chan.h

@@ -38,7 +38,7 @@ typedef struct memstruct {
 #define SENTVOICE    BIT6 /* a mode +v was already sent out for this user */
 #define SENTDEVOICE  BIT7 /* a devoice has been sent                      */
 #define WASOP        BIT8 /* was an op before a split                     */
-#define STOPWHO      BIT9
+//#define STOPWHO      BIT9
 #define FULL_DELAY   BIT10
 #define STOPCHECK    BIT11
 #define EVOICE       BIT12 /* keeps people -v */

+ 4 - 4
src/mod/irc.mod/chan.c

@@ -1704,8 +1704,8 @@ static int got352or4(struct chanset_t *chan, char *user, char *host, char *nick,
     m->flags |= CHANVOICE;	/* Yes */
   else
     m->flags &= ~CHANVOICE;
-  if (!(m->flags & (CHANVOICE | CHANOP)))
-    m->flags |= STOPWHO;
+//  if (!(m->flags & (CHANVOICE | CHANOP)))
+//    m->flags |= STOPWHO;
 
   /* Store the userhost */
   if (!m->userhost[0])
@@ -2420,7 +2420,7 @@ static int gotjoin(char *from, char *chname)
 	m->delay = 0L;
 	m->flags = (chan_hasop(m) ? WASOP : 0);
 	set_handle_laston(chan->dname, m->user, now);
-	m->flags |= STOPWHO;
+//	m->flags |= STOPWHO;
         irc_log(chan, "%s returned from netsplit", m->nick);
 
 
@@ -2455,7 +2455,7 @@ static int gotjoin(char *from, char *chname)
             resolve_to_member(chan, nick, host); 
         }
 
-	m->flags |= STOPWHO;
+//	m->flags |= STOPWHO;
 
 	if (match_my_nick(nick)) {
 	  /* It was me joining! Need to update the channel record with the

+ 7 - 6
src/mod/irc.mod/mode.c

@@ -631,10 +631,11 @@ got_deop(struct chanset_t *chan, memberlist *m, memberlist *mv, char *isserver)
   /* Having op hides your +v and +h  status -- so now that someone's lost ops,
    * check to see if they have +v or +h
    */
-  if (!channel_take(chan) && !chan_bitch(chan) && !(mv->flags & (CHANVOICE | STOPWHO))) {
-    dprintf(DP_HELP, "WHO %s\n", mv->nick);
-    mv->flags |= STOPWHO;
-  }
+// WHO CARES
+//  if (!channel_take(chan) && !chan_bitch(chan) && !(mv->flags & (CHANVOICE | STOPWHO))) {
+//    dprintf(DP_HELP, "WHO %s\n", chan->name);
+//    mv->flags |= STOPWHO;
+//  }
   /* Was the bot deopped? */
   if (match_my_nick(mv->nick)) {
     /* Cancel any pending kicks and modes */
@@ -920,7 +921,7 @@ static memberlist *assert_ismember(struct chanset_t *chan, const char *nick)
     if (channel_pending(chan))
       return NULL;
     putlog(LOG_MISC, chan->dname, "* Mode change on %s for nonexistant %s!", chan->dname, nick);
-    dprintf(DP_MODE, "WHO %s\n", nick);
+    dprintf(DP_MODE, "WHO %s\n", chan->name);
   }
 
   return m;
@@ -976,7 +977,7 @@ gotmode(char *from, char *msg)
             return 0;
           dprintf(DP_MODE, "KICK %s %s :Desync\n", chan->dname, nick);
           putlog(LOG_MISC, "*", "* Mode change on %s for nonexistant %s!", chan->dname, nick);
-          dprintf(DP_MODE, "WHO %s\n", nick);
+          dprintf(DP_MODE, "WHO %s\n", chan->name);
           return 0;
         }
       } else