static int flags[] = {
MODE_CHANOP, 'o',
MODE_VOICE, 'v',
+ MODE_HALFOP, 'h',
MODE_PRIVATE, 'p',
MODE_SECRET, 's',
MODE_MODERATED, 'm',
MODE_NOCOLOUR, 'c',
MODE_NOCTCP, 'C',
MODE_NOAMSGS, 'M',
+ MODE_BANEXCEPTION, 'e',
0x0, 0x0
};
int *flag_p;
}
/* Deal with users on the channel */
- if (del_mode & (MODE_BAN | MODE_CHANOP | MODE_VOICE))
+ if (del_mode & (MODE_BAN | MODE_BANEXCEPTION | MODE_CHANOP | MODE_HALFOP | MODE_VOICE))
for (member = chptr->members; member; member = member->next_member) {
if (IsZombie(member)) /* we ignore zombies */
continue;
- if (del_mode & MODE_BAN) /* If we cleared bans, clear the valid flags */
+ if (del_mode & (MODE_BAN | MODE_BANEXCEPTION)) /* If we cleared bans, clear the valid flags */
ClearBanValid(member);
/* Drop channel operator status */
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) {
mo_clearmode(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
{
struct Channel *chptr;
- char *control = "ovpsmikbl"; /* default control string */
+ char *control = "ovpsmikble"; /* default control string */
const char *chname, *qreason;
int force = 0;