about summary refs log tree commit diff
path: root/MiniUtils/Commands/IgnoreCommand.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MiniUtils/Commands/IgnoreCommand.cs')
-rw-r--r--MiniUtils/Commands/IgnoreCommand.cs62
1 files changed, 62 insertions, 0 deletions
diff --git a/MiniUtils/Commands/IgnoreCommand.cs b/MiniUtils/Commands/IgnoreCommand.cs
new file mode 100644

index 0000000..4b3fe86 --- /dev/null +++ b/MiniUtils/Commands/IgnoreCommand.cs
@@ -0,0 +1,62 @@ +using LibMatrix.EventTypes.Spec; +using LibMatrix.Helpers; +using LibMatrix.Utilities.Bot.Interfaces; +using MiniUtils.Classes; +using MiniUtils.Services; + +namespace MiniUtils.Commands; + +public class IgnoreCommand(IgnoreListManager ignoreListManager) : ICommand { + public string Name => "ignore"; + + public string[]? Aliases => ["ignorelist"]; + + public string Description => "Manage ignore list"; + + public bool Unlisted => false; + + public async Task Invoke(CommandContext ctx) { + var ignoreList = await ctx.Homeserver.GetAccountDataOrNullAsync<IgnoredUserListEventContentWithDisabled>(IgnoredUserListEventContent.EventId) ?? new(); + if (ctx.Args.Length == 0) + await Summarize(ctx, ignoreList); + else if (ctx.Args is ["disable", "all"] or ["disableall"] or ["disall"]) { + var count = await ignoreListManager.DisableAll(); + await ctx.Room.SendReactionAsync(ctx.MessageEvent.EventId!, $"{Emojis.Recycle} {count}"); + } + else if (ctx.Args is ["enable", "all"] or ["enableall"] or ["enall"]) { + var count = await ignoreListManager.EnableAll(); + await ctx.Room.SendReactionAsync(ctx.MessageEvent.EventId!, $"{Emojis.Bullseye} {count}"); + } + else if (ctx.Args is ["disable", "joined"] or ["disablejoined"]) { + var count = await ignoreListManager.MoveList(false, (await ctx.Room.GetMembersListAsync("join")).Select(x => x.StateKey!)); + await ctx.Room.SendReactionAsync(ctx.MessageEvent.EventId!, $"{Emojis.RightArrowWithTail} {count}"); + } + else if (ctx.Args is ["enable", "joined"] or ["enablejoined"]) { + var count = await ignoreListManager.MoveList(true, (await ctx.Room.GetMembersListAsync("join")).Select(x => x.StateKey!)); + await ctx.Room.SendReactionAsync(ctx.MessageEvent.EventId!, $"{Emojis.RightArrowWithTail} {count}"); + } + else if (ctx.Args is ["disable", "local"] or ["disablelocal"] or ["disable", "room"] or ["disableroom"]) { + var count = await ignoreListManager.MoveList(false, (await ctx.Room.GetMembersListAsync()).Select(x => x.StateKey!)); + await ctx.Room.SendReactionAsync(ctx.MessageEvent.EventId!, $"{Emojis.RightArrowWithTail} {count}"); + } + else if (ctx.Args is ["enable", "local"] or ["enablelocal"] or ["enable", "room"] or ["enableroom"]) { + var count = await ignoreListManager.MoveList(true, (await ctx.Room.GetMembersListAsync()).Select(x => x.StateKey!)); + await ctx.Room.SendReactionAsync(ctx.MessageEvent.EventId!, $"{Emojis.RightArrowWithTail} {count}"); + } + else if (ctx.Args is ["disable", .. var itemsToDisable]) { + var count = await ignoreListManager.MoveList(false, itemsToDisable); + await ctx.Room.SendReactionAsync(ctx.MessageEvent.EventId!, $"{Emojis.RightArrowWithTail} {count}"); + } + else if (ctx.Args is ["enable", .. var itemsToEnable]) { + var count = await ignoreListManager.MoveList(true, itemsToEnable); + await ctx.Room.SendReactionAsync(ctx.MessageEvent.EventId!, $"{Emojis.RightArrowWithTail} {count}"); + } + } + + private async Task Summarize(CommandContext ctx, IgnoredUserListEventContentWithDisabled ignoreList) { + var msb = new MessageBuilder() + .WithBody($"Ignored users: {ignoreList.IgnoredUsers.Count}").WithNewline() + .WithBody($"Disabled ignores: {ignoreList.DisabledIgnoredUsers.Count}").WithNewline(); + await ctx.Room.SendMessageEventAsync(msb.Build()); + } + } \ No newline at end of file