* Add grouping of preconditions to allow for flexible precondition logic. * Fix checking Module Preconditions twice (and none of the command's own) * Fix command preconditions group 0 looping over every other precondition anyway #whoopsies * Use custom message when a non-zero Precondition Group fails. * Fix doc comment rendering. * Refactor loops into local function * Considering a new result type * Switch to IReadOnlyCollection<T> and fix compiler errors * Revert PreconditionResult -> IResult in return types - Change PreconditionResult to a class that PreconditionGroupResult inherits. * Feedback on property name. * Change grouping type int -> string * Explicitly use an ordinal StringComparer * Full stops on error messages * Remove some sillyness. * Remove unneeded using.
30 lines
1.0 KiB
C#
30 lines
1.0 KiB
C#
using System.Diagnostics;
|
|
|
|
namespace Discord.Commands
|
|
{
|
|
[DebuggerDisplay(@"{DebuggerDisplay,nq}")]
|
|
public class PreconditionResult : IResult
|
|
{
|
|
public CommandError? Error { get; }
|
|
public string ErrorReason { get; }
|
|
|
|
public bool IsSuccess => !Error.HasValue;
|
|
|
|
protected PreconditionResult(CommandError? error, string errorReason)
|
|
{
|
|
Error = error;
|
|
ErrorReason = errorReason;
|
|
}
|
|
|
|
public static PreconditionResult FromSuccess()
|
|
=> new PreconditionResult(null, null);
|
|
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}";
|
|
}
|
|
}
|