83 lines
No EOL
2.9 KiB
C#
83 lines
No EOL
2.9 KiB
C#
#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();
|
|
}
|
|
}
|
|
} |