From 0f9f4378b021b1d4cf18f92f77546eae25bb2195 Mon Sep 17 00:00:00 2001 From: pk910 Date: Tue, 28 Jun 2011 22:55:04 +0200 Subject: [PATCH] virtually join or part a user when he gets +-ov on a +u channel --- ircd/channel.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/ircd/channel.c b/ircd/channel.c index 3f563c3..f8f5239 100644 --- a/ircd/channel.c +++ b/ircd/channel.c @@ -3496,7 +3496,9 @@ mode_process_clients(struct ParseState *state) else SetOpLevel(member, OpLevel(state->member) + 1); } - + + ulong64 old_status = member->status; + /* actually effect the change */ if (state->flags & MODE_PARSE_SET) { if (state->cli_change[i].flag & MODE_ADD) { @@ -3516,8 +3518,16 @@ mode_process_clients(struct ParseState *state) state->cli_change[i].client, state->cli_change[i].oplevel); - if(MyUser(member->user) && (member->channel->mode.mode & MODE_AUDITORIUM) && (state->cli_change[i].flag & MODE_CHANOP)) { - do_names(member->user, member->channel, NAMES_ALL|NAMES_EON|((member->status & MODE_CHANOP) ? 0 : NAMES_OPS)); + if((member->channel->mode.mode & MODE_AUDITORIUM)) { + //join or part the user + if((member->status & CHFL_VOICED_OR_OPPED) & !(old_status & CHFL_VOICED_OR_OPPED)) { + sendcmdto_channel_butserv_butone(member->user, CMD_JOIN, member->channel, member->user, SKIP_OPS, ":%H", member->channel); + } else if(!(member->status & CHFL_VOICED_OR_OPPED) & (old_status & CHFL_VOICED_OR_OPPED)) { + sendcmdto_channel_butserv_butone(member->user, CMD_PART, member->channel, member->user, SKIP_OPS, "%H :%s", member->channel, "user deoped/devoiced on a +u channel."); + } + if(MyUser(member->user) && (state->cli_change[i].flag & MODE_CHANOP)) { + do_names(member->user, member->channel, NAMES_ALL|NAMES_EON|((member->status & MODE_CHANOP) ? 0 : NAMES_OPS)); + } } } /* for (i = 0; state->cli_change[i].flags; i++) */ } -- 2.20.1