From 41c5a84dacfd036b8d8f01f72226ac5a519995e3 Mon Sep 17 00:00:00 2001 From: Rory& Date: Tue, 14 May 2024 17:49:09 +0200 Subject: Organise tools somewhat, set proper icons for nav menu --- .../Pages/Tools/Moderation/InviteCounter.razor | 68 ++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 MatrixUtils.Web/Pages/Tools/Moderation/InviteCounter.razor (limited to 'MatrixUtils.Web/Pages/Tools/Moderation/InviteCounter.razor') diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/InviteCounter.razor b/MatrixUtils.Web/Pages/Tools/Moderation/InviteCounter.razor new file mode 100644 index 0000000..2123d4d --- /dev/null +++ b/MatrixUtils.Web/Pages/Tools/Moderation/InviteCounter.razor @@ -0,0 +1,68 @@ +@page "/Tools/Moderation/InviteCounter" +@using System.Collections.ObjectModel +@using LibMatrix.EventTypes.Spec.State +

Invite counter

+
+ +
+Room ID: + +Execute + +
+ +
+ Results + @foreach (var (userId, events) in invites.OrderByDescending(x=>x.Value).ToList()) { +

@userId: @events

+ } +
+ +
+@foreach (var line in log.Reverse()) { +
@line
+} + +@code { + private ObservableCollection log { get; set; } = new(); + private Dictionary invites { get; set; } = new(); + private AuthenticatedHomeserverGeneric hs { get; set; } + + [Parameter, SupplyParameterFromQuery(Name = "room")] + public string roomId { get; set; } + + + protected override async Task OnInitializedAsync() { + log.CollectionChanged += (sender, args) => StateHasChanged(); + hs = await RMUStorage.GetCurrentSessionOrNavigate(); + if (hs is null) return; + + StateHasChanged(); + Console.WriteLine("Rerendered!"); + await base.OnInitializedAsync(); + } + + private async Task Execute() { + var room = hs.GetRoom(roomId); + var events = room.GetManyMessagesAsync(limit: int.MaxValue); + await foreach (var resp in events) { + var all = resp.State.Concat(resp.Chunk); + foreach (var evt in all) { + if(evt.Type != RoomMemberEventContent.EventId) continue; + var content = evt.TypedContent as RoomMemberEventContent; + if(content.Membership != "invite") continue; + if(!invites.ContainsKey(evt.Sender)) invites[evt.Sender] = 0; + invites[evt.Sender]++; + } + + log.Add($"{resp.State.Count} state, {resp.Chunk.Count} timeline"); + } + + + + StateHasChanged(); + + return ""; + } + +} \ No newline at end of file -- cgit 1.4.1