Added ArgText to commands
This commit is contained in:
@@ -2,6 +2,18 @@
|
|||||||
|
|
||||||
namespace Discord.Commands
|
namespace Discord.Commands
|
||||||
{
|
{
|
||||||
|
public class CommandPart
|
||||||
|
{
|
||||||
|
public string Value { get; }
|
||||||
|
public int Index { get; }
|
||||||
|
|
||||||
|
internal CommandPart(string value, int index)
|
||||||
|
{
|
||||||
|
Value = value;
|
||||||
|
Index = index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//TODO: Check support for escaping
|
//TODO: Check support for escaping
|
||||||
public static class CommandParser
|
public static class CommandParser
|
||||||
{
|
{
|
||||||
@@ -14,24 +26,24 @@ namespace Discord.Commands
|
|||||||
DoubleQuotedParameter
|
DoubleQuotedParameter
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool Parse(string input, out string command, out string[] args)
|
public static bool Parse(string input, out string command, out CommandPart[] args)
|
||||||
{
|
{
|
||||||
return Parse(input, out command, out args, true);
|
return Parse(input, out command, out args, true);
|
||||||
}
|
}
|
||||||
public static bool ParseArgs(string input, out string[] args)
|
public static bool ParseArgs(string input, out CommandPart[] args)
|
||||||
{
|
{
|
||||||
string ignored;
|
string ignored;
|
||||||
return Parse(input, out ignored, out args, false);
|
return Parse(input, out ignored, out args, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool Parse(string input, out string command, out string[] args, bool parseCommand)
|
private static bool Parse(string input, out string command, out CommandPart[] args, bool parseCommand)
|
||||||
{
|
{
|
||||||
CommandParserPart currentPart = parseCommand ? CommandParserPart.CommandName : CommandParserPart.None;
|
CommandParserPart currentPart = parseCommand ? CommandParserPart.CommandName : CommandParserPart.None;
|
||||||
int startPosition = 0;
|
int startPosition = 0;
|
||||||
int endPosition = 0;
|
int endPosition = 0;
|
||||||
int inputLength = input.Length;
|
int inputLength = input.Length;
|
||||||
bool isEscaped = false;
|
bool isEscaped = false;
|
||||||
List<string> argList = new List<string>();
|
List<CommandPart> argList = new List<CommandPart>();
|
||||||
|
|
||||||
command = null;
|
command = null;
|
||||||
args = null;
|
args = null;
|
||||||
@@ -84,7 +96,7 @@ namespace Discord.Commands
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
currentPart = CommandParserPart.None;
|
currentPart = CommandParserPart.None;
|
||||||
argList.Add(temp);
|
argList.Add(new CommandPart(temp, startPosition));
|
||||||
startPosition = endPosition;
|
startPosition = endPosition;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -94,7 +106,7 @@ namespace Discord.Commands
|
|||||||
{
|
{
|
||||||
string temp = input.Substring(startPosition, endPosition - startPosition - 1);
|
string temp = input.Substring(startPosition, endPosition - startPosition - 1);
|
||||||
currentPart = CommandParserPart.None;
|
currentPart = CommandParserPart.None;
|
||||||
argList.Add(temp);
|
argList.Add(new CommandPart(temp, startPosition));
|
||||||
startPosition = endPosition;
|
startPosition = endPosition;
|
||||||
}
|
}
|
||||||
else if (endPosition >= inputLength)
|
else if (endPosition >= inputLength)
|
||||||
@@ -105,7 +117,7 @@ namespace Discord.Commands
|
|||||||
{
|
{
|
||||||
string temp = input.Substring(startPosition, endPosition - startPosition - 1);
|
string temp = input.Substring(startPosition, endPosition - startPosition - 1);
|
||||||
currentPart = CommandParserPart.None;
|
currentPart = CommandParserPart.None;
|
||||||
argList.Add(temp);
|
argList.Add(new CommandPart(temp, startPosition));
|
||||||
startPosition = endPosition;
|
startPosition = endPosition;
|
||||||
}
|
}
|
||||||
else if (endPosition >= inputLength)
|
else if (endPosition >= inputLength)
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ namespace Discord.Commands
|
|||||||
public Message Message { get; }
|
public Message Message { get; }
|
||||||
public Command Command { get; }
|
public Command Command { get; }
|
||||||
public string CommandText { get; }
|
public string CommandText { get; }
|
||||||
|
public string ArgText { get; }
|
||||||
public int? Permissions { get; }
|
public int? Permissions { get; }
|
||||||
public string[] Args { get; }
|
public string[] Args { get; }
|
||||||
|
|
||||||
@@ -19,11 +20,12 @@ namespace Discord.Commands
|
|||||||
public Server Server => Message.Channel.Server;
|
public Server Server => Message.Channel.Server;
|
||||||
public string ServerId => Message.Channel.ServerId;
|
public string ServerId => Message.Channel.ServerId;
|
||||||
|
|
||||||
public CommandEventArgs(Message message, Command command, string commandText, int? permissions, string[] args)
|
public CommandEventArgs(Message message, Command command, string commandText, string argText, int? permissions, string[] args)
|
||||||
{
|
{
|
||||||
Message = message;
|
Message = message;
|
||||||
Command = command;
|
Command = command;
|
||||||
CommandText = commandText;
|
CommandText = commandText;
|
||||||
|
ArgText = argText;
|
||||||
Permissions = permissions;
|
Permissions = permissions;
|
||||||
Args = args;
|
Args = args;
|
||||||
}
|
}
|
||||||
@@ -33,7 +35,7 @@ namespace Discord.Commands
|
|||||||
public Exception Exception { get; }
|
public Exception Exception { get; }
|
||||||
|
|
||||||
public CommandErrorEventArgs(CommandEventArgs baseArgs, Exception ex)
|
public CommandErrorEventArgs(CommandEventArgs baseArgs, Exception ex)
|
||||||
: base(baseArgs.Message, baseArgs.Command, baseArgs.CommandText, baseArgs.Permissions, baseArgs.Args)
|
: base(baseArgs.Message, baseArgs.Command, baseArgs.CommandText, baseArgs.ArgText, baseArgs.Permissions, baseArgs.Args)
|
||||||
{
|
{
|
||||||
Exception = ex;
|
Exception = ex;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ namespace Discord.Commands
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
string[] args;
|
CommandPart[] args;
|
||||||
if (!CommandParser.ParseArgs(msg, out args))
|
if (!CommandParser.ParseArgs(msg, out args))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@ namespace Discord.Commands
|
|||||||
bool isValid = true;
|
bool isValid = true;
|
||||||
for (int j = 0; j < cmd.Parts.Length; j++)
|
for (int j = 0; j < cmd.Parts.Length; j++)
|
||||||
{
|
{
|
||||||
if (!string.Equals(args[j], cmd.Parts[j], StringComparison.OrdinalIgnoreCase))
|
if (!string.Equals(args[j].Value, cmd.Parts[j], StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
isValid = false;
|
isValid = false;
|
||||||
break;
|
break;
|
||||||
@@ -86,11 +86,18 @@ namespace Discord.Commands
|
|||||||
//Clean Args
|
//Clean Args
|
||||||
string[] newArgs = new string[argCount];
|
string[] newArgs = new string[argCount];
|
||||||
for (int j = 0; j < newArgs.Length; j++)
|
for (int j = 0; j < newArgs.Length; j++)
|
||||||
newArgs[j] = args[j + cmd.Parts.Length];
|
newArgs[j] = args[j + cmd.Parts.Length].Value;
|
||||||
|
|
||||||
|
//Get ArgText
|
||||||
|
string argText;
|
||||||
|
if (argCount == 0)
|
||||||
|
argText = "";
|
||||||
|
else
|
||||||
|
argText = msg.Substring(args[cmd.Parts.Length].Index);
|
||||||
|
|
||||||
//Check Permissions
|
//Check Permissions
|
||||||
int permissions = _getPermissions != null ? _getPermissions(e.Message.User, e.Message.Channel?.Server) : 0;
|
int permissions = _getPermissions != null ? _getPermissions(e.Message.User, e.Message.Channel?.Server) : 0;
|
||||||
var eventArgs = new CommandEventArgs(e.Message, cmd, msg, permissions, newArgs);
|
var eventArgs = new CommandEventArgs(e.Message, cmd, msg, argText, permissions, newArgs);
|
||||||
if (permissions < cmd.MinPerms)
|
if (permissions < cmd.MinPerms)
|
||||||
{
|
{
|
||||||
RaiseCommandError(eventArgs, new PermissionException());
|
RaiseCommandError(eventArgs, new PermissionException());
|
||||||
|
|||||||
Reference in New Issue
Block a user