@page "/Tools/Moderation/MassCMEBan" @using System.Collections.ObjectModel @using LibMatrix.EventTypes.Spec.State.Policy

User Trace



Users: Execute

@foreach (var line in log.Reverse()) {
@line
} @code { // TODO: Properly implement page to be more useful private ObservableCollection log { 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("!fTjMjIzNKEsFlUIiru:neko.dev"); // var room = hs.GetRoom("!yf7OpOiRDXx6zUGpT6:conduit.rory.gay"); var users = roomId.Split("\n").Select(x => x.Trim()).Where(x=>x.StartsWith('@')).ToList(); foreach (var user in users) { var exists = false; try { exists = !string.IsNullOrWhiteSpace((await room.GetStateAsync(UserPolicyRuleEventContent.EventId, user.Replace('@', '_'))).Entity); } catch (Exception e) { log.Add($"Failed to get {user}"); } if (!exists) { var evt = await room.SendStateEventAsync(UserPolicyRuleEventContent.EventId, user.Replace('@', '_'), new UserPolicyRuleEventContent() { Entity = user, Reason = "spam (invite)", Recommendation = "m.ban" }); log.Add($"Sent {evt.EventId} to ban {user}"); } else { log.Add($"User {user} already exists"); } } StateHasChanged(); return ""; } }