about summary refs log tree commit diff
path: root/MiniUtils/Commands/IgnoreCommand.cs
blob: 4206b720ed3684c8ca8ac1d4a15f5286fecaeb63 (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
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}");
        }
        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());
        }
    }