about summary refs log tree commit diff
path: root/MiniUtils/Commands/IgnoreCommand.cs
blob: 1bd4de3dfe220ad3a6814a159cd606425d92fcb7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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.Where(x => x.StartsWith('@')));
            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.Where(x => x.StartsWith('@')));
            await ctx.Room.SendReactionAsync(ctx.MessageEvent.EventId!, $"{Emojis.RightArrowWithTail} {count}");
        }
        else if (ctx.Args is ["add", .. var itemsToAdd]) {
            var count = await ignoreListManager.AddList(itemsToAdd.Where(x => x.StartsWith('@')));
            await ctx.Room.SendReactionAsync(ctx.MessageEvent.EventId!, $"{Emojis.RightArrowWithTail} {count}");
        }

        else if (ctx.Args is ["remove", .. var itemsToRemove]) {
            var count = await ignoreListManager.RemoveList(itemsToRemove.Where(x => x.StartsWith('@')));
            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());
    }
}