Procházet zdrojové kódy

Set EVOICE on abusive clients (#48)

Bryan Drewery před 14 roky
rodič
revize
13973888e5
3 změnil soubory, kde provedl 11 přidání a 3 odebrání
  1. 8 0
      src/mod/irc.mod/irc.c
  2. 1 0
      src/mod/irc.mod/irc.h
  3. 2 3
      src/mod/irc.mod/mode.c

+ 8 - 0
src/mod/irc.mod/irc.c

@@ -199,10 +199,18 @@ detect_offense(memberlist* m, struct chanset_t *chan, char *msg)
   return 0;
 }
 
+void set_devoice(struct chanset_t *chan, memberlist* m) {
+  if (!(m->flags & EVOICE)) {
+    putlog(LOG_DEBUG, "@", "Giving EVOICE flag to: %s (%s)", m->nick, chan->dname);
+    m->flags |= EVOICE;
+  }
+}
+
 void punish_flooder(struct chanset_t* chan, memberlist* m, const char *reason) {
   if (channel_voice(chan) && chan->voice_moderate && !chan_sentdevoice(m)) {
     add_mode(chan, '-', 'v', m->nick);
     m->flags |= SENTDEVOICE;
+    set_devoice(chan, m);
   } else if (!chan_sentkick(m)) {
     dprintf(DP_SERVER, "KICK %s %s :%s%s\n", chan->name, m->nick, kickprefix, reason ? reason : response(RES_FLOOD));
     m->flags |= SENTKICK;

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

@@ -108,6 +108,7 @@ void resolve_to_rbl(struct chanset_t *chan, const char *host, struct resolvstruc
 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);
+void set_devoice(struct chanset_t* chan, memberlist* m);
 
 #endif /* MAKING_IRC */
 

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

@@ -1514,9 +1514,8 @@ gotmode(char *from, char *msg)
                         (glob_master(user) || chan_master(user)) &&
                         rfc_casecmp(nick, mparam)) {
                       /* if the user is not +q set them norEVOICE. */
-                      if (!chan_quiet(victim) && !(mv->flags & EVOICE)) {
-                        putlog(LOG_DEBUG, "@", "Giving EVOICE flag to: %s (%s)", mv->nick, chan->dname);
-                        mv->flags |= EVOICE;
+                      if (!chan_quiet(victim)) {
+                        set_devoice(chan, mv);
                       }
                     }
                   }