| @@ -6,7 +6,7 @@ using System.Threading.Tasks; | |||||
| namespace Discord.Commands.Attributes.Preconditions | namespace Discord.Commands.Attributes.Preconditions | ||||
| { | { | ||||
| [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)] | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)] | ||||
| public class RequirePermission : RequireGuildAttribute | |||||
| public class RequirePermission : PreconditionAttribute | |||||
| { | { | ||||
| public GuildPermission? GuildPermission { get; set; } | public GuildPermission? GuildPermission { get; set; } | ||||
| public ChannelPermission? ChannelPermission { get; set; } | public ChannelPermission? ChannelPermission { get; set; } | ||||
| @@ -23,12 +23,10 @@ namespace Discord.Commands.Attributes.Preconditions | |||||
| GuildPermission = null; | GuildPermission = null; | ||||
| } | } | ||||
| public override async Task<PreconditionResult> CheckPermissions(IMessage context, Command executingCommand, object moduleInstance) | |||||
| public override Task<PreconditionResult> CheckPermissions(IMessage context, Command executingCommand, object moduleInstance) | |||||
| { | { | ||||
| var result = await base.CheckPermissions(context, executingCommand, moduleInstance).ConfigureAwait(false); | |||||
| if (!result.IsSuccess) | |||||
| return result; | |||||
| if (!(context.Channel is IGuildChannel)) | |||||
| return Task.FromResult(PreconditionResult.FromError("Command must be used in a guild channel")); | |||||
| var author = context.Author as IGuildUser; | var author = context.Author as IGuildUser; | ||||
| @@ -36,7 +34,7 @@ namespace Discord.Commands.Attributes.Preconditions | |||||
| { | { | ||||
| var guildPerms = author.GuildPermissions.ToList(); | var guildPerms = author.GuildPermissions.ToList(); | ||||
| if (!guildPerms.Contains(GuildPermission.Value)) | if (!guildPerms.Contains(GuildPermission.Value)) | ||||
| return PreconditionResult.FromError($"User is missing guild permission {GuildPermission.Value}"); | |||||
| return Task.FromResult(PreconditionResult.FromError($"User is missing guild permission {GuildPermission.Value}")); | |||||
| } | } | ||||
| if (ChannelPermission.HasValue) | if (ChannelPermission.HasValue) | ||||
| @@ -45,10 +43,10 @@ namespace Discord.Commands.Attributes.Preconditions | |||||
| var channelPerms = author.GetPermissions(channel).ToList(); | var channelPerms = author.GetPermissions(channel).ToList(); | ||||
| if (!channelPerms.Contains(ChannelPermission.Value)) | if (!channelPerms.Contains(ChannelPermission.Value)) | ||||
| return PreconditionResult.FromError($"User is missing channel permission {ChannelPermission.Value}"); | |||||
| return Task.FromResult(PreconditionResult.FromError($"User is missing channel permission {ChannelPermission.Value}")); | |||||
| } | } | ||||
| return PreconditionResult.FromSuccess(); | |||||
| return Task.FromResult(PreconditionResult.FromSuccess()); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||