public void Handler(object sender, ReceivedCommandEventArgs e)
{
if (e.Arguments.Length < 1)
{
e.User.SendNumeric(Numerics.ERR_NEEDMOREPARAMS, CMD, SYNTAX);
return;
}
if (Protocol.CHANNEL_PREFIX_CHARS.Contains(e.Arguments[0][0]))
{
ChannelSurrogate target = e.Server.GetRegisteredChannel(e.Arguments[0]);
if (target == null)
{
e.User.SendNumeric(Numerics.ERR_NOSUCHCHANNEL, e.Arguments[0], ":That channel is not registered.");
return;
}
if (e.Arguments.Length < 2)
{
SendMeta(e.User, target.Name, e.User.IsOwner(target) || e.User.Level >= Authorizations.NetworkOperator, target.Flags, target.Properties);
}
else
{
char dir = e.Arguments[1][0];
string key;
if ((dir != '-' && dir != '+') || e.Arguments[1].Length < 2)
{
key = e.Arguments[1];
dir = '+';
}
else
{
key = e.Arguments[1].Substring(1);
}
if (key[0] != ':')
{
key = ":" + key;
}
if (e.Arguments.Length < 3)
{
SetFlag(e.User, dir, key, target.Flags, target.Properties);
}
else
{
SetProperty(e.User, dir, key, target.Flags, target.Properties, e.Arguments[2]);
}
target.Commit();
}
}
else
{
UserSurrogate target = e.Server.GetRegisteredUser(e.Arguments[0]);
if (target == null)
{
e.User.SendNumeric(Numerics.ERR_NOSUCHACCOUNT, e.Arguments[0], ":That account is not registered.");
return;
}
if (e.Arguments.Length < 2)
{
SendMeta(e.User, target.Mask.Account, e.User.Mask.Account == e.Arguments[0].ToLower() || e.User.Level >= Authorizations.NetworkOperator, target.Flags, target.Properties);
}
else
{
char dir = e.Arguments[1][0];
string key;
if ((dir != '-' && dir != '+') || e.Arguments[1].Length < 2)
{
key = e.Arguments[1];
dir = '+';
}
else
{
key = e.Arguments[1].Substring(1);
}
if (key[0] != ':')
{
key = ":" + key;
}
if (e.Arguments.Length < 3)
{
SetFlag(e.User, dir, key, target.Flags, target.Properties);
}
else
{
SetProperty(e.User, dir, key, target.Flags, target.Properties, e.Arguments[2]);
}
target.Commit();
}
}
}