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:
@@ -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 ¶m = "");
|
||||
bool RemoveMLock(ChannelMode *mode, bool status, const Anope::string ¶m = "");
|
||||
|
||||
/** Clear all mlocks on the channel
|
||||
*/
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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 ¶m)
|
||||
bool ChannelInfo::RemoveMLock(ChannelMode *mode, bool status, const Anope::string ¶m)
|
||||
{
|
||||
if (mode->Type == MODE_REGULAR || mode->Type == MODE_PARAM)
|
||||
{
|
||||
@@ -817,13 +818,21 @@ bool ChannelInfo::RemoveMLock(ChannelMode *mode, const Anope::string ¶m)
|
||||
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 ¶m)
|
||||
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));
|
||||
|
||||
Reference in New Issue
Block a user