Просмотр исходного кода

Merge branch 'revenge-fixes'

* revenge-fixes:
  Disallow kicking/deopping other bots via commands
  Don't punish a bot for kicking/opping/banning another bot
Bryan Drewery 14 лет назад
Родитель
Сommit
3a6f441629
3 измененных файлов с 9 добавлено и 5 удалено
  1. 1 1
      src/mod/irc.mod/chan.c
  2. 6 2
      src/mod/irc.mod/cmdsirc.c
  3. 2 2
      src/mod/irc.mod/mode.c

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

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

+ 6 - 2
src/mod/irc.mod/cmdsirc.c

@@ -294,7 +294,7 @@ static void cmd_kickban(int idx, char *par)
       dprintf(idx, "%s is a %s master.\n", nick, chan->dname);
       return;
     }
-    if (glob_bot(victim) && !(glob_owner(user) || chan_owner(user))) {
+    if (glob_bot(victim)) {
       if (all) goto next;
       dprintf(idx, "%s is another channel bot!\n", nick);
       return;
@@ -1032,6 +1032,10 @@ static void cmd_deop(int idx, char *par)
       if (all) goto next;  
       return;
     }
+    if (glob_bot(victim)) {
+      dprintf(idx, "%s is another channel bot!\n", nick);
+      return;
+    }
     if (chk_op(victim, chan) && !(chan_master(user) || glob_master(user))) {
       dprintf(idx, "%s has the op flag for %s.\n", m->nick, chan->dname);
       if (all) goto next;  
@@ -1127,7 +1131,7 @@ static void cmd_kick(int idx, char *par)
       dprintf(idx, "%s is a %s master.\n", nick, chan->dname);
       return;
     }
-    if (glob_bot(victim) && !(glob_owner(user) || chan_owner(user))) {
+    if (glob_bot(victim)) {
       dprintf(idx, "%s is another channel bot!\n", nick);
       return;
     }

+ 2 - 2
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);
   } else {
     // Revenge kick clients that deop our bots
-    if (chan->revenge && m && m != mv && mv->user && mv->user->bot) {
+    if (chan->revenge && m && m != mv && mv->user && mv->user->bot && !(m->user && m->user->bot)) {
       if (role < 5 && !chan_sentkick(m) && me_op(chan)) {
         m->flags |= SENTKICK;
         dprintf(DP_MODE_NEXT, "KICK %s %s :%s%s\r\n", chan->name, m->nick, kickprefix, response(RES_REVENGE));
@@ -771,7 +771,7 @@ got_ban(struct chanset_t *chan, memberlist *m, char *mask, char *isserver)
   }
 
   // Revenge kick clients that ban our bots
-  if (chan->revenge && m && matched_bot) {
+  if (chan->revenge && m && matched_bot && !(m->user && m->user->bot)) {
     if (role < 5 && !chan_sentkick(m)) {
       m->flags |= SENTKICK;
       dprintf(DP_MODE_NEXT, "KICK %s %s :%s%s\r\n", chan->name, m->nick, kickprefix, response(RES_REVENGE));