فهرست منبع

Merge branch '40-revenge' into next

* 40-revenge:
  Don't punish clients that abuse themselves (#40)
  Use proper DEFLAG_EVENT_REVENGE_BAN (#40)
  Ensure victim is a user to avoid crashing (#40)
Bryan Drewery 14 سال پیش
والد
کامیت
f8fa90837e
2فایلهای تغییر یافته به همراه4 افزوده شده و 4 حذف شده
  1. 1 1
      src/mod/irc.mod/chan.c
  2. 3 3
      src/mod/irc.mod/mode.c

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

@@ -2915,7 +2915,7 @@ static int gotkick(char *from, char *origmsg)
     member_getuser(mv);
     member_getuser(mv);
     if (mv->user) {
     if (mv->user) {
       // Revenge kick clients that kick our bots
       // Revenge kick clients that kick our bots
-      if (chan->revenge && !mv->is_me && m && mv->user->bot) {
+      if (chan->revenge && !mv->is_me && m && m != mv && mv->user->bot) {
         if (role < 5 && !chan_sentkick(m) && me_op(chan)) {
         if (role < 5 && !chan_sentkick(m) && me_op(chan)) {
           m->flags |= SENTKICK;
           m->flags |= SENTKICK;
           dprintf(DP_MODE_NEXT, "KICK %s %s :%s%s\r\n", chan->name, m->nick, kickprefix, response(RES_REVENGE));
           dprintf(DP_MODE_NEXT, "KICK %s %s :%s%s\r\n", chan->name, m->nick, kickprefix, response(RES_REVENGE));

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

@@ -721,7 +721,7 @@ got_deop(struct chanset_t *chan, memberlist *m, memberlist *mv, char *isserver)
       putlog(LOG_MODES, chan->dname, "TS resync deopped me on %s :(", chan->dname);
       putlog(LOG_MODES, chan->dname, "TS resync deopped me on %s :(", chan->dname);
   } else {
   } else {
     // Revenge kick clients that deop our bots
     // Revenge kick clients that deop our bots
-    if (chan->revenge && m && mv->user->bot) {
+    if (chan->revenge && m && m != mv && mv->user && mv->user->bot) {
       if (role < 5 && !chan_sentkick(m) && me_op(chan)) {
       if (role < 5 && !chan_sentkick(m) && me_op(chan)) {
         m->flags |= SENTKICK;
         m->flags |= SENTKICK;
         dprintf(DP_MODE_NEXT, "KICK %s %s :%s%s\r\n", chan->name, m->nick, kickprefix, response(RES_REVENGE));
         dprintf(DP_MODE_NEXT, "KICK %s %s :%s%s\r\n", chan->name, m->nick, kickprefix, response(RES_REVENGE));
@@ -760,7 +760,7 @@ got_ban(struct chanset_t *chan, memberlist *m, char *mask, char *isserver)
     if (mv->user) {
     if (mv->user) {
       simple_snprintf(s1, sizeof s1, "%s!%s", mv->nick, mv->userhost);
       simple_snprintf(s1, sizeof s1, "%s!%s", mv->nick, mv->userhost);
       if ((wild_match(mask, s1) || match_cidr(mask, s1))) {
       if ((wild_match(mask, s1) || match_cidr(mask, s1))) {
-        if (!matched_bot && mv->user->bot) {
+        if (!matched_bot && mv != m && mv->user->bot) {
           matched_bot = true;
           matched_bot = true;
         }
         }
         if (mv->user && !isexempted(chan, s1)) {
         if (mv->user && !isexempted(chan, s1)) {
@@ -779,7 +779,7 @@ got_ban(struct chanset_t *chan, memberlist *m, char *mask, char *isserver)
       if (m->user) {
       if (m->user) {
         char tmp[128] = "";
         char tmp[128] = "";
         simple_snprintf(tmp, sizeof(tmp), "Banned bot %s (%s) on %s", m->nick, mask, chan->dname);
         simple_snprintf(tmp, sizeof(tmp), "Banned bot %s (%s) on %s", m->nick, mask, chan->dname);
-        deflag_user(m->user, DEFLAG_EVENT_REVENGE_DEOP, tmp, chan);
+        deflag_user(m->user, DEFLAG_EVENT_REVENGE_BAN, tmp, chan);
       }
       }
     }
     }
   }
   }