| @@ -8,22 +8,37 @@ namespace Discord.Commands | |||||
| { | { | ||||
| public GuildPermission? GuildPermission { get; } | public GuildPermission? GuildPermission { get; } | ||||
| public ChannelPermission? ChannelPermission { get; } | public ChannelPermission? ChannelPermission { get; } | ||||
| public bool Fuzzy { get; set; } // public for `RequirePermission(permission, Fuzzy = false)` | |||||
| public RequirePermissionAttribute(GuildPermission permission) | public RequirePermissionAttribute(GuildPermission permission) | ||||
| { | { | ||||
| GuildPermission = permission; | GuildPermission = permission; | ||||
| ChannelPermission = null; | ChannelPermission = null; | ||||
| Fuzzy = true; | |||||
| } | } | ||||
| public RequirePermissionAttribute(ChannelPermission permission) | public RequirePermissionAttribute(ChannelPermission permission) | ||||
| { | { | ||||
| ChannelPermission = permission; | ChannelPermission = permission; | ||||
| GuildPermission = null; | GuildPermission = null; | ||||
| Fuzzy = true; | |||||
| } | } | ||||
| public override Task<PreconditionResult> CheckPermissions(CommandContext context, CommandInfo command, IDependencyMap map) | public override Task<PreconditionResult> CheckPermissions(CommandContext context, CommandInfo command, IDependencyMap map) | ||||
| { | { | ||||
| var guildUser = context.User as IGuildUser; | var guildUser = context.User as IGuildUser; | ||||
| if (guildUser != null) | |||||
| { | |||||
| 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 (GuildPermission.HasValue) | ||||
| { | { | ||||
| if (guildUser == null) | if (guildUser == null) | ||||