From e5591eef3850a9796cc87386128651a828b70697 Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Fri, 6 Oct 2023 18:29:15 +0200 Subject: Small refactors --- ExampleBots/MediaModeratorPoC/PolicyEngine.cs | 86 +++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 ExampleBots/MediaModeratorPoC/PolicyEngine.cs (limited to 'ExampleBots/MediaModeratorPoC/PolicyEngine.cs') diff --git a/ExampleBots/MediaModeratorPoC/PolicyEngine.cs b/ExampleBots/MediaModeratorPoC/PolicyEngine.cs new file mode 100644 index 0000000..0a0a565 --- /dev/null +++ b/ExampleBots/MediaModeratorPoC/PolicyEngine.cs @@ -0,0 +1,86 @@ +using LibMatrix.EventTypes.Spec; +using LibMatrix.Helpers; +using LibMatrix.Homeservers; +using LibMatrix.RoomTypes; +using LibMatrix.Services; +using MediaModeratorPoC.AccountData; +using MediaModeratorPoC.StateEventTypes; +using Microsoft.Extensions.Logging; + +namespace MediaModeratorPoC; + +public class PolicyEngine(AuthenticatedHomeserverGeneric hs, ILogger logger, MediaModBotConfiguration configuration, + HomeserverResolverService hsResolver) { + public List ActivePolicyLists { get; set; } = new(); + private GenericRoom? _logRoom; + private GenericRoom? _controlRoom; + + public async Task ReloadActivePolicyLists() { + // first time init + if (_logRoom is null || _controlRoom is null) { + var botData = await hs.GetAccountDataAsync("gay.rory.modbot_data"); + _logRoom ??= hs.GetRoom(botData.LogRoom ?? botData.ControlRoom); + _controlRoom ??= hs.GetRoom(botData.ControlRoom); + } + + await _controlRoom?.SendMessageEventAsync(MessageFormatter.FormatSuccess("Reloading policy lists!"))!; + await _logRoom?.SendMessageEventAsync( + new RoomMessageEventContent( + body: "Reloading policy lists!", + messageType: "m.text"))!; + + await _controlRoom?.SendMessageEventAsync(MessageFormatter.FormatSuccess("0/? policy lists loaded"))!; + + var policyLists = new List(); + var policyListAccountData = await hs.GetAccountDataAsync>("gay.rory.modbot.policy_lists"); + foreach (var (roomId, policyList) in policyListAccountData) { + _logRoom?.SendMessageEventAsync( + new RoomMessageEventContent( + body: $"Loading policy list {MessageFormatter.HtmlFormatMention(roomId)}!", + messageType: "m.text")); + var room = hs.GetRoom(roomId); + + policyList.Room = room; + + var stateEvents = room.GetFullStateAsync(); + await foreach (var stateEvent in stateEvents) { + if (stateEvent != null && stateEvent.GetType.IsAssignableTo(typeof(BasePolicy))) { + policyList.Policies.Add(stateEvent); + } + } + + //html table of policy count by type + var policyCount = policyList.Policies.GroupBy(x => x.Type).ToDictionary(x => x.Key, x => x.Count()); + var policyCountTable = policyCount.Aggregate( + "", + (current, policy) => current + $""); + policyCountTable += "
Policy TypeCount
{policy.Key}{policy.Value}
"; + + var policyCountTablePlainText = policyCount.Aggregate( + "Policy Type | Count\n", + (current, policy) => current + $"{policy.Key,-16} | {policy.Value}\n"); + await _logRoom?.SendMessageEventAsync( + new RoomMessageEventContent() { + MessageType = "org.matrix.custom.html", + Body = $"Policy count for {roomId}:\n{policyCountTablePlainText}", + FormattedBody = $"Policy count for {MessageFormatter.HtmlFormatMention(roomId)}:\n{policyCountTable}", + })!; + + await _logRoom?.SendMessageEventAsync( + new RoomMessageEventContent( + body: $"Loaded {policyList.Policies.Count} policies for {MessageFormatter.HtmlFormatMention(roomId)}!", + messageType: "m.text"))!; + + policyLists.Add(policyList); + + var progressMsgContent = MessageFormatter.FormatSuccess($"{policyLists.Count}/{policyListAccountData.Count} policy lists loaded"); + //edit old message + progressMsgContent.RelatesTo = new() { + + }; + _controlRoom?.SendMessageEventAsync(progressMsgContent); + } + + ActivePolicyLists = policyLists; + } +} -- cgit 1.4.1