Przeglądaj źródła

Make bots actually consider chanint floodban

ducch 14 lat temu
rodzic
commit
a568c80b86
2 zmienionych plików z 12 dodań i 4 usunięć
  1. 1 1
      src/mod/channels.mod/cmdschan.c
  2. 11 3
      src/mod/irc.mod/chan.c

+ 1 - 1
src/mod/channels.mod/cmdschan.c

@@ -1200,6 +1200,7 @@ static void cmd_chaninfo(int idx, char *par)
     SHOW_FLAG("cycle",		channel_cycle(chan));
     SHOW_FLAG("enforcebans", 	channel_enforcebans(chan));
     SHOW_FLAG("fastop",		channel_fastop(chan));
+    SHOW_FLAG("floodban", channel_floodban(chan));
     SHOW_FLAG("inactive",	channel_inactive(chan));
     SHOW_FLAG("meankicks",	channel_meankicks(chan));
     SHOW_FLAG("nodesynch",	channel_nodesynch(chan));
@@ -1213,7 +1214,6 @@ static void cmd_chaninfo(int idx, char *par)
       SHOW_FLAG("take",		channel_take(chan));
     SHOW_FLAG("voice",		channel_voice(chan));
     SHOW_FLAG("voicebitch",		channel_voicebitch(chan));
-    SHOW_FLAG("floodban", channel_floodban(chan));
     SHOW_FLAG("", 0);
     SHOW_FLAG("dynamicbans",	channel_dynamicbans(chan));
     SHOW_FLAG("userbans",	!channel_nouserbans(chan));

+ 11 - 3
src/mod/irc.mod/chan.c

@@ -665,9 +665,17 @@ static bool detect_chan_flood(char *floodnick, char *floodhost, char *from,
     case FLOOD_CTCP:
       /* Flooding chan! either by public or notice */
       if (!chan_sentkick(m) && me_op(chan)) {
-	putlog(LOG_MODES, chan->dname, "Channel flood from %s -- kicking", floodnick);
-        dprintf(DP_MODE, "KICK %s %s :%s%s\n", chan->name, floodnick, kickprefix, response(RES_FLOOD));
-	m->flags |= SENTKICK;
+        if (channel_floodban(chan)) {
+          putlog(LOG_MODES, chan->dname, "Channel flood from %s -- banning", floodnick);
+          char s[UHOSTLEN] = "", *s1 = NULL;
+          simple_snprintf(s, sizeof(s), "%s!%s", floodnick, floodhost);
+          s1 = quickban(chan, s);
+          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", floodnick);
+          dprintf(DP_MODE, "KICK %s %s :%s%s\n", chan->name, floodnick, kickprefix, response(RES_FLOOD));
+          m->flags |= SENTKICK;
+        }
       }
       return 1;
     case FLOOD_JOIN: