about summary refs log tree commit diff
path: root/MiniUtils.CSync/Worker.cs
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2025-11-10 03:05:18 +0100
committerRory& <root@rory.gay>2025-11-10 03:05:18 +0100
commitd272c5b6f50e3f66a430fe4a6bbb3188f9adb1c8 (patch)
tree328d96076fe8c6fe6081f9083fcb3a498c41a683 /MiniUtils.CSync/Worker.cs
parentMore stuff (diff)
downloadMiniUtils-d272c5b6f50e3f66a430fe4a6bbb3188f9adb1c8.tar.xz
MiniUtils changes, add uick ban sync hack bot HEAD master
Diffstat (limited to 'MiniUtils.CSync/Worker.cs')
-rw-r--r--MiniUtils.CSync/Worker.cs48
1 files changed, 48 insertions, 0 deletions
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<Worker> 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<UserPolicyRuleEventContent>()) + .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<string> userIds, GenericRoom room) { + for (int i = 0; i < 10; i++) { + + } + } +} \ No newline at end of file