diff options
Diffstat (limited to 'ExampleBots/PluralContactBotPoC/Bot/Commands')
-rw-r--r-- | ExampleBots/PluralContactBotPoC/Bot/Commands/CreateSystemCommand.cs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/ExampleBots/PluralContactBotPoC/Bot/Commands/CreateSystemCommand.cs b/ExampleBots/PluralContactBotPoC/Bot/Commands/CreateSystemCommand.cs new file mode 100644 index 0000000..5da4f5e --- /dev/null +++ b/ExampleBots/PluralContactBotPoC/Bot/Commands/CreateSystemCommand.cs @@ -0,0 +1,57 @@ +using LibMatrix; +using LibMatrix.Helpers; +using LibMatrix.Services; +using LibMatrix.StateEventTypes.Spec; +using MediaModeratorPoC.Bot.Interfaces; +using PluralContactBotPoC.Bot.AccountData; +using PluralContactBotPoC.Bot.StateEventTypes; + +namespace PluralContactBotPoC.Bot.Commands; + +public class CreateSystemCommand(IServiceProvider services, HomeserverProviderService hsProvider, HomeserverResolverService hsResolver) : ICommand { + public string Name { get; } = "createsystem"; + public string Description { get; } = "Create a new system"; + + public async Task<bool> CanInvoke(CommandContext ctx) { + return true; + } + + public async Task Invoke(CommandContext ctx) { + if (ctx.Args.Length != 1) { + await ctx.Reply("m.notice", MessageFormatter.FormatError("Only one argument is allowed: system name!")); + return; + } + + var sysName = ctx.Args[0]; + try { + try { + await ctx.Homeserver.GetAccountData<BotData>("gay.rory.plural_contact_bot.system_data"); + await ctx.Reply("m.notice", MessageFormatter.FormatError($"System {sysName} already exists!")); + } + catch (MatrixException e) { + if (e is { ErrorCode: "M_NOT_FOUND" }) { + var sysData = new SystemData() { + ControlRoom = ctx.Room.RoomId, + Members = new(), + }; + + var state = ctx.Room.GetMembersAsync(); + await foreach (var member in state) { + sysData.Members.Add(member.UserId); + } + + await ctx.Room.SendStateEventAsync("m.room.name", new RoomNameEventContent() { + Name = sysName + " control room" + }); + + return; + } + + throw; + } + } + catch (Exception e) { + await ctx.Reply("m.notice", MessageFormatter.FormatException("Something went wrong!", e)); + } + } +} |