Adding Dynamic Permission PreCondition node

This commit is contained in:
Sean "Solao Bajiuik" Stoves 2020-06-15 21:33:10 -04:00
parent 843e9f4808
commit d7c997f0cf
2 changed files with 43 additions and 3 deletions

View File

@ -2,7 +2,6 @@
using Discord; using Discord;
using Discord.Commands; using Discord.Commands;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Collections.Generic;
using NLog; using NLog;
using System.Text; using System.Text;
using ChaosBot.Database.Repository; using ChaosBot.Database.Repository;
@ -15,8 +14,7 @@ namespace ChaosBot.Discord.Modules
private static readonly string _prefix = ConfigurationRepository.GetValue<string>("Discord:Prefix"); private static readonly string _prefix = ConfigurationRepository.GetValue<string>("Discord:Prefix");
[Command("config")] [Command("config")]
[RequireBotPermission(GuildPermission.ManageGuild)] [RequireRole("Admin")]
[RequireUserPermission(GuildPermission.ManageGuild)]
public async Task setConfig(string configFlag = null, string value = null) public async Task setConfig(string configFlag = null, string value = null)
{ {
var sb = new StringBuilder(); var sb = new StringBuilder();

View File

@ -0,0 +1,42 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using ChaosBot;
using ChaosBot.Database.Repository;
using Discord.Commands;
using Discord.WebSocket;
public class RequireRole : PreconditionAttribute
{
private string _name { get; set; }
public RequireRole(string name) => _name = name;
public override Task<PreconditionResult> CheckPermissionsAsync(ICommandContext context, CommandInfo command, IServiceProvider services)
{
if (context.User is SocketGuildUser gUser)
{
switch (_name)
{
case "Admin":
_name = ConfigurationRepository.GetValue<string>("Role:Admin", context.Guild.Id);
break;
case "Officer":
_name = ConfigurationRepository.GetValue<string>("Role:Officer", context.Guild.Id);
break;
case "Member":
_name = ConfigurationRepository.GetValue<string>("Role:Member", context.Guild.Id);
break;
default:
return Task.FromResult(PreconditionResult.FromError($"{_name} is not a valid Permission Node."));
}
if (gUser.Roles.Any(r => r.Name == _name))
return Task.FromResult(PreconditionResult.FromSuccess());
else
return Task.FromResult(PreconditionResult.FromError($"You must have a role named {_name} to run this command."));
}
else
return Task.FromResult(PreconditionResult.FromError("You must be in a guild to run this command."));
}
}