فهرست منبع

* When 'mop' is set, and not +bitch, punish newly opped user (and the opper) as if +bitch were set

Bryan Drewery 16 سال پیش
والد
کامیت
70089eca38
1فایلهای تغییر یافته به همراه10 افزوده شده و 2 حذف شده
  1. 10 2
      src/mod/irc.mod/mode.c

+ 10 - 2
src/mod/irc.mod/mode.c

@@ -31,6 +31,7 @@
 
 /* Reversing this mode? */
 static bool reversing = 0;
+static bool massop = 0;
 
 #  define PLUS    BIT0
 #  define MINUS   BIT1
@@ -541,8 +542,13 @@ static void
 got_op(struct chanset_t *chan, memberlist *m, memberlist *mv)
 {
   bool check_chan = 0;
-  bool me_opped = mv->is_me;
+  const bool me_opped = mv->is_me;
   bool meop = me_op(chan);
+  const bool was_op = chan_hasop(mv);
+
+  // No need to punish someone who was already opped.
+  if (massop && was_op)
+    return;
 
   /* Did *I* just get opped? */
   if (!meop && me_opped) {
@@ -1011,7 +1017,7 @@ gotmode(char *from, char *msg)
       memberlist *mv = NULL;
 
 
-      reversing = 0;
+      massop = reversing = 0;
 
       irc_log(chan, "%s!%s sets mode: %s", nick, from, msg);
       get_user_flagrec(u, &user, ch);
@@ -1108,6 +1114,8 @@ gotmode(char *from, char *msg)
               // Don't mass deop if protect is set, it'll happen anyway below
               if (!channel_protect(chan))
                 enforce_bitch(chan);        /* deop quick! */
+              else
+                reversing = massop = 1; // Reverse via got_op
             }
             if (channel_protect(chan))
               do_protect(chan, "Mass OP");