about summary refs log tree commit diff
path: root/Utilities
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2025-02-18 07:40:41 +0100
committerRory& <root@rory.gay>2025-02-18 07:40:41 +0100
commit8673cb236f427ba6af6382e3b5702a134f1afe2e (patch)
tree91cf9a092c47e4041d2e70fe01582184ebc90897 /Utilities
parentChange defaults of GetManyMessages (diff)
downloadLibMatrix-8673cb236f427ba6af6382e3b5702a134f1afe2e.tar.xz
MxcUri class, other various work
Diffstat (limited to 'Utilities')
-rw-r--r--Utilities/LibMatrix.DevTestBot/Bot/Commands/PingCommand.cs13
-rw-r--r--Utilities/LibMatrix.DevTestBot/Bot/PingTestBot.cs125
-rw-r--r--Utilities/LibMatrix.DevTestBot/LibMatrix.DevTestBot.csproj2
-rw-r--r--Utilities/LibMatrix.DevTestBot/Program.cs2
-rw-r--r--Utilities/LibMatrix.DevTestBot/appsettings.json4
-rw-r--r--Utilities/LibMatrix.Utilities.Bot/AppServices/AppServiceConfiguration.cs18
6 files changed, 150 insertions, 14 deletions
diff --git a/Utilities/LibMatrix.DevTestBot/Bot/Commands/PingCommand.cs b/Utilities/LibMatrix.DevTestBot/Bot/Commands/PingCommand.cs

index 85c86a3..745c75d 100644 --- a/Utilities/LibMatrix.DevTestBot/Bot/Commands/PingCommand.cs +++ b/Utilities/LibMatrix.DevTestBot/Bot/Commands/PingCommand.cs
@@ -7,5 +7,16 @@ public class PingCommand : ICommand { public string Name { get; } = "ping"; public string Description { get; } = "Pong!"; - public async Task Invoke(CommandContext ctx) => await ctx.Room.SendMessageEventAsync(new RoomMessageEventContent(body: "pong!")); + // public async Task Invoke(CommandContext ctx) => await ctx.Room.SendMessageEventAsync(new RoomMessageEventContent(body: "pong!")); + public async Task Invoke(CommandContext ctx) { + // await ctx.Room.SendMessageEventAsync(new RoomMessageEventContent(body: "pong!")); + var count = ctx.Args.Length > 0 ? int.Parse(ctx.Args[0]) : 1; + var tasks = Enumerable.Range(0, count).Select(async i => { + await ctx.Room.SendMessageEventAsync(new RoomMessageEventContent(body: $"!ping {i}", messageType: "m.text")); + await Task.Delay(1000); + }).ToList(); + await Task.WhenAll(tasks); + + await ctx.Room.SendMessageEventAsync(new RoomMessageEventContent(body: "Pong!")); + } } \ No newline at end of file diff --git a/Utilities/LibMatrix.DevTestBot/Bot/PingTestBot.cs b/Utilities/LibMatrix.DevTestBot/Bot/PingTestBot.cs new file mode 100644
index 0000000..9c8ad67 --- /dev/null +++ b/Utilities/LibMatrix.DevTestBot/Bot/PingTestBot.cs
@@ -0,0 +1,125 @@ +using System.Diagnostics.CodeAnalysis; +using ArcaneLibs.Extensions; +using LibMatrix.EventTypes.Spec; +using LibMatrix.EventTypes.Spec.State.RoomInfo; +using LibMatrix.ExampleBot.Bot.Interfaces; +using LibMatrix.Filters; +using LibMatrix.Helpers; +using LibMatrix.Homeservers; +using LibMatrix.Services; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; + +namespace LibMatrix.ExampleBot.Bot; + +public class PingTestBot : IHostedService { + private readonly HomeserverProviderService _homeserverProviderService; + private readonly ILogger<DevTestBot> _logger; + private readonly DevTestBotConfiguration _configuration; + private readonly IEnumerable<ICommand> _commands; + + public PingTestBot(HomeserverProviderService homeserverProviderService, ILogger<DevTestBot> logger, + DevTestBotConfiguration configuration, IServiceProvider services) { + logger.LogInformation("{} instantiated!", GetType().Name); + _homeserverProviderService = homeserverProviderService; + _logger = logger; + _configuration = configuration; + _logger.LogInformation("Getting commands..."); + _commands = services.GetServices<ICommand>(); + _logger.LogInformation("Got {} commands!", _commands.Count()); + } + + /// <summary>Triggered when the application host is ready to start the service.</summary> + /// <param name="cancellationToken">Indicates that the start process has been aborted.</param> + [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; + } + + var msg = new MessageBuilder().WithRainbowString("Meanwhile, I'm sitting here, still struggling with trying to rainbow. ^^'").Build(); + + var syncHelper = new SyncHelper(hs); + syncHelper.Filter = new SyncFilter { + Room = new SyncFilter.RoomFilter { + Timeline = new SyncFilter.RoomFilter.StateFilter() { + Limit = 1, + Senders = ["@me"] + }, + Rooms = ["!ping-v11:maunium.net"], + AccountData = new(types: []), + IncludeLeave = false + } + }; + + // await hs.GetRoom("!VJwxdebqoQlhGSEncc:codestorm.net").JoinAsync(); + + // foreach (var room in await hs.GetJoinedRooms()) { + // if(room.RoomId is "!OGEhHVWSdvArJzumhm:matrix.org") continue; + // foreach (var stateEvent in await room.GetStateAsync<List<StateEvent>>("")) { + // var _ = stateEvent.GetType; + // } + // _logger.LogInformation($"Got room state for {room.RoomId}!"); + // } + + // syncHelper.InviteReceivedHandlers.Add(async Task (args) => { + // var inviteEvent = + // args.Value.InviteState.Events.FirstOrDefault(x => + // x.Type == "m.room.member" && x.StateKey == hs.UserId); + // _logger.LogInformation( + // $"Got invite to {args.Key} by {inviteEvent.Sender} with reason: {(inviteEvent.TypedContent as RoomMemberEventContent).Reason}"); + // if (inviteEvent.Sender.EndsWith(":rory.gay") || inviteEvent.Sender == "@mxidupwitch:the-apothecary.club") + // try { + // var senderProfile = await hs.GetProfileAsync(inviteEvent.Sender); + // await hs.GetRoom(args.Key).JoinAsync(reason: $"I was invited by {senderProfile.DisplayName ?? inviteEvent.Sender}!"); + // } + // catch (Exception e) { + // _logger.LogError("{}", e.ToString()); + // await hs.GetRoom(args.Key).LeaveAsync("I was unable to join the room: " + e); + // } + // }); + syncHelper.TimelineEventHandlers.Add(async @event => { + _logger.LogInformation( + "Got timeline event in {}: {}", @event.RoomId, @event.ToJson(false, true)); + + var room = hs.GetRoom(@event.RoomId); + // _logger.LogInformation(eventResponse.ToJson(indent: false)); + if (@event is not { Sender: "@emma:rory.gay" }) return; + if (@event is { Type: "m.room.message", TypedContent: RoomMessageEventContent message }) + if (message is { MessageType: "m.text" } && message.Body.StartsWith(_configuration.Prefix)) { + var command = _commands.FirstOrDefault(x => x.Name == message.Body.Split(' ')[0][_configuration.Prefix.Length..]); + if (command == null) { + await room.SendMessageEventAsync( + new RoomMessageEventContent("m.text", "Command not found!")); + return; + } + + var ctx = new CommandContext { + Room = room, + MessageEvent = @event + }; + if (await command.CanInvoke(ctx)) + await command.Invoke(ctx); + else + await room.SendMessageEventAsync( + new RoomMessageEventContent("m.text", "You do not have permission to run this command!")); + } + }); + await syncHelper.RunSyncLoopAsync(cancellationToken: cancellationToken); + } + + /// <summary>Triggered when the application host is performing a graceful shutdown.</summary> + /// <param name="cancellationToken">Indicates that the shutdown process should no longer be graceful.</param> + public Task StopAsync(CancellationToken cancellationToken) { + _logger.LogInformation("Shutting down bot!"); + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/Utilities/LibMatrix.DevTestBot/LibMatrix.DevTestBot.csproj b/Utilities/LibMatrix.DevTestBot/LibMatrix.DevTestBot.csproj
index 3f4c9d8..8817e9c 100644 --- a/Utilities/LibMatrix.DevTestBot/LibMatrix.DevTestBot.csproj +++ b/Utilities/LibMatrix.DevTestBot/LibMatrix.DevTestBot.csproj
@@ -18,7 +18,7 @@ </PropertyGroup> <ItemGroup> - <PackageReference Include="ArcaneLibs.StringNormalisation" Version="1.0.0-preview.20250123-182609" Condition="'$(Configuration)' == 'Release'"/> + <PackageReference Include="ArcaneLibs.StringNormalisation" Version="1.0.0-preview.20250208-191806" Condition="'$(Configuration)' == 'Release'" /> <ProjectReference Include="..\..\ArcaneLibs\ArcaneLibs.StringNormalisation\ArcaneLibs.StringNormalisation.csproj" Condition="'$(Configuration)' == 'Debug'"/> <ProjectReference Include="..\..\LibMatrix\LibMatrix.csproj"/> </ItemGroup> diff --git a/Utilities/LibMatrix.DevTestBot/Program.cs b/Utilities/LibMatrix.DevTestBot/Program.cs
index daaa65e..8eaaea8 100644 --- a/Utilities/LibMatrix.DevTestBot/Program.cs +++ b/Utilities/LibMatrix.DevTestBot/Program.cs
@@ -24,7 +24,7 @@ var host = Host.CreateDefaultBuilder(args).ConfigureServices((_, services) => { } // services.AddHostedService<ServerRoomSizeCalulator>(); - services.AddHostedService<DevTestBot>(); + services.AddHostedService<PingTestBot>(); }).UseConsoleLifetime().Build(); await host.RunAsync(); \ No newline at end of file diff --git a/Utilities/LibMatrix.DevTestBot/appsettings.json b/Utilities/LibMatrix.DevTestBot/appsettings.json
index db64c22..0d18b81 100644 --- a/Utilities/LibMatrix.DevTestBot/appsettings.json +++ b/Utilities/LibMatrix.DevTestBot/appsettings.json
@@ -8,7 +8,7 @@ }, "Bot": { "Homeserver": "rory.gay", - "AccessToken": "syt_xxxxxxxxxxxxxxxxx", - "Prefix": "!" + "AccessToken": "syt_ZW1tYQ_ATWykhpCWzjxkgTJHnAx_2AaoI7", + "Prefix": "$" } } \ No newline at end of file diff --git a/Utilities/LibMatrix.Utilities.Bot/AppServices/AppServiceConfiguration.cs b/Utilities/LibMatrix.Utilities.Bot/AppServices/AppServiceConfiguration.cs
index 2cfcf32..6dc76f6 100644 --- a/Utilities/LibMatrix.Utilities.Bot/AppServices/AppServiceConfiguration.cs +++ b/Utilities/LibMatrix.Utilities.Bot/AppServices/AppServiceConfiguration.cs
@@ -4,28 +4,28 @@ namespace LibMatrix.Utilities.Bot.AppServices; public class AppServiceConfiguration { [JsonPropertyName("id")] - public string Id { get; set; } = null!; + public string Id { get; set; } [JsonPropertyName("url")] - public string? Url { get; set; } = null!; + public string? Url { get; set; } [JsonPropertyName("sender_localpart")] - public string SenderLocalpart { get; set; } = null!; + public string SenderLocalpart { get; set; } [JsonPropertyName("as_token")] - public string AppserviceToken { get; set; } = null!; + public string AppserviceToken { get; set; } [JsonPropertyName("hs_token")] - public string HomeserverToken { get; set; } = null!; + public string HomeserverToken { get; set; } [JsonPropertyName("protocols")] - public List<string>? Protocols { get; set; } = null!; + public List<string>? Protocols { get; set; } [JsonPropertyName("rate_limited")] - public bool? RateLimited { get; set; } = null!; + public bool? RateLimited { get; set; } [JsonPropertyName("namespaces")] - public AppserviceNamespaces Namespaces { get; set; } = null!; + public AppserviceNamespaces Namespaces { get; set; } public class AppserviceNamespaces { [JsonPropertyName("users")] @@ -42,7 +42,7 @@ public class AppServiceConfiguration { public bool Exclusive { get; set; } [JsonPropertyName("regex")] - public string Regex { get; set; } = null!; + public string Regex { get; set; } } }