diff --git a/Tools/BiblioTech/BaseCommand.cs b/Tools/BiblioTech/BaseCommand.cs index 93ca84b9..d62ba448 100644 --- a/Tools/BiblioTech/BaseCommand.cs +++ b/Tools/BiblioTech/BaseCommand.cs @@ -6,6 +6,7 @@ namespace BiblioTech public abstract class BaseCommand { public abstract string Name { get; } + public abstract string StartingMessage { get; } public abstract string Description { get; } public virtual CommandOption[] Options { @@ -18,7 +19,17 @@ namespace BiblioTech public async Task SlashCommandHandler(SocketSlashCommand command) { if (command.CommandName != Name) return; - await Invoke(command); + + try + { + await command.RespondAsync(StartingMessage); + await Invoke(command); + } + catch (Exception ex) + { + await command.FollowupAsync("Something failed while trying to do that..."); + Console.WriteLine(ex); + } } protected abstract Task Invoke(SocketSlashCommand command); diff --git a/Tools/BiblioTech/BaseNetCommand.cs b/Tools/BiblioTech/BaseNetCommand.cs index 3036d5ba..83976a77 100644 --- a/Tools/BiblioTech/BaseNetCommand.cs +++ b/Tools/BiblioTech/BaseNetCommand.cs @@ -21,12 +21,12 @@ namespace BiblioTech var deployments = monitor.GetDeployments(); if (deployments.Length == 0) { - await command.RespondAsync("No deployments are currently available."); + await command.FollowupAsync("No deployments are currently available."); return; } if (deployments.Length > 1) { - await command.RespondAsync("Multiple deployments are online. I don't know which one to pick!"); + await command.FollowupAsync("Multiple deployments are online. I don't know which one to pick!"); return; } diff --git a/Tools/BiblioTech/DeploymentsCommand.cs b/Tools/BiblioTech/DeploymentsCommand.cs new file mode 100644 index 00000000..414b0c41 --- /dev/null +++ b/Tools/BiblioTech/DeploymentsCommand.cs @@ -0,0 +1,31 @@ +using Discord.WebSocket; + +namespace BiblioTech +{ + public class DeploymentsCommand : BaseCommand + { + private readonly DeploymentsFilesMonitor monitor; + + public DeploymentsCommand(DeploymentsFilesMonitor monitor) + { + this.monitor = monitor; + } + + public override string Name => "deployments"; + public override string StartingMessage => "Fetching deployments information..."; + public override string Description => "Lists known deployments"; + + protected override async Task Invoke(SocketSlashCommand command) + { + var deployments = monitor.GetDeployments(); + + if (!deployments.Any()) + { + await command.FollowupAsync("No deployments available."); + return; + } + + await command.FollowupAsync($"Deployments: {string.Join(", ", deployments.Select(d => d.Metadata.StartUtc.ToString("o")))}"); + } + } +} diff --git a/Tools/BiblioTech/Program.cs b/Tools/BiblioTech/Program.cs index cb8de546..fbf7880a 100644 --- a/Tools/BiblioTech/Program.cs +++ b/Tools/BiblioTech/Program.cs @@ -44,7 +44,9 @@ namespace BiblioTech var handler = new CommandHandler(client, new GetBalanceCommand(monitor, ci), - new MintCommand(monitor, ci)); + new MintCommand(monitor, ci), + new DeploymentsCommand(monitor) + ); await client.LoginAsync(TokenType.Bot, Config.ApplicationToken); await client.StartAsync(); diff --git a/Tools/BiblioTech/TokenCommands/EthAddressOption.cs b/Tools/BiblioTech/TokenCommands/EthAddressOption.cs index 5df010ba..6c351bad 100644 --- a/Tools/BiblioTech/TokenCommands/EthAddressOption.cs +++ b/Tools/BiblioTech/TokenCommands/EthAddressOption.cs @@ -6,7 +6,7 @@ namespace BiblioTech.TokenCommands public class EthAddressOption : CommandOption { public EthAddressOption() - : base(name: "EthAddress", + : base(name: "ethaddress", description: "Ethereum address starting with '0x'.", type: Discord.ApplicationCommandOptionType.String) { diff --git a/Tools/BiblioTech/TokenCommands/GetBalanceCommand.cs b/Tools/BiblioTech/TokenCommands/GetBalanceCommand.cs index 59bf4bee..cec306f9 100644 --- a/Tools/BiblioTech/TokenCommands/GetBalanceCommand.cs +++ b/Tools/BiblioTech/TokenCommands/GetBalanceCommand.cs @@ -16,6 +16,7 @@ namespace BiblioTech.TokenCommands } public override string Name => "balance"; + public override string StartingMessage => "Fetching balance..."; public override string Description => "Shows Eth and TestToken balance of an eth address."; public override CommandOption[] Options => new[] { ethOption }; diff --git a/Tools/BiblioTech/TokenCommands/MintCommand.cs b/Tools/BiblioTech/TokenCommands/MintCommand.cs index 9d2bf957..c22c91a7 100644 --- a/Tools/BiblioTech/TokenCommands/MintCommand.cs +++ b/Tools/BiblioTech/TokenCommands/MintCommand.cs @@ -18,6 +18,7 @@ namespace BiblioTech.TokenCommands } public override string Name => "mint"; + public override string StartingMessage => "Minting some tokens..."; public override string Description => "Mint some TestTokens and send some Eth to the address if its balance is low."; public override CommandOption[] Options => new[] { ethOption }; @@ -26,11 +27,11 @@ namespace BiblioTech.TokenCommands var addr = await ethOption.Parse(command); if (addr == null) return; - var report = + var report = ProcessEth(gethNode, addr) + ProcessTestTokens(gethNode, contracts, addr); - await command.RespondAsync(report); + await command.FollowupAsync(report); } private string ProcessTestTokens(IGethNode gethNode, ICodexContracts contracts, EthAddress addr)