Deals with timeout for operations that may take a while.
This commit is contained in:
parent
8910c7ff27
commit
869aeb9253
@ -6,6 +6,7 @@ namespace BiblioTech
|
|||||||
public abstract class BaseCommand
|
public abstract class BaseCommand
|
||||||
{
|
{
|
||||||
public abstract string Name { get; }
|
public abstract string Name { get; }
|
||||||
|
public abstract string StartingMessage { get; }
|
||||||
public abstract string Description { get; }
|
public abstract string Description { get; }
|
||||||
public virtual CommandOption[] Options
|
public virtual CommandOption[] Options
|
||||||
{
|
{
|
||||||
@ -18,7 +19,17 @@ namespace BiblioTech
|
|||||||
public async Task SlashCommandHandler(SocketSlashCommand command)
|
public async Task SlashCommandHandler(SocketSlashCommand command)
|
||||||
{
|
{
|
||||||
if (command.CommandName != Name) return;
|
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);
|
protected abstract Task Invoke(SocketSlashCommand command);
|
||||||
|
@ -21,12 +21,12 @@ namespace BiblioTech
|
|||||||
var deployments = monitor.GetDeployments();
|
var deployments = monitor.GetDeployments();
|
||||||
if (deployments.Length == 0)
|
if (deployments.Length == 0)
|
||||||
{
|
{
|
||||||
await command.RespondAsync("No deployments are currently available.");
|
await command.FollowupAsync("No deployments are currently available.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (deployments.Length > 1)
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
31
Tools/BiblioTech/DeploymentsCommand.cs
Normal file
31
Tools/BiblioTech/DeploymentsCommand.cs
Normal file
@ -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")))}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -44,7 +44,9 @@ namespace BiblioTech
|
|||||||
|
|
||||||
var handler = new CommandHandler(client,
|
var handler = new CommandHandler(client,
|
||||||
new GetBalanceCommand(monitor, ci),
|
new GetBalanceCommand(monitor, ci),
|
||||||
new MintCommand(monitor, ci));
|
new MintCommand(monitor, ci),
|
||||||
|
new DeploymentsCommand(monitor)
|
||||||
|
);
|
||||||
|
|
||||||
await client.LoginAsync(TokenType.Bot, Config.ApplicationToken);
|
await client.LoginAsync(TokenType.Bot, Config.ApplicationToken);
|
||||||
await client.StartAsync();
|
await client.StartAsync();
|
||||||
|
@ -6,7 +6,7 @@ namespace BiblioTech.TokenCommands
|
|||||||
public class EthAddressOption : CommandOption
|
public class EthAddressOption : CommandOption
|
||||||
{
|
{
|
||||||
public EthAddressOption()
|
public EthAddressOption()
|
||||||
: base(name: "EthAddress",
|
: base(name: "ethaddress",
|
||||||
description: "Ethereum address starting with '0x'.",
|
description: "Ethereum address starting with '0x'.",
|
||||||
type: Discord.ApplicationCommandOptionType.String)
|
type: Discord.ApplicationCommandOptionType.String)
|
||||||
{
|
{
|
||||||
|
@ -16,6 +16,7 @@ namespace BiblioTech.TokenCommands
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override string Name => "balance";
|
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 string Description => "Shows Eth and TestToken balance of an eth address.";
|
||||||
public override CommandOption[] Options => new[] { ethOption };
|
public override CommandOption[] Options => new[] { ethOption };
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ namespace BiblioTech.TokenCommands
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override string Name => "mint";
|
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 string Description => "Mint some TestTokens and send some Eth to the address if its balance is low.";
|
||||||
public override CommandOption[] Options => new[] { ethOption };
|
public override CommandOption[] Options => new[] { ethOption };
|
||||||
|
|
||||||
@ -26,11 +27,11 @@ namespace BiblioTech.TokenCommands
|
|||||||
var addr = await ethOption.Parse(command);
|
var addr = await ethOption.Parse(command);
|
||||||
if (addr == null) return;
|
if (addr == null) return;
|
||||||
|
|
||||||
var report =
|
var report =
|
||||||
ProcessEth(gethNode, addr) +
|
ProcessEth(gethNode, addr) +
|
||||||
ProcessTestTokens(gethNode, contracts, addr);
|
ProcessTestTokens(gethNode, contracts, addr);
|
||||||
|
|
||||||
await command.RespondAsync(report);
|
await command.FollowupAsync(report);
|
||||||
}
|
}
|
||||||
|
|
||||||
private string ProcessTestTokens(IGethNode gethNode, ICodexContracts contracts, EthAddress addr)
|
private string ProcessTestTokens(IGethNode gethNode, ICodexContracts contracts, EthAddress addr)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user