From 6d87d2fedf1fc63c3854a6186107ca4ee13eddcd Mon Sep 17 00:00:00 2001 From: Paulo Anjos Date: Mon, 16 Jan 2017 04:41:38 -0200 Subject: [PATCH] Return CommandInfo at ExecuteResult --- src/Discord.Net.Commands/Info/CommandInfo.cs | 12 +++++----- .../Results/ExecuteResult.cs | 23 ++++++++++++++----- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/Discord.Net.Commands/Info/CommandInfo.cs b/src/Discord.Net.Commands/Info/CommandInfo.cs index 031d37581..aab274de0 100644 --- a/src/Discord.Net.Commands/Info/CommandInfo.cs +++ b/src/Discord.Net.Commands/Info/CommandInfo.cs @@ -99,13 +99,13 @@ namespace Discord.Commands public Task ExecuteAsync(ICommandContext context, ParseResult parseResult, IDependencyMap map) { if (!parseResult.IsSuccess) - return Task.FromResult(ExecuteResult.FromError(parseResult)); + return Task.FromResult(ExecuteResult.FromError(this, parseResult)); var argList = new object[parseResult.ArgValues.Count]; for (int i = 0; i < parseResult.ArgValues.Count; i++) { if (!parseResult.ArgValues[i].IsSuccess) - return Task.FromResult(ExecuteResult.FromError(parseResult.ArgValues[i])); + return Task.FromResult(ExecuteResult.FromError(this, parseResult.ArgValues[i])); argList[i] = parseResult.ArgValues[i].Values.First().Value; } @@ -113,7 +113,7 @@ namespace Discord.Commands for (int i = 0; i < parseResult.ParamValues.Count; i++) { if (!parseResult.ParamValues[i].IsSuccess) - return Task.FromResult(ExecuteResult.FromError(parseResult.ParamValues[i])); + return Task.FromResult(ExecuteResult.FromError(this, parseResult.ParamValues[i])); paramList[i] = parseResult.ParamValues[i].Values.First().Value; } @@ -132,7 +132,7 @@ namespace Discord.Commands { var result = await parameter.CheckPreconditionsAsync(context, args, map).ConfigureAwait(false); if (!result.IsSuccess) - return ExecuteResult.FromError(result); + return ExecuteResult.FromError(this, result); } switch (RunMode) @@ -147,11 +147,11 @@ namespace Discord.Commands var t2 = Task.Run(() => _action(context, args, map)); break; } - return ExecuteResult.FromSuccess(); + return ExecuteResult.FromSuccess(this); } catch (Exception ex) { - return ExecuteResult.FromError(ex); + return ExecuteResult.FromError(this, ex); } } diff --git a/src/Discord.Net.Commands/Results/ExecuteResult.cs b/src/Discord.Net.Commands/Results/ExecuteResult.cs index bad39e230..1d0aad237 100644 --- a/src/Discord.Net.Commands/Results/ExecuteResult.cs +++ b/src/Discord.Net.Commands/Results/ExecuteResult.cs @@ -11,24 +11,35 @@ namespace Discord.Commands public CommandError? Error { get; } public string ErrorReason { get; } + public CommandInfo Command { get; } + public bool IsSuccess => !Error.HasValue; - private ExecuteResult(Exception exception, CommandError? error, string errorReason) + private ExecuteResult(CommandInfo command, Exception exception, CommandError? error, string errorReason) { + Command = command; Exception = exception; Error = error; ErrorReason = errorReason; } public static ExecuteResult FromSuccess() - => new ExecuteResult(null, null, null); + => new ExecuteResult(null, null, null, null); public static ExecuteResult FromError(CommandError error, string reason) - => new ExecuteResult(null, error, reason); + => new ExecuteResult(null, null, error, reason); public static ExecuteResult FromError(Exception ex) - => new ExecuteResult(ex, CommandError.Exception, ex.Message); + => new ExecuteResult(null, ex, CommandError.Exception, ex.Message); public static ExecuteResult FromError(IResult result) - => new ExecuteResult(null, result.Error, result.ErrorReason); - + => new ExecuteResult(null, null, result.Error, result.ErrorReason); + public static ExecuteResult FromSuccess(CommandInfo command) + => new ExecuteResult(command, null, null, null); + public static ExecuteResult FromError(CommandInfo command, CommandError error, string reason) + => new ExecuteResult(command, null, error, reason); + public static ExecuteResult FromError(CommandInfo command, Exception ex) + => new ExecuteResult(command, ex, CommandError.Exception, ex.Message); + public static ExecuteResult FromError(CommandInfo command, IResult result) + => new ExecuteResult(command, null, result.Error, result.ErrorReason); + public override string ToString() => IsSuccess ? "Success" : $"{Error}: {ErrorReason}"; private string DebuggerDisplay => IsSuccess ? "Success" : $"{Error}: {ErrorReason}"; }