From d272c5b6f50e3f66a430fe4a6bbb3188f9adb1c8 Mon Sep 17 00:00:00 2001 From: Rory& Date: Mon, 10 Nov 2025 03:05:18 +0100 Subject: MiniUtils changes, add uick ban sync hack bot --- MiniUtils.CSync/Worker.cs | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 MiniUtils.CSync/Worker.cs (limited to 'MiniUtils.CSync/Worker.cs') diff --git a/MiniUtils.CSync/Worker.cs b/MiniUtils.CSync/Worker.cs new file mode 100644 index 0000000..b2f8d58 --- /dev/null +++ b/MiniUtils.CSync/Worker.cs @@ -0,0 +1,48 @@ +using LibMatrix; +using LibMatrix.EventTypes.Spec.State.Policy; +using LibMatrix.EventTypes.Spec.State.RoomInfo; +using LibMatrix.Helpers; +using LibMatrix.Homeservers; +using LibMatrix.RoomTypes; +using MiniUtils.Classes; + +namespace MiniUtils.CSync; + +public class Worker(ILogger logger, AuthenticatedHomeserverGeneric hs) : BackgroundService { + protected override async Task ExecuteAsync(CancellationToken stoppingToken) { + while (!stoppingToken.IsCancellationRequested) { + var cme = hs.GetRoom("!fTjMjIzNKEsFlUIiru:neko.dev"); + var targetRoom = hs.GetRoom("!kiP76YI0AlDqXjcKj2nM_Bq30GCgGWehndSt3iyA85E"); + + var policies = (await cme.GetFullStateAsListAsync()).Where(x => x is { Type: UserPolicyRuleEventContent.EventId, RawContent.Count: > 1 }) + .Select(x => x.ContentAs()) + .ToList(); + var members = await targetRoom.GetMemberIdsListAsync(membership: "join"); + var intersected = members.Where(x => policies.Any(p => p!.Entity == x)).ToList(); + logger.LogInformation("Found {count} members matching policies", intersected.Count); + + if (intersected.Count > 0) { + await targetRoom.BulkSendEventsAsync(intersected.Select(x => new StateEvent() { + Type = RoomMemberEventContent.EventId, + StateKey = x, + TypedContent = new RoomMemberEventContent() { + Membership = "ban", + Reason = "spam" + } + })); + await targetRoom.SendMessageEventAsync(new MessageBuilder() + .WithBody($"[Pagination helper - {Emojis.Wastebasket}] Banned {intersected.Count} users") + .Build()); + // await RedactEventsAsync() + } + + await Task.Delay(5000, stoppingToken); + } + } + + private async Task RedactEventsAsync(List userIds, GenericRoom room) { + for (int i = 0; i < 10; i++) { + + } + } +} \ No newline at end of file -- cgit 1.5.1