Bladeren bron

* Fix WHO params

This fixes WHO not sending the extended format on networks
which support it, for all WHO queries.

The patch was an idea from a similar patch to Eggdrop 1.6.20
by thommey.
Bryan Drewery 17 jaren geleden
bovenliggende
commit
d0288aacc0
3 gewijzigde bestanden met toevoegingen van 13 en 8 verwijderingen
  1. 9 5
      src/mod/irc.mod/irc.c
  2. 1 0
      src/mod/irc.mod/irc.h
  3. 3 3
      src/mod/irc.mod/mode.c

+ 9 - 5
src/mod/irc.mod/irc.c

@@ -1262,15 +1262,19 @@ reset_chan_info(struct chanset_t *chan)
     }
     /* These 2 need to get out asap, so into the mode queue */
     dprintf(DP_MODE, "MODE %s\n", chan->name);
-    if (use_354) /* Added benefit of getting numeric IP! :) */
-      dprintf(DP_MODE, "WHO %s %%c%%h%%n%%u%%f%%r%%d%%i\n", chan->name);
-    else
-      dprintf(DP_MODE, "WHO %s\n", chan->name);
+    send_chan_who(DP_MODE, chan);
     /* clear_channel nuked the data...so */
     dprintf(DP_MODE, "TOPIC %s\n", chan->name);
   }
 }
 
+static void send_chan_who(int queue, struct chanset_t *chan) {
+    if (use_354) /* Added benefit of getting numeric IP! :) */
+      dprintf(queue, "WHO %s %%c%%h%%n%%u%%f%%r%%d%%i\n", chan->name);
+    else
+      dprintf(queue, "WHO %s\n", chan->name);
+}
+
 /* If i'm the only person on the channel, and i'm not op'd,
  * might as well leave and rejoin. If i'm NOT the only person
  * on the channel, but i'm still not op'd, demand ops.
@@ -1357,7 +1361,7 @@ check_servers(struct chanset_t *chan)
   for (memberlist *m = chan->channel.member; m && m->nick[0]; m = m->next) {
     if (!match_my_nick(m->nick) && chan_hasop(m) && (m->hops == -1)) {
       putlog(LOG_DEBUG, "*", "Updating WHO for '%s' because '%s' is missing data.", chan->dname, m->nick);
-      dprintf(DP_HELP, "WHO %s\n", chan->name);
+      send_chan_who(DP_HELP, chan);
       break;                    /* lets just do one chan at a time to save from flooding */
     }
   }

+ 1 - 0
src/mod/irc.mod/irc.h

@@ -90,6 +90,7 @@ static void check_lonely_channel(struct chanset_t *chan);
 static int gotmode(char *, char *);
 void unset_im(struct chanset_t* chan);
 void detected_drone_flood(struct chanset_t* chan, memberlist*);
+static void send_chan_who(int queue, struct chanset_t* chan);
 #define newban(chan, mask, who)         new_mask((chan)->channel.ban, mask, who)
 #define newexempt(chan, mask, who)      new_mask((chan)->channel.exempt, mask, who)
 #define newinvite(chan, mask, who)      new_mask((chan)->channel.invite, mask, who)

+ 3 - 3
src/mod/irc.mod/mode.c

@@ -657,7 +657,7 @@ got_deop(struct chanset_t *chan, memberlist *m, memberlist *mv, char *isserver)
    */
 // WHO CARES
 //  if (!channel_take(chan) && !chan_bitch(chan) && !(mv->flags & (CHANVOICE | STOPWHO))) {
-//    dprintf(DP_HELP, "WHO %s\n", chan->name);
+//    send_chan_who(DP_HELP, chan);
 //    mv->flags |= STOPWHO;
 //  }
   /* Was the bot deopped? */
@@ -945,7 +945,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", chan->name);
+    send_chan_who(DP_MODE, chan);
   }
 
   return m;
@@ -1001,7 +1001,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", chan->name);
+          send_chan_who(DP_MODE, chan);
           return 0;
         }
       } else