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(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}"); } else if (ctx.Args is ["add", .. var itemsToAdd]) { var count = await ignoreListManager.AddList(itemsToAdd); 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()); } }