diff --git a/src/Discord.Net.Commands/Attributes/PreconditionAttribute.cs b/src/Discord.Net.Commands/Attributes/PreconditionAttribute.cs
index e099380f6..3727510d9 100644
--- a/src/Discord.Net.Commands/Attributes/PreconditionAttribute.cs
+++ b/src/Discord.Net.Commands/Attributes/PreconditionAttribute.cs
@@ -6,6 +6,13 @@ namespace Discord.Commands
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public abstract class PreconditionAttribute : Attribute
{
+ ///
+ /// Specify a group that this precondition belongs to. Preconditions of the same group require only one
+ /// of the preconditions to pass in order to be successful (A || B). Specifying =
+ /// or not at all will require *all* preconditions to pass, just like normal (A && B).
+ ///
+ public string Group { get; set; } = null;
+
public abstract Task CheckPermissions(ICommandContext context, CommandInfo command, IServiceProvider services);
}
}
diff --git a/src/Discord.Net.Commands/CommandMatch.cs b/src/Discord.Net.Commands/CommandMatch.cs
index 04a2d040f..74c0de73e 100644
--- a/src/Discord.Net.Commands/CommandMatch.cs
+++ b/src/Discord.Net.Commands/CommandMatch.cs
@@ -18,7 +18,7 @@ namespace Discord.Commands
public Task CheckPreconditionsAsync(ICommandContext context, IServiceProvider services = null)
=> Command.CheckPreconditionsAsync(context, services);
- public Task ParseAsync(ICommandContext context, SearchResult searchResult, PreconditionResult? preconditionResult = null)
+ public Task ParseAsync(ICommandContext context, SearchResult searchResult, PreconditionResult preconditionResult = null)
=> Command.ParseAsync(context, Alias.Length, searchResult, preconditionResult);
public Task ExecuteAsync(ICommandContext context, IEnumerable