Add more bot stuff
2 files changed, 21 insertions, 9 deletions
diff --git a/Utilities/LibMatrix.Utilities.Bot/BotCommandInstaller.cs b/Utilities/LibMatrix.Utilities.Bot/BotCommandInstaller.cs
index 8501d41..0d755a1 100644
--- a/Utilities/LibMatrix.Utilities.Bot/BotCommandInstaller.cs
+++ b/Utilities/LibMatrix.Utilities.Bot/BotCommandInstaller.cs
@@ -21,20 +21,20 @@ public class BotInstaller(IServiceCollection services) {
services.AddSingleton<AuthenticatedHomeserverGeneric>(x => {
var config = x.GetService<LibMatrixBotConfiguration>() ?? throw new Exception("No configuration found!");
var hsProvider = x.GetService<HomeserverProviderService>() ?? throw new Exception("No homeserver provider found!");
-
+
if (x.GetService<AppServiceConfiguration>() is AppServiceConfiguration appsvcConfig)
config.AccessToken = appsvcConfig.AppserviceToken;
else if (Environment.GetEnvironmentVariable("LIBMATRIX_ACCESS_TOKEN_PATH") is string path)
config.AccessTokenPath = path;
-
- if(string.IsNullOrWhiteSpace(config.AccessToken) && string.IsNullOrWhiteSpace(config.AccessTokenPath))
+
+ if (string.IsNullOrWhiteSpace(config.AccessToken) && string.IsNullOrWhiteSpace(config.AccessTokenPath))
throw new Exception("Unable to add bot service without an access token or access token path!");
-
- if(!string.IsNullOrWhiteSpace(config.AccessTokenPath)) {
+
+ if (!string.IsNullOrWhiteSpace(config.AccessTokenPath)) {
var token = File.ReadAllText(config.AccessTokenPath);
config.AccessToken = token;
}
-
+
var hs = hsProvider.GetAuthenticatedWithToken(config.Homeserver, config.AccessToken).Result;
return hs;
@@ -57,9 +57,10 @@ public class BotInstaller(IServiceCollection services) {
return this;
}
+
public BotInstaller AddCommands(IEnumerable<Type> commandClasses) {
foreach (var commandClass in commandClasses) {
- if(!commandClass.IsAssignableTo(typeof(ICommand)))
+ if (!commandClass.IsAssignableTo(typeof(ICommand)))
throw new Exception($"Type {commandClass.Name} is not assignable to ICommand!");
Console.WriteLine($"Adding command {commandClass.Name}");
services.AddScoped(typeof(ICommand), commandClass);
@@ -67,13 +68,20 @@ public class BotInstaller(IServiceCollection services) {
return this;
}
-
+
public BotInstaller WithInviteHandler(Func<InviteHandlerHostedService.InviteEventArgs, Task> inviteHandler) {
services.AddSingleton(inviteHandler);
services.AddHostedService<InviteHandlerHostedService>();
return this;
}
-
+
+ public BotInstaller WithInviteHandler<T>() where T : class, InviteHandlerHostedService.IInviteHandler {
+ services.AddSingleton<T>();
+ services.AddSingleton<Func<InviteHandlerHostedService.InviteEventArgs, Task>>(sp => sp.GetRequiredService<T>().HandleInviteAsync);
+ services.AddHostedService<InviteHandlerHostedService>();
+ return this;
+ }
+
public BotInstaller WithCommandResultHandler(Func<CommandResult, Task> commandResultHandler) {
services.AddSingleton(commandResultHandler);
return this;
diff --git a/Utilities/LibMatrix.Utilities.Bot/Services/InviteListenerHostedService.cs b/Utilities/LibMatrix.Utilities.Bot/Services/InviteListenerHostedService.cs
index 88a6a03..cac9ca4 100644
--- a/Utilities/LibMatrix.Utilities.Bot/Services/InviteListenerHostedService.cs
+++ b/Utilities/LibMatrix.Utilities.Bot/Services/InviteListenerHostedService.cs
@@ -77,4 +77,8 @@ public class InviteHandlerHostedService : IHostedService {
public StateEventResponse MemberEvent { get; set; }
public AuthenticatedHomeserverGeneric Homeserver { get; set; }
}
+
+ public interface IInviteHandler {
+ public Task HandleInviteAsync(InviteEventArgs args);
+ }
}
\ No newline at end of file
|