From 21da6cde79ccd0cb7f895a29e3d8cab959ef11ba Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Mon, 4 Sep 2023 02:17:10 +0200 Subject: Too many changes to name... --- LibMatrix.ExampleBot/Bot/FileStorageProvider.cs | 1 + LibMatrix.ExampleBot/Bot/MRUBot.cs | 4 +- .../Bot/StartupTasks/ServerRoomSizeCalulator.cs | 72 ++++++++++++++++++++++ 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 LibMatrix.ExampleBot/Bot/StartupTasks/ServerRoomSizeCalulator.cs (limited to 'LibMatrix.ExampleBot/Bot') diff --git a/LibMatrix.ExampleBot/Bot/FileStorageProvider.cs b/LibMatrix.ExampleBot/Bot/FileStorageProvider.cs index 1e84ab7..2dfcee5 100644 --- a/LibMatrix.ExampleBot/Bot/FileStorageProvider.cs +++ b/LibMatrix.ExampleBot/Bot/FileStorageProvider.cs @@ -1,4 +1,5 @@ using System.Text.Json; +using ArcaneLibs.Extensions; using LibMatrix.Extensions; using LibMatrix.Interfaces.Services; using Microsoft.Extensions.Logging; diff --git a/LibMatrix.ExampleBot/Bot/MRUBot.cs b/LibMatrix.ExampleBot/Bot/MRUBot.cs index cdeefe2..4f9b173 100644 --- a/LibMatrix.ExampleBot/Bot/MRUBot.cs +++ b/LibMatrix.ExampleBot/Bot/MRUBot.cs @@ -1,6 +1,8 @@ using System.Diagnostics.CodeAnalysis; +using ArcaneLibs.Extensions; using LibMatrix.ExampleBot.Bot.Interfaces; using LibMatrix.Extensions; +using LibMatrix.Homeservers; using LibMatrix.Services; using LibMatrix.StateEventTypes.Spec; using Microsoft.Extensions.DependencyInjection; @@ -31,7 +33,7 @@ public class MRUBot : IHostedService { [SuppressMessage("ReSharper", "FunctionNeverReturns")] public async Task StartAsync(CancellationToken cancellationToken) { Directory.GetFiles("bot_data/cache").ToList().ForEach(File.Delete); - AuthenticatedHomeServer hs; + AuthenticatedHomeserverGeneric hs; try { hs = await _homeserverProviderService.GetAuthenticatedWithToken(_configuration.Homeserver, _configuration.AccessToken); diff --git a/LibMatrix.ExampleBot/Bot/StartupTasks/ServerRoomSizeCalulator.cs b/LibMatrix.ExampleBot/Bot/StartupTasks/ServerRoomSizeCalulator.cs new file mode 100644 index 0000000..4785192 --- /dev/null +++ b/LibMatrix.ExampleBot/Bot/StartupTasks/ServerRoomSizeCalulator.cs @@ -0,0 +1,72 @@ +using System.Diagnostics.CodeAnalysis; +using ArcaneLibs.Extensions; +using LibMatrix.ExampleBot.Bot.Interfaces; +using LibMatrix.Homeservers; +using LibMatrix.Services; +using LibMatrix.StateEventTypes.Spec; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; + +namespace LibMatrix.ExampleBot.Bot.StartupTasks; + +public class ServerRoomSizeCalulator : IHostedService { + private readonly HomeserverProviderService _homeserverProviderService; + private readonly ILogger _logger; + private readonly MRUBotConfiguration _configuration; + private readonly IEnumerable _commands; + + public ServerRoomSizeCalulator(HomeserverProviderService homeserverProviderService, ILogger logger, + MRUBotConfiguration configuration, IServiceProvider services) { + logger.LogInformation("Server room size calculator hosted service instantiated!"); + _homeserverProviderService = homeserverProviderService; + _logger = logger; + _configuration = configuration; + } + + /// Triggered when the application host is ready to start the service. + /// Indicates that the start process has been aborted. + [SuppressMessage("ReSharper", "FunctionNeverReturns")] + public async Task StartAsync(CancellationToken cancellationToken) { + Directory.GetFiles("bot_data/cache").ToList().ForEach(File.Delete); + AuthenticatedHomeserverGeneric hs; + try { + hs = await _homeserverProviderService.GetAuthenticatedWithToken(_configuration.Homeserver, + _configuration.AccessToken); + } + catch (Exception e) { + _logger.LogError("{}", e.Message); + throw; + } + + await (await hs.GetRoom("!DoHEdFablOLjddKWIp:rory.gay")).JoinAsync(); + + Dictionary totalRoomSize = new(); + foreach (var room in await hs.GetJoinedRooms()) { + var stateList = room.GetFullStateAsync().ToBlockingEnumerable().ToList(); + var roomSize = stateList.Count; + if (roomSize > 10000) { + await File.AppendAllLinesAsync("large_rooms.txt", new[] { $"{{ \"{room.RoomId}\", {roomSize} }}," }, cancellationToken); + } + + var roomHs = room.RoomId.Split(":")[1]; + if (totalRoomSize.ContainsKey(roomHs)) { + totalRoomSize[roomHs] += roomSize; + } + else { + totalRoomSize.Add(roomHs, roomSize); + } + + _logger.LogInformation($"Got room state for {room.RoomId}!"); + } + + await File.WriteAllTextAsync("server_size.txt", string.Join('\n', totalRoomSize.Select(x => $"{{ \"{x.Key}\", {x.Value} }},")), cancellationToken); + } + + /// Triggered when the application host is performing a graceful shutdown. + /// Indicates that the shutdown process should no longer be graceful. + public Task StopAsync(CancellationToken cancellationToken) { + _logger.LogInformation("Shutting down bot!"); + return Task.CompletedTask; + } +} -- cgit 1.4.1