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:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user