Browse Source

try catch precondition execution

pull/949/head
John 7 years ago
parent
commit
ef4d97dfb4
2 changed files with 20 additions and 4 deletions
  1. +12
    -2
      src/Discord.Net.Commands/CommandService.cs
  2. +8
    -2
      src/Discord.Net.Commands/Results/PreconditionResult.cs

+ 12
- 2
src/Discord.Net.Commands/CommandService.cs View File

@@ -1,4 +1,4 @@
using Discord.Commands.Builders;
using Discord.Commands.Builders;
using Discord.Logging; using Discord.Logging;
using System; using System;
using System.Collections.Concurrent; using System.Collections.Concurrent;
@@ -287,7 +287,17 @@ namespace Discord.Commands


foreach (var match in commands) foreach (var match in commands)
{ {
preconditionResults[match] = await match.Command.CheckPreconditionsAsync(context, services).ConfigureAwait(false);
try
{
preconditionResults[match] = await match.Command.CheckPreconditionsAsync(context, services).ConfigureAwait(false);
}
catch (Exception ex)
{
if (_throwOnError)
throw;

return PreconditionResult.FromError(ex);
}
} }


var successfulPreconditions = preconditionResults var successfulPreconditions = preconditionResults


+ 8
- 2
src/Discord.Net.Commands/Results/PreconditionResult.cs View File

@@ -1,17 +1,21 @@
using System.Diagnostics;
using System;
using System.Diagnostics;


namespace Discord.Commands namespace Discord.Commands
{ {
[DebuggerDisplay(@"{DebuggerDisplay,nq}")] [DebuggerDisplay(@"{DebuggerDisplay,nq}")]
public class PreconditionResult : IResult public class PreconditionResult : IResult
{ {
public Exception Exception { get; }

public CommandError? Error { get; } public CommandError? Error { get; }
public string ErrorReason { get; } public string ErrorReason { get; }


public bool IsSuccess => !Error.HasValue; public bool IsSuccess => !Error.HasValue;


protected PreconditionResult(CommandError? error, string errorReason)
protected PreconditionResult(CommandError? error, string errorReason, Exception exception = null)
{ {
Exception = exception;
Error = error; Error = error;
ErrorReason = errorReason; ErrorReason = errorReason;
} }
@@ -20,6 +24,8 @@ namespace Discord.Commands
=> new PreconditionResult(null, null); => new PreconditionResult(null, null);
public static PreconditionResult FromError(string reason) public static PreconditionResult FromError(string reason)
=> new PreconditionResult(CommandError.UnmetPrecondition, reason); => new PreconditionResult(CommandError.UnmetPrecondition, reason);
public static PreconditionResult FromError(Exception ex)
=> new PreconditionResult(CommandError.Exception, ex.Message, ex);
public static PreconditionResult FromError(IResult result) public static PreconditionResult FromError(IResult result)
=> new PreconditionResult(result.Error, result.ErrorReason); => new PreconditionResult(result.Error, result.ErrorReason);




Loading…
Cancel
Save