|
|
@@ -6,7 +6,7 @@ using System.Threading.Tasks; |
|
|
|
namespace Discord.Commands.Attributes.Preconditions |
|
|
|
{ |
|
|
|
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)] |
|
|
|
public class RequirePermission : RequireGuildAttribute |
|
|
|
public class RequirePermission : PreconditionAttribute |
|
|
|
{ |
|
|
|
public GuildPermission? GuildPermission { get; set; } |
|
|
|
public ChannelPermission? ChannelPermission { get; set; } |
|
|
@@ -23,12 +23,10 @@ namespace Discord.Commands.Attributes.Preconditions |
|
|
|
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; |
|
|
|
|
|
|
@@ -36,7 +34,7 @@ namespace Discord.Commands.Attributes.Preconditions |
|
|
|
{ |
|
|
|
var guildPerms = author.GuildPermissions.ToList(); |
|
|
|
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) |
|
|
@@ -45,10 +43,10 @@ namespace Discord.Commands.Attributes.Preconditions |
|
|
|
var channelPerms = author.GetPermissions(channel).ToList(); |
|
|
|
|
|
|
|
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()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |