From e452aa96621d2ed7e311ac8309fca299e21734a4 Mon Sep 17 00:00:00 2001 From: RogueException Date: Tue, 9 Aug 2016 17:49:57 -0300 Subject: [PATCH] Cleaned up Command Result structs --- src/Discord.Net.Commands/Command.cs | 4 +++- src/Discord.Net.Commands/CommandService.cs | 4 ++-- src/Discord.Net.Commands/Results/ExecuteResult.cs | 10 ++++------ src/Discord.Net.Commands/Results/ParseResult.cs | 8 +++----- src/Discord.Net.Commands/Results/PreconditionResult.cs | 6 ++++-- src/Discord.Net.Commands/Results/SearchResult.cs | 6 ++++-- src/Discord.Net.Commands/Results/TypeReaderResult.cs | 3 ++- 7 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/Discord.Net.Commands/Command.cs b/src/Discord.Net.Commands/Command.cs index 046753ede..c088277f2 100644 --- a/src/Discord.Net.Commands/Command.cs +++ b/src/Discord.Net.Commands/Command.cs @@ -61,10 +61,12 @@ namespace Discord.Commands return PreconditionResult.FromSuccess(); } - public async Task Parse(IMessage msg, SearchResult searchResult) + public async Task Parse(IMessage msg, SearchResult searchResult, PreconditionResult? preconditionResult = null) { if (!searchResult.IsSuccess) return ParseResult.FromError(searchResult); + if (preconditionResult != null && !preconditionResult.Value.IsSuccess) + return ParseResult.FromError(preconditionResult.Value); return await CommandParser.ParseArgs(this, msg, searchResult.Text.Substring(Text.Length), 0).ConfigureAwait(false); } diff --git a/src/Discord.Net.Commands/CommandService.cs b/src/Discord.Net.Commands/CommandService.cs index 9446d5700..e4453115c 100644 --- a/src/Discord.Net.Commands/CommandService.cs +++ b/src/Discord.Net.Commands/CommandService.cs @@ -209,7 +209,6 @@ namespace Discord.Commands return searchResult; var commands = searchResult.Commands; - for (int i = commands.Count - 1; i >= 0; i--) { var preconditionResult = await commands[i].CheckPreconditions(message); @@ -221,7 +220,7 @@ namespace Discord.Commands continue; } - var parseResult = await commands[i].Parse(message, searchResult); + var parseResult = await commands[i].Parse(message, searchResult, preconditionResult); if (!parseResult.IsSuccess) { if (commands.Count == 1) @@ -229,6 +228,7 @@ namespace Discord.Commands else continue; } + var executeResult = await commands[i].Execute(message, parseResult); return executeResult; } diff --git a/src/Discord.Net.Commands/Results/ExecuteResult.cs b/src/Discord.Net.Commands/Results/ExecuteResult.cs index 60d47c7cb..bad39e230 100644 --- a/src/Discord.Net.Commands/Results/ExecuteResult.cs +++ b/src/Discord.Net.Commands/Results/ExecuteResult.cs @@ -20,15 +20,13 @@ namespace Discord.Commands ErrorReason = errorReason; } - internal static ExecuteResult FromSuccess() + public static ExecuteResult FromSuccess() => new ExecuteResult(null, null, null); - internal static ExecuteResult FromError(CommandError error, string reason) + public static ExecuteResult FromError(CommandError error, string reason) => new ExecuteResult(null, error, reason); - internal static ExecuteResult FromError(Exception ex) + public static ExecuteResult FromError(Exception ex) => new ExecuteResult(ex, CommandError.Exception, ex.Message); - internal static ExecuteResult FromError(ParseResult result) - => new ExecuteResult(null, result.Error, result.ErrorReason); - internal static ExecuteResult FromError(PreconditionResult result) + public static ExecuteResult FromError(IResult result) => new ExecuteResult(null, result.Error, result.ErrorReason); public override string ToString() => IsSuccess ? "Success" : $"{Error}: {ErrorReason}"; diff --git a/src/Discord.Net.Commands/Results/ParseResult.cs b/src/Discord.Net.Commands/Results/ParseResult.cs index e7e886b1a..5c19083be 100644 --- a/src/Discord.Net.Commands/Results/ParseResult.cs +++ b/src/Discord.Net.Commands/Results/ParseResult.cs @@ -20,13 +20,11 @@ namespace Discord.Commands ErrorReason = errorReason; } - internal static ParseResult FromSuccess(IReadOnlyList values) + public static ParseResult FromSuccess(IReadOnlyList values) => new ParseResult(values, null, null); - internal static ParseResult FromError(CommandError error, string reason) + public static ParseResult FromError(CommandError error, string reason) => new ParseResult(null, error, reason); - internal static ParseResult FromError(SearchResult result) - => new ParseResult(null, result.Error, result.ErrorReason); - internal static ParseResult FromError(TypeReaderResult result) + public static ParseResult FromError(IResult result) => new ParseResult(null, result.Error, result.ErrorReason); public override string ToString() => IsSuccess ? "Success" : $"{Error}: {ErrorReason}"; diff --git a/src/Discord.Net.Commands/Results/PreconditionResult.cs b/src/Discord.Net.Commands/Results/PreconditionResult.cs index 9d36ba23f..77ba1b5b9 100644 --- a/src/Discord.Net.Commands/Results/PreconditionResult.cs +++ b/src/Discord.Net.Commands/Results/PreconditionResult.cs @@ -16,10 +16,12 @@ namespace Discord.Commands ErrorReason = errorReason; } - internal static PreconditionResult FromSuccess() + public static PreconditionResult FromSuccess() => new PreconditionResult(null, null); - internal static PreconditionResult FromError(string reason) + public static PreconditionResult FromError(string reason) => new PreconditionResult(CommandError.UnmetPrecondition, reason); + public static PreconditionResult FromError(IResult result) + => new PreconditionResult(result.Error, result.ErrorReason); public override string ToString() => IsSuccess ? "Success" : $"{Error}: {ErrorReason}"; private string DebuggerDisplay => IsSuccess ? "Success" : $"{Error}: {ErrorReason}"; diff --git a/src/Discord.Net.Commands/Results/SearchResult.cs b/src/Discord.Net.Commands/Results/SearchResult.cs index 3cda94ba4..962834c03 100644 --- a/src/Discord.Net.Commands/Results/SearchResult.cs +++ b/src/Discord.Net.Commands/Results/SearchResult.cs @@ -22,10 +22,12 @@ namespace Discord.Commands ErrorReason = errorReason; } - internal static SearchResult FromSuccess(string text, IReadOnlyList commands) + public static SearchResult FromSuccess(string text, IReadOnlyList commands) => new SearchResult(text, commands, null, null); - internal static SearchResult FromError(CommandError error, string reason) + public static SearchResult FromError(CommandError error, string reason) => new SearchResult(null, null, error, reason); + public static SearchResult FromError(IResult result) + => new SearchResult(null, null, result.Error, result.ErrorReason); public override string ToString() => IsSuccess ? "Success" : $"{Error}: {ErrorReason}"; private string DebuggerDisplay => IsSuccess ? $"Success ({Commands.Count} Results)" : $"{Error}: {ErrorReason}"; diff --git a/src/Discord.Net.Commands/Results/TypeReaderResult.cs b/src/Discord.Net.Commands/Results/TypeReaderResult.cs index beeabab16..13ed3cb08 100644 --- a/src/Discord.Net.Commands/Results/TypeReaderResult.cs +++ b/src/Discord.Net.Commands/Results/TypeReaderResult.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using System.Runtime.InteropServices; namespace Discord.Commands { @@ -24,6 +23,8 @@ namespace Discord.Commands => new TypeReaderResult(value, null, null); public static TypeReaderResult FromError(CommandError error, string reason) => new TypeReaderResult(null, error, reason); + public static TypeReaderResult FromError(IResult result) + => new TypeReaderResult(null, result.Error, result.ErrorReason); public override string ToString() => IsSuccess ? "Success" : $"{Error}: {ErrorReason}"; private string DebuggerDisplay => IsSuccess ? $"Success ({Value})" : $"{Error}: {ErrorReason}";