added MODE_HALFOP (+h, %)
[ircu2.10.12-pk.git] / ircd / m_clearmode.c
index 4d0f17924ad13922f88ee67d461fa07a7abf21fc..26955743a3b84318bcf8e7456452172cd8a813c3 100644 (file)
@@ -113,6 +113,7 @@ do_clearmode(struct Client *cptr, struct Client *sptr, struct Channel *chptr,
   static int flags[] = {
     MODE_CHANOP,       'o',
     MODE_VOICE,                'v',
+    MODE_HALFOP,    'h',
     MODE_PRIVATE,      'p',
     MODE_SECRET,       's',
     MODE_MODERATED,    'm',
@@ -193,7 +194,7 @@ do_clearmode(struct Client *cptr, struct Client *sptr, struct Channel *chptr,
   }
 
   /* Deal with users on the channel */
-  if (del_mode & (MODE_BAN | MODE_CHANOP | MODE_VOICE))
+  if (del_mode & (MODE_BAN | MODE_CHANOP | MODE_HALFOP | MODE_VOICE))
     for (member = chptr->members; member; member = member->next_member) {
       if (IsZombie(member)) /* we ignore zombies */
        continue;
@@ -206,6 +207,12 @@ do_clearmode(struct Client *cptr, struct Client *sptr, struct Channel *chptr,
        modebuf_mode_client(&mbuf, MODE_DEL | MODE_CHANOP, member->user, MAXOPLEVEL + 1);
        member->status &= ~CHFL_CHANOP;
       }
+      
+      /* Drop halfop */
+      if (IsHalfOp(member) && del_mode & MODE_HALFOP) {
+       modebuf_mode_client(&mbuf, MODE_DEL | MODE_HALFOP, member->user, MAXOPLEVEL + 1);
+       member->status &= ~CHFL_HALFOP;
+      }
 
       /* Drop voice */
       if (HasVoice(member) && del_mode & MODE_VOICE) {