From 5aff8c6f6d0f228a2bf14c24af8477c4514551cc Mon Sep 17 00:00:00 2001 From: benbierens Date: Tue, 24 Oct 2023 14:07:15 +0200 Subject: [PATCH] setting up subcommands. --- Tools/BiblioTech/BaseCommand.cs | 9 +++++ Tools/BiblioTech/CommandHandler.cs | 2 +- Tools/BiblioTech/Commands/AdminCommand.cs | 46 +++++++++++++++++++++++ Tools/BiblioTech/Program.cs | 7 ++-- 4 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 Tools/BiblioTech/Commands/AdminCommand.cs diff --git a/Tools/BiblioTech/BaseCommand.cs b/Tools/BiblioTech/BaseCommand.cs index 066ade4..b65c416 100644 --- a/Tools/BiblioTech/BaseCommand.cs +++ b/Tools/BiblioTech/BaseCommand.cs @@ -62,5 +62,14 @@ namespace BiblioTech public string Description { get; } public ApplicationCommandOptionType Type { get; } public bool IsRequired { get; } + + public virtual SlashCommandOptionBuilder Build() + { + return new SlashCommandOptionBuilder() + .WithName(Name) + .WithDescription(Description) + .WithType(Type) + .WithRequired(IsRequired); + } } } diff --git a/Tools/BiblioTech/CommandHandler.cs b/Tools/BiblioTech/CommandHandler.cs index 5726ee6..88b45aa 100644 --- a/Tools/BiblioTech/CommandHandler.cs +++ b/Tools/BiblioTech/CommandHandler.cs @@ -32,7 +32,7 @@ namespace BiblioTech foreach (var option in c.Options) { - builder.AddOption(option.Name, option.Type, option.Description, isRequired: option.IsRequired); + builder.AddOption(option.Build()); } return builder; diff --git a/Tools/BiblioTech/Commands/AdminCommand.cs b/Tools/BiblioTech/Commands/AdminCommand.cs new file mode 100644 index 0000000..fc1dc2e --- /dev/null +++ b/Tools/BiblioTech/Commands/AdminCommand.cs @@ -0,0 +1,46 @@ +using Discord; +using Discord.WebSocket; + +namespace BiblioTech.Commands +{ + public class SubCommandOption : CommandOption + { + private readonly CommandOption[] options; + + public SubCommandOption(string name, string description, params CommandOption[] options) + : base(name, description, type: ApplicationCommandOptionType.SubCommand, isRequired: false) + { + this.options = options; + } + + public override SlashCommandOptionBuilder Build() + { + var builder = base.Build(); + foreach (var option in options) + { + builder.AddOption(option.Build()); + } + return builder; + } + } + + public class AdminCommand : BaseCommand + { + public override string Name => "admin"; + public override string StartingMessage => "..."; + public override string Description => "Admins only."; + + private readonly SubCommandOption aaa = new SubCommandOption("aaa", "does AAA", new EthAddressOption()); + private readonly SubCommandOption bbb = new SubCommandOption("bbb", "does BBB", new UserOption("a user", true)); + + public override CommandOption[] Options => new CommandOption[] + { + aaa, bbb + }; + + protected override Task Invoke(SocketSlashCommand command) + { + return Task.CompletedTask; + } + } +} diff --git a/Tools/BiblioTech/Program.cs b/Tools/BiblioTech/Program.cs index 3a8d997..faccb3d 100644 --- a/Tools/BiblioTech/Program.cs +++ b/Tools/BiblioTech/Program.cs @@ -51,12 +51,13 @@ namespace BiblioTech var associateCommand = new UserAssociateCommand(); var handler = new CommandHandler(client, - new ClearUserAssociationCommand(), + //new ClearUserAssociationCommand(), new GetBalanceCommand(monitor, ci, associateCommand), new MintCommand(monitor, ci, associateCommand), - new ReportHistoryCommand(), + //new ReportHistoryCommand(), associateCommand, - new DeploymentsCommand(monitor) + //new DeploymentsCommand(monitor), + new AdminCommand() ); await client.LoginAsync(TokenType.Bot, Config.ApplicationToken);