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")); } } }