From 17cd6291ec905dd58b130b8e6540ff8ce9f2c7fb Mon Sep 17 00:00:00 2001 From: FiniteReality Date: Thu, 18 Aug 2016 23:06:06 +0100 Subject: [PATCH 1/2] Add owner/administrator check to RequirePermissionAttribute A 'Fuzzy' property has been introduced for people who want the old behavior of ignoring owner/administrator checks, which can be used something like this: [RequirePermission(permission, Fuzzy = false)] --- .../Preconditions/RequirePermissionAttribute.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Discord.Net.Commands/Attributes/Preconditions/RequirePermissionAttribute.cs b/src/Discord.Net.Commands/Attributes/Preconditions/RequirePermissionAttribute.cs index db2668df4..393f2ed42 100644 --- a/src/Discord.Net.Commands/Attributes/Preconditions/RequirePermissionAttribute.cs +++ b/src/Discord.Net.Commands/Attributes/Preconditions/RequirePermissionAttribute.cs @@ -8,22 +8,34 @@ namespace Discord.Commands { public GuildPermission? GuildPermission { get; } public ChannelPermission? ChannelPermission { get; } + public bool Fuzzy { get; set; } // public for `RequirePermission(permission, Fuzzy = false)` public RequirePermissionAttribute(GuildPermission permission) { GuildPermission = permission; ChannelPermission = null; + Fuzzy = true; } public RequirePermissionAttribute(ChannelPermission permission) { ChannelPermission = permission; GuildPermission = null; + Fuzzy = true; } public override Task CheckPermissions(IMessage context, Command executingCommand, object moduleInstance) { var guildUser = context.Author as IGuildUser; + if (Fuzzy) + { + if (guildUser.Id == guildUser.Guild.OwnerId) + return Task.FromResult(PreconditionResult.FromSuccess()); + + if (guildUser.GuildPermissions.Administrator) + return Task.FromResult(PreconditionResult.FromSuccess()); + } + if (GuildPermission.HasValue) { if (guildUser == null) From dfe043080ed8ce955b68485fd8a9256e9569a920 Mon Sep 17 00:00:00 2001 From: FiniteReality Date: Thu, 18 Aug 2016 23:18:34 +0100 Subject: [PATCH 2/2] Fix logic error in RequirePermissionAttribute --- .../Preconditions/RequirePermissionAttribute.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Discord.Net.Commands/Attributes/Preconditions/RequirePermissionAttribute.cs b/src/Discord.Net.Commands/Attributes/Preconditions/RequirePermissionAttribute.cs index 393f2ed42..cd9ed6a44 100644 --- a/src/Discord.Net.Commands/Attributes/Preconditions/RequirePermissionAttribute.cs +++ b/src/Discord.Net.Commands/Attributes/Preconditions/RequirePermissionAttribute.cs @@ -27,13 +27,16 @@ namespace Discord.Commands { var guildUser = context.Author as IGuildUser; - if (Fuzzy) + if (guildUser != null) { - if (guildUser.Id == guildUser.Guild.OwnerId) - return Task.FromResult(PreconditionResult.FromSuccess()); + if (Fuzzy) + { + if (guildUser.Id == guildUser.Guild.OwnerId) + return Task.FromResult(PreconditionResult.FromSuccess()); - if (guildUser.GuildPermissions.Administrator) - return Task.FromResult(PreconditionResult.FromSuccess()); + if (guildUser.GuildPermissions.Administrator) + return Task.FromResult(PreconditionResult.FromSuccess()); + } } if (GuildPermission.HasValue)