mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-10 02:59:01 -04:00
Allow a statusmsg to have multiple statuses and pick the lowest.
This is pretty much useless but other implementations support it so we have to also support it for compatibility.
This commit is contained in:
parent
5860247c3b
commit
61225fa14f
@ -114,6 +114,7 @@ enum
|
||||
ERR_TOOMANYCHANNELS = 405,
|
||||
ERR_WASNOSUCHNICK = 406,
|
||||
ERR_NOSUCHSERVICE = 408, // From RFC 2812.
|
||||
ERR_NORECIPIENT = 411,
|
||||
ERR_NOTEXTTOSEND = 412,
|
||||
ERR_UNKNOWNCOMMAND = 421,
|
||||
ERR_NOMOTD = 422,
|
||||
|
@ -298,15 +298,26 @@ class CommandMessage : public Command
|
||||
if (parameters[0][0] == '$')
|
||||
return HandleServerTarget(user, parameters);
|
||||
|
||||
// If the message begins with a status character then look it up.
|
||||
// If the message begins with one or more status characters then look them up.
|
||||
const char* target = parameters[0].c_str();
|
||||
PrefixMode* pmh = ServerInstance->Modes->FindPrefix(target[0]);
|
||||
if (pmh)
|
||||
target++;
|
||||
PrefixMode* targetpfx = NULL;
|
||||
for (PrefixMode* pfx; (pfx = ServerInstance->Modes->FindPrefix(target[0])); ++target)
|
||||
{
|
||||
// We want the lowest ranked prefix specified.
|
||||
if (!targetpfx || pfx->GetPrefixRank() < targetpfx->GetPrefixRank())
|
||||
targetpfx = pfx;
|
||||
}
|
||||
|
||||
if (!target[0])
|
||||
{
|
||||
// The target consisted solely of prefix modes.
|
||||
user->WriteNumeric(ERR_NORECIPIENT, "No recipient given");
|
||||
return CMD_FAILURE;
|
||||
}
|
||||
|
||||
// The target is a channel name.
|
||||
if (*target == '#')
|
||||
return HandleChannelTarget(user, parameters, target, pmh);
|
||||
return HandleChannelTarget(user, parameters, target, targetpfx);
|
||||
|
||||
// The target is a nickname.
|
||||
return HandleUserTarget(user, parameters);
|
||||
|
@ -234,15 +234,26 @@ class CommandTagMsg : public Command
|
||||
if (parameters[0][0] == '$')
|
||||
return HandleServerTarget(user, parameters);
|
||||
|
||||
// If the message begins with a status character then look it up.
|
||||
// If the message begins with one or more status characters then look them up.
|
||||
const char* target = parameters[0].c_str();
|
||||
PrefixMode* pmh = ServerInstance->Modes->FindPrefix(target[0]);
|
||||
if (pmh)
|
||||
target++;
|
||||
PrefixMode* targetpfx = NULL;
|
||||
for (PrefixMode* pfx; (pfx = ServerInstance->Modes->FindPrefix(target[0])); ++target)
|
||||
{
|
||||
// We want the lowest ranked prefix specified.
|
||||
if (!targetpfx || pfx->GetPrefixRank() < targetpfx->GetPrefixRank())
|
||||
targetpfx = pfx;
|
||||
}
|
||||
|
||||
if (!target[0])
|
||||
{
|
||||
// The target consisted solely of prefix modes.
|
||||
user->WriteNumeric(ERR_NORECIPIENT, "No recipient given");
|
||||
return CMD_FAILURE;
|
||||
}
|
||||
|
||||
// The target is a channel name.
|
||||
if (*target == '#')
|
||||
return HandleChannelTarget(user, parameters, target, pmh);
|
||||
return HandleChannelTarget(user, parameters, target, targetpfx);
|
||||
|
||||
// The target is a nickname.
|
||||
return HandleUserTarget(user, parameters);
|
||||
|
Loading…
x
Reference in New Issue
Block a user