1
0
mirror of https://github.com/anope/anope.git synced 2026-07-03 03:03:13 +02:00

Fix negatively locking param modes in default mlock

This commit is contained in:
Adam
2015-01-26 13:16:25 -05:00
parent 9ac1b4ba01
commit d324e91520
+32 -8
View File
@@ -958,16 +958,40 @@ class CSMode : public Module
for (unsigned i = 0; i < mlock.length(); ++i)
{
if (mlock[i] == '+')
add = true;
else if (mlock[i] == '-')
add = false;
else
{
ChannelMode *cm = ModeManager::FindChannelModeByChar(mlock[i]);
Anope::string param;
if (cm && (cm->type == MODE_REGULAR || sep.GetToken(param)))
ml->SetMLock(cm, add, param);
add = true;
continue;
}
if (mlock[i] == '-')
{
add = false;
continue;
}
ChannelMode *cm = ModeManager::FindChannelModeByChar(mlock[i]);
if (!cm)
continue;
Anope::string param;
if (cm->type == MODE_PARAM)
{
ChannelModeParam *cmp = anope_dynamic_static_cast<ChannelModeParam *>(cm);
if (add || !cmp->minus_no_arg)
{
sep.GetToken(param);
if (param.empty() || !cmp->IsValid(param))
continue;
}
}
else if (cm->type != MODE_REGULAR)
{
sep.GetToken(param);
if (param.empty())
continue;
}
ml->SetMLock(cm, add, param);
}
}
ml->Check();