浏览代码

Merge branch '48-voice-updates' into next

* 48-voice-updates:
  Enforce 'chanmode' minutely (#48)
  Don't kick a user if already devoiced and -m (#48)
  Don't unset +m when unlocking channel from flood (#48)
Bryan Drewery 14 年之前
父节点
当前提交
f751f4b007
共有 1 个文件被更改,包括 22 次插入10 次删除
  1. 22 10
      src/mod/irc.mod/irc.c

+ 22 - 10
src/mod/irc.mod/irc.c

@@ -206,15 +206,23 @@ void set_devoice(struct chanset_t *chan, memberlist* m) {
 }
 
 const char* 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);
-    return "devoicing";
-  } 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;
-    return "kicking";
+  if (channel_voice(chan) && chan->voice_moderate) {
+    if (!chan_sentdevoice(m)) {
+      add_mode(chan, '-', 'v', m->nick);
+      m->flags |= SENTDEVOICE;
+      set_devoice(chan, m);
+      return "devoicing";
+    } else {
+      return "devoiced";
+    }
+  } 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;
+      return "kicking";
+    } else {
+      return "kicked";
+    }
   }
   return "ignoring";
 }
@@ -225,7 +233,7 @@ void unlock_chan(struct chanset_t *chan)
     char buf[3] = "", *p = buf;
     if ((chan->channel.drone_set_mode & CHANINV) && !(chan->mode_pls_prot & CHANINV))
       *p++ = 'i';
-    if ((chan->channel.drone_set_mode & CHANMODER) && !(chan->mode_pls_prot & CHANMODER))
+    if ((chan->channel.drone_set_mode & CHANMODER) && !((chan->mode_pls_prot & CHANMODER) || (channel_voice(chan) && chan->voice_moderate)))
       *p++ = 'm';
     *p = 0;
     dprintf(DP_MODE, "MODE %s :-%s\n", chan->name[0] ? chan->name : chan->dname, buf);
@@ -1573,6 +1581,10 @@ check_expired_chanstuff(struct chanset_t *chan)
     if (bot_ops && !im_opped) {
       request_op(chan);
     }
+
+    if (role == 3) {
+      recheck_channel_modes(chan);
+    }
   }
 }