From ff854df99de9161b905a7d033b17468d7eb73dca Mon Sep 17 00:00:00 2001 From: Daniel-I-Am Date: Thu, 13 Aug 2020 21:11:06 +0200 Subject: [PATCH] Enable the possibility to disable a module --- .../PreConditions/CheckModuleEnabled.cs | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 ChaosBot/Discord/PreConditions/CheckModuleEnabled.cs diff --git a/ChaosBot/Discord/PreConditions/CheckModuleEnabled.cs b/ChaosBot/Discord/PreConditions/CheckModuleEnabled.cs new file mode 100644 index 0000000..4eae395 --- /dev/null +++ b/ChaosBot/Discord/PreConditions/CheckModuleEnabled.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using ChaosBot.Models; +using ChaosBot.Repositories; +using Discord.Commands; +using Discord.WebSocket; +using NLog; + +namespace ChaosBot.Discord.PreConditions +{ + public class CheckModuleEnabled : PreconditionAttribute + { + private static ILogger _logger = Program.Logger; + private readonly string _moduleName; + public CheckModuleEnabled(string moduleName) => _moduleName = moduleName; + + public override Task CheckPermissionsAsync(ICommandContext context, CommandInfo command, IServiceProvider services) + { + // Debug information + _logger.Trace($"CheckModuleEnabled.CheckPermissionsAsync|Checking module enabled for module: {_moduleName}"); + + if (context.Guild == null) return Task.FromResult(PreconditionResult.FromError("This must be run in a guild.")); + + // Check if module enabled in database + bool isModuleEnabled = GetResult(context, _moduleName); + + if (isModuleEnabled) + return Task.FromResult(PreconditionResult.FromSuccess()); + + // Permission denied + return Task.FromResult(PreconditionResult.FromError($"You do not have access to this command.")); + } + + public static bool GetResult(ICommandContext context, string moduleName) + { + if (context.Guild == null) throw new Exception("This must be run in a guild"); + + // Check if module enabled in database + return Convert.ToBoolean(ConfigurationRepository.GetValue($"Module:{moduleName}:Enabled", + context.Guild.Id, "true")); + } + } +} \ No newline at end of file