diff options
Diffstat (limited to 'src/channels.c')
| -rw-r--r-- | src/channels.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/channels.c b/src/channels.c index 85028b584..d90bdf94f 100644 --- a/src/channels.c +++ b/src/channels.c @@ -214,12 +214,13 @@ void Channel::SetModeInternal(ChannelMode *cm, const std::string ¶m, bool En Params.insert(std::make_pair(cm->Name, param)); } - FOREACH_MOD(I_OnChannelModeSet, OnChannelModeSet(this, cm->Name)); + EventReturn MOD_RESULT; + FOREACH_RESULT(I_OnChannelModeSet, OnChannelModeSet(this, cm->Name)); /* Check for mlock */ /* Non registered channel, no mlock */ - if (!ci || !EnforceMLock) + if (!ci || !EnforceMLock || MOD_RESULT == EVENT_STOP) return; /* If this channel has this mode locked negative */ @@ -333,12 +334,13 @@ void Channel::RemoveModeInternal(ChannelMode *cm, const std::string ¶m, bool } } - FOREACH_MOD(I_OnChannelModeUnset, OnChannelModeUnset(this, cm->Name)); + EventReturn MOD_RESULT; + FOREACH_RESULT(I_OnChannelModeUnset, OnChannelModeUnset(this, cm->Name)); /* Check for mlock */ /* Non registered channel, no mlock */ - if (!ci || !EnforceMLock) + if (!ci || !EnforceMLock || MOD_RESULT == EVENT_STOP) return; /* This channel has this the mode locked on */ @@ -368,7 +370,7 @@ void Channel::RemoveModeInternal(ChannelMode *cm, const std::string ¶m, bool */ void Channel::SetMode(BotInfo *bi, ChannelMode *cm, const std::string ¶m, bool EnforceMLock) { - if (!cm) + if (!cm || HasMode(cm->Name)) return; ModeManager::StackerAdd(bi, this, cm, true, param); @@ -407,7 +409,7 @@ void Channel::SetMode(BotInfo *bi, char Mode, const std::string ¶m, bool Enf */ void Channel::RemoveMode(BotInfo *bi, ChannelMode *cm, const std::string ¶m, bool EnforceMLock) { - if (!cm) + if (!cm || !HasMode(cm->Name)) return; ModeManager::StackerAdd(bi, this, cm, false, param); |
