From 11f1163ec2fc28501974c452303e70a8f72c8389 Mon Sep 17 00:00:00 2001 From: Finite Reality Date: Thu, 4 Aug 2016 23:31:21 +0100 Subject: [PATCH] Add Command and module instance parameters to CheckPermissions After a small discussion with Joe4evr on discord, a way of retrieving the state of a module appeared to be needed. The new override should provide enough context to a bot dev to allow them to do what they want. --- src/Discord.Net.Commands/Attributes/PreconditionAttribute.cs | 2 +- .../Attributes/Preconditions/RequireDMAttribute.cs | 2 +- .../Attributes/Preconditions/RequireGuildAttribute.cs | 2 +- .../Attributes/Preconditions/RequirePermission.cs | 4 ++-- .../Attributes/Preconditions/RequireRoleAttribute.cs | 4 ++-- src/Discord.Net.Commands/Command.cs | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Discord.Net.Commands/Attributes/PreconditionAttribute.cs b/src/Discord.Net.Commands/Attributes/PreconditionAttribute.cs index d4a3b4a11..9d7ec8983 100644 --- a/src/Discord.Net.Commands/Attributes/PreconditionAttribute.cs +++ b/src/Discord.Net.Commands/Attributes/PreconditionAttribute.cs @@ -8,6 +8,6 @@ namespace Discord.Commands [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = true, Inherited = true)] public abstract class PreconditionAttribute : Attribute { - public abstract Task CheckPermissions(IMessage context); + public abstract Task CheckPermissions(IMessage context, Command executingCommand, object moduleInstance); } } diff --git a/src/Discord.Net.Commands/Attributes/Preconditions/RequireDMAttribute.cs b/src/Discord.Net.Commands/Attributes/Preconditions/RequireDMAttribute.cs index eac63f66f..269160e82 100644 --- a/src/Discord.Net.Commands/Attributes/Preconditions/RequireDMAttribute.cs +++ b/src/Discord.Net.Commands/Attributes/Preconditions/RequireDMAttribute.cs @@ -8,7 +8,7 @@ namespace Discord.Commands [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] public class RequireDMAttribute : PreconditionAttribute { - public override Task CheckPermissions(IMessage context) + public override Task CheckPermissions(IMessage context, Command executingCommand, object moduleInstance) { if (context.Channel is IGuildChannel) return Task.FromResult(PreconditionResult.FromError("Command must be used in a DM")); diff --git a/src/Discord.Net.Commands/Attributes/Preconditions/RequireGuildAttribute.cs b/src/Discord.Net.Commands/Attributes/Preconditions/RequireGuildAttribute.cs index e909dc4f3..9ebfd5117 100644 --- a/src/Discord.Net.Commands/Attributes/Preconditions/RequireGuildAttribute.cs +++ b/src/Discord.Net.Commands/Attributes/Preconditions/RequireGuildAttribute.cs @@ -8,7 +8,7 @@ namespace Discord.Commands [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] public class RequireGuildAttribute : PreconditionAttribute { - public override Task CheckPermissions(IMessage context) + public override Task CheckPermissions(IMessage context, Command executingCommand, object moduleInstance) { if (!(context.Channel is IGuildChannel)) return Task.FromResult(PreconditionResult.FromError("Command must be used in a guild")); diff --git a/src/Discord.Net.Commands/Attributes/Preconditions/RequirePermission.cs b/src/Discord.Net.Commands/Attributes/Preconditions/RequirePermission.cs index b88177818..1529fe405 100644 --- a/src/Discord.Net.Commands/Attributes/Preconditions/RequirePermission.cs +++ b/src/Discord.Net.Commands/Attributes/Preconditions/RequirePermission.cs @@ -23,9 +23,9 @@ namespace Discord.Commands.Attributes.Preconditions GuildPermission = null; } - public override async Task CheckPermissions(IMessage context) + public override async Task CheckPermissions(IMessage context, Command executingCommand, object moduleInstance) { - var result = await base.CheckPermissions(context).ConfigureAwait(false); + var result = await base.CheckPermissions(context, executingCommand, moduleInstance).ConfigureAwait(false); if (!result.IsSuccess) return result; diff --git a/src/Discord.Net.Commands/Attributes/Preconditions/RequireRoleAttribute.cs b/src/Discord.Net.Commands/Attributes/Preconditions/RequireRoleAttribute.cs index 4eda589c2..e0ce73eff 100644 --- a/src/Discord.Net.Commands/Attributes/Preconditions/RequireRoleAttribute.cs +++ b/src/Discord.Net.Commands/Attributes/Preconditions/RequireRoleAttribute.cs @@ -23,9 +23,9 @@ namespace Discord.Commands Comparer = comparer; } - public override async Task CheckPermissions(IMessage context) + public override async Task CheckPermissions(IMessage context, Command executingCommand, object moduleInstance) { - var result = await base.CheckPermissions(context).ConfigureAwait(false); + var result = await base.CheckPermissions(context, executingCommand, moduleInstance).ConfigureAwait(false); if (!result.IsSuccess) return result; diff --git a/src/Discord.Net.Commands/Command.cs b/src/Discord.Net.Commands/Command.cs index 1737cb9af..2b0f34eb3 100644 --- a/src/Discord.Net.Commands/Command.cs +++ b/src/Discord.Net.Commands/Command.cs @@ -46,14 +46,14 @@ namespace Discord.Commands { foreach (PreconditionAttribute precondition in Module.Preconditions) { - var result = await precondition.CheckPermissions(context).ConfigureAwait(false); + var result = await precondition.CheckPermissions(context, this, Module.Instance).ConfigureAwait(false); if (!result.IsSuccess) return result; } foreach (PreconditionAttribute precondition in Preconditions) { - var result = await precondition.CheckPermissions(context).ConfigureAwait(false); + var result = await precondition.CheckPermissions(context, this, Module.Instance).ConfigureAwait(false); if (!result.IsSuccess) return result; }