#nullable disable using EllieBot.Common.TypeReaders; namespace EllieBot.Modules.Administration; public partial class Administration { [Group] public partial class DiscordPermOverrideCommands : EllieModule<DiscordPermOverrideService> { // override stats, it should require that the user has managessages guild permission // .po 'stats' add user guild managemessages [Cmd] [RequireContext(ContextType.Guild)] [UserPerm(GuildPerm.Administrator)] public async Task DiscordPermOverride(CommandOrExprInfo cmd, params GuildPerm[] perms) { if (perms is null || perms.Length == 0) { await _service.RemoveOverride(ctx.Guild.Id, cmd.Name); await Response().Confirm(strs.perm_override_reset).SendAsync(); return; } var aggregatePerms = perms.Aggregate((acc, seed) => seed | acc); await _service.AddOverride(ctx.Guild.Id, cmd.Name, aggregatePerms); await Response() .Confirm(strs.perm_override(Format.Bold(aggregatePerms.ToString()), Format.Code(cmd.Name))) .SendAsync(); } [Cmd] [RequireContext(ContextType.Guild)] [UserPerm(GuildPerm.Administrator)] public async Task DiscordPermOverrideReset() { var result = await PromptUserConfirmAsync(CreateEmbed() .WithOkColor() .WithDescription(GetText(strs.perm_override_all_confirm))); if (!result) return; await _service.ClearAllOverrides(ctx.Guild.Id); await Response().Confirm(strs.perm_override_all).SendAsync(); } [Cmd] [RequireContext(ContextType.Guild)] [UserPerm(GuildPerm.Administrator)] public async Task DiscordPermOverrideList(int page = 1) { if (--page < 0) return; var allOverrides = await _service.GetAllOverrides(ctx.Guild.Id); await Response() .Paginated() .Items(allOverrides) .PageSize(9) .CurrentPage(page) .Page((items, _) => { var eb = CreateEmbed().WithTitle(GetText(strs.perm_overrides)).WithOkColor(); if (items.Count == 0) eb.WithDescription(GetText(strs.perm_override_page_none)); else { eb.WithDescription(items.Select(ov => $"{ov.Command} => {ov.Perm.ToString()}") .Join("\n")); } return eb; }) .SendAsync(); } } }