Add RequireBotPermission, rename RequirePermission
This is a breaking change. Adds a precondition that requires the bot has a specified permission (Resolves #211). Renames RequirePermission to RequireUserPermission.
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Discord.Commands
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
|
||||
public class RequireBotPermissionAttribute : PreconditionAttribute
|
||||
{
|
||||
public GuildPermission? GuildPermission { get; }
|
||||
public ChannelPermission? ChannelPermission { get; }
|
||||
|
||||
public RequireBotPermissionAttribute(GuildPermission permission)
|
||||
{
|
||||
GuildPermission = permission;
|
||||
ChannelPermission = null;
|
||||
}
|
||||
public RequireBotPermissionAttribute(ChannelPermission permission)
|
||||
{
|
||||
ChannelPermission = permission;
|
||||
GuildPermission = null;
|
||||
}
|
||||
|
||||
public override async Task<PreconditionResult> CheckPermissions(CommandContext context, CommandInfo command, IDependencyMap map)
|
||||
{
|
||||
var guildUser = await context.Guild.GetCurrentUserAsync();
|
||||
|
||||
if (GuildPermission.HasValue)
|
||||
{
|
||||
if (guildUser == null)
|
||||
return PreconditionResult.FromError("Command must be used in a guild channel");
|
||||
if (!guildUser.GuildPermissions.Has(GuildPermission.Value))
|
||||
return PreconditionResult.FromError($"Command requires guild permission {GuildPermission.Value}");
|
||||
}
|
||||
|
||||
if (ChannelPermission.HasValue)
|
||||
{
|
||||
var guildChannel = context.Channel as IGuildChannel;
|
||||
|
||||
ChannelPermissions perms;
|
||||
if (guildChannel != null)
|
||||
perms = guildUser.GetPermissions(guildChannel);
|
||||
else
|
||||
perms = ChannelPermissions.All(guildChannel);
|
||||
|
||||
if (!perms.Has(ChannelPermission.Value))
|
||||
return PreconditionResult.FromError($"Command requires channel permission {ChannelPermission.Value}");
|
||||
}
|
||||
|
||||
return PreconditionResult.FromSuccess();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,17 +4,17 @@ using System.Threading.Tasks;
|
||||
namespace Discord.Commands
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
|
||||
public class RequirePermissionAttribute : PreconditionAttribute
|
||||
public class RequireUserPermissionAttribute : PreconditionAttribute
|
||||
{
|
||||
public GuildPermission? GuildPermission { get; }
|
||||
public ChannelPermission? ChannelPermission { get; }
|
||||
|
||||
public RequirePermissionAttribute(GuildPermission permission)
|
||||
public RequireUserPermissionAttribute(GuildPermission permission)
|
||||
{
|
||||
GuildPermission = permission;
|
||||
ChannelPermission = null;
|
||||
}
|
||||
public RequirePermissionAttribute(ChannelPermission permission)
|
||||
public RequireUserPermissionAttribute(ChannelPermission permission)
|
||||
{
|
||||
ChannelPermission = permission;
|
||||
GuildPermission = null;
|
||||
Reference in New Issue
Block a user