1
0
mirror of https://github.com/anope/anope.git synced 2026-07-01 07:16:38 +02:00

Made mode lock del check status of the mode lock before removing it

This commit is contained in:
Adam
2012-02-18 15:47:16 -05:00
parent ee5cd8493e
commit f2ce9cd85c
4 changed files with 17 additions and 7 deletions
+2 -1
View File
@@ -363,10 +363,11 @@ class CoreExport ChannelInfo : public Extensible, public Flags<ChannelInfoFlag,
/** Remove a mlock
* @param mode The mode
* @param status True for mlock on, false for mlock off
* @param param The param of the mode, required if it is a list or status mode
* @return true on success, false on failure
*/
bool RemoveMLock(ChannelMode *mode, const Anope::string &param = "");
bool RemoveMLock(ChannelMode *mode, bool status, const Anope::string &param = "");
/** Clear all mlocks on the channel
*/
+2 -2
View File
@@ -136,7 +136,7 @@ class CommandCSMode : public Command
source.Reply(_("Missing parameter for mode %c."), cm->ModeChar);
else
{
if (ci->RemoveMLock(cm, mode_param))
if (ci->RemoveMLock(cm, adding, mode_param))
{
if (!mode_param.empty())
mode_param = " " + mode_param;
@@ -144,7 +144,7 @@ class CommandCSMode : public Command
Log(override ? LOG_OVERRIDE : LOG_COMMAND, u, this, ci) << "to unlock " << (adding ? '+' : '-') << cm->ModeChar << mode_param;
}
else
source.Reply(_("%c is not locked on %s."), cm->ModeChar, ci->name.c_str());
source.Reply(_("%c%c is not locked on %s."), adding == 1 ? '+' : '-', cm->ModeChar, ci->name.c_str());
}
}
}
+1 -1
View File
@@ -99,7 +99,7 @@ class CommandCSSetPersist : public Command
if (ci->c && ci->c->HasMode(CMODE_PERM))
ci->c->RemoveMode(NULL, cm);
/* Remove from mlock */
ci->RemoveMLock(cm);
ci->RemoveMLock(cm, true);
}
/* No channel mode, no BotServ, but using ChanServ as the botserv bot
+12 -3
View File
@@ -806,10 +806,11 @@ bool ChannelInfo::SetMLock(ChannelMode *mode, bool status, const Anope::string &
/** Remove a mlock
* @param mode The mode
* @param status True for mlock on, false for mlock off
* @param param The param of the mode, required if it is a list or status mode
* @return true on success, false on failure
*/
bool ChannelInfo::RemoveMLock(ChannelMode *mode, const Anope::string &param)
bool ChannelInfo::RemoveMLock(ChannelMode *mode, bool status, const Anope::string &param)
{
if (mode->Type == MODE_REGULAR || mode->Type == MODE_PARAM)
{
@@ -817,13 +818,21 @@ bool ChannelInfo::RemoveMLock(ChannelMode *mode, const Anope::string &param)
if (it != this->mode_locks.end())
for (; it != it_end; it = it_next)
{
const ModeLock &ml = it->second;
++it_next;
if (status != ml.set)
continue;
EventReturn MOD_RESULT;
FOREACH_RESULT(I_OnUnMLock, OnUnMLock(this, &it->second));
if (MOD_RESULT != EVENT_STOP)
{
this->mode_locks.erase(it);
return true;
}
}
return true;
return false;
}
else
{
@@ -835,7 +844,7 @@ bool ChannelInfo::RemoveMLock(ChannelMode *mode, const Anope::string &param)
for (; it != it_end; ++it)
{
const ModeLock &ml = it->second;
if (ml.param == param)
if (ml.set == status && ml.param == param)
{
EventReturn MOD_RESULT;
FOREACH_RESULT(I_OnUnMLock, OnUnMLock(this, &it->second));