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
|