mirror of
https://github.com/anope/anope.git
synced 2026-06-27 10:06:38 +02:00
Chnaged ChannelModeSet/Unset events to be able to block checks such as secureops and mlock, and made it so you can't set a mode already set or unset a mode already unset so the modestacker doesn't send modes it doesn't need to
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2719 5417fbe8-f217-4b02-8779-1006273d7864
This commit is contained in:
+4
-2
@@ -936,14 +936,16 @@ class CoreExport Module
|
||||
/** Called when a mode is set on a channel
|
||||
* @param c The channel
|
||||
* @param Name The mode name
|
||||
* @return EVENT_STOP to make mlock/secureops etc checks not happen
|
||||
*/
|
||||
virtual void OnChannelModeSet(Channel *c, ChannelModeName Name) { }
|
||||
virtual EventReturn OnChannelModeSet(Channel *c, ChannelModeName Name) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called when a mode is unset on a channel
|
||||
* @param c The channel
|
||||
* @param Name The mode name
|
||||
* @return EVENT_STOP to make mlock/secureops etc checks not happen
|
||||
*/
|
||||
virtual void OnChannelModeUnset(Channel *c, ChannelModeName Name) { }
|
||||
virtual EventReturn OnChannelModeUnset(Channel *c, ChannelModeName Name) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called when a mode is set on a user
|
||||
* @param u The user
|
||||
|
||||
+8
-6
@@ -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);
|
||||
|
||||
+13
-5
@@ -180,17 +180,21 @@ class OSDEFCON : public Module
|
||||
return EVENT_CONTINUE;
|
||||
}
|
||||
|
||||
void OnChannelModeSet(Channel *c, ChannelModeName Name)
|
||||
EventReturn OnChannelModeSet(Channel *c, ChannelModeName Name)
|
||||
{
|
||||
ChannelMode *cm = ModeManager::FindChannelModeByName(Name);
|
||||
|
||||
if (CheckDefCon(DEFCON_FORCE_CHAN_MODES) && cm && DefConModesOff.HasFlag(Name))
|
||||
{
|
||||
c->RemoveMode(NULL, Name);
|
||||
c->RemoveMode(findbot(Config.s_OperServ), Name);
|
||||
|
||||
return EVENT_STOP;
|
||||
}
|
||||
|
||||
return EVENT_CONTINUE;
|
||||
}
|
||||
|
||||
void OnChannelModeUnset(Channel *c, ChannelModeName Name)
|
||||
EventReturn OnChannelModeUnset(Channel *c, ChannelModeName Name)
|
||||
{
|
||||
ChannelMode *cm = ModeManager::FindChannelModeByName(Name);
|
||||
|
||||
@@ -200,12 +204,16 @@ class OSDEFCON : public Module
|
||||
|
||||
if (GetDefConParam(Name, ¶m))
|
||||
{
|
||||
c->SetMode(NULL, Name, param);
|
||||
c->SetMode(findbot(Config.s_OperServ), Name, param);
|
||||
}
|
||||
else
|
||||
c->SetMode(NULL, Name);
|
||||
c->SetMode(findbot(Config.s_OperServ), Name);
|
||||
|
||||
return EVENT_STOP;
|
||||
|
||||
}
|
||||
|
||||
return EVENT_CONTINUE;
|
||||
}
|
||||
|
||||
EventReturn OnPreCommandRun(const char *service, User *u, const char *cmd, Command *c)
|
||||
|
||||
+2
-2
@@ -512,7 +512,7 @@ void User::RemoveModeInternal(UserMode *um)
|
||||
*/
|
||||
void User::SetMode(BotInfo *bi, UserMode *um, const std::string &Param)
|
||||
{
|
||||
if (!um)
|
||||
if (!um || HasMode(um->Name))
|
||||
return;
|
||||
|
||||
ModeManager::StackerAdd(bi, this, um, true, Param);
|
||||
@@ -545,7 +545,7 @@ void User::SetMode(BotInfo *bi, char ModeChar, const std::string &Param)
|
||||
*/
|
||||
void User::RemoveMode(BotInfo *bi, UserMode *um)
|
||||
{
|
||||
if (!um)
|
||||
if (!um || !HasMode(um->Name))
|
||||
return;
|
||||
|
||||
ModeManager::StackerAdd(bi, this, um, false);
|
||||
|
||||
Reference in New Issue
Block a user