Bläddra i källkod

DRY flood punishment (#48)

Bryan Drewery 14 år sedan
förälder
incheckning
d7372b909c
3 ändrade filer med 9 tillägg och 6 borttagningar
  1. 1 2
      src/mod/irc.mod/chan.c
  2. 7 4
      src/mod/irc.mod/irc.c
  3. 1 0
      src/mod/irc.mod/irc.h

+ 1 - 2
src/mod/irc.mod/chan.c

@@ -731,8 +731,7 @@ static bool detect_chan_flood(memberlist* m, const char *from, struct chanset_t
           u_addmask('b', chan, s1, conf.bot->nick, "channel flood", now + (60 * chan->ban_time), 0);
         } else {
           putlog(LOG_MODES, chan->dname, "Channel flood from %s -- kicking", m->nick);
-          dprintf(DP_MODE, "KICK %s %s :%s%s\n", chan->name, m->nick, kickprefix, response(RES_FLOOD));
-          m->flags |= SENTKICK;
+          punish_flooder(chan, m);
         }
       }
       return 1;

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

@@ -186,21 +186,24 @@ detect_offense(memberlist* m, struct chanset_t *chan, char *msg)
     caps_percentage = (caps_count)/(double(tot));
     if (caps_percentage >= caps_limit) {
       putlog(LOG_MODES, chan->name, "Caps flood (%d%%) from %s -- kicking", int(caps_percentage * 100), m->nick);
-      dprintf(DP_SERVER, "KICK %s %s :%s%s\n", chan->name, m->nick, kickprefix, response(RES_FLOOD));
-      m->flags |= SENTKICK;
+      punish_flooder(chan, m);
       return 1;
     }
   } else if (chan->colorlimit && color_count) {
     if (color_count >= chan->colorlimit) {
       putlog(LOG_MODES, chan->name, "Color flood (%d) from %s -- kicking", color_count, m->nick);
-      dprintf(DP_SERVER, "KICK %s %s :%s%s\n", chan->name, m->nick, kickprefix, response(RES_FLOOD));
-      m->flags |= SENTKICK;
+      punish_flooder(chan, m);
       return 1;
     }
   }
   return 0;
 }
 
+void punish_flooder(struct chanset_t* chan, memberlist* m, const char *reason) {
+  dprintf(DP_SERVER, "KICK %s %s :%s%s\n", chan->name, m->nick, kickprefix, reason ? reason : response(RES_FLOOD));
+  m->flags |= SENTKICK;
+}
+
 void unlock_chan(struct chanset_t *chan)
 {
   if (chan->channel.drone_set_mode) {

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

@@ -107,6 +107,7 @@ typedef struct resolvstruct resolv_member;
 void resolve_to_rbl(struct chanset_t *chan, const char *host, struct resolvstruct *r = NULL);
 static void do_mask(struct chanset_t *chan, masklist *m, char *mask, char Mode);
 static void get_channel_masks(struct chanset_t* chan);
+void punish_flooder(struct chanset_t* chan, memberlist* m, const char *reason = NULL);
 
 #endif /* MAKING_IRC */