remove command
This commit is contained in:
parent
a0461a446e
commit
29672ece68
|
@ -9,6 +9,7 @@ namespace BiblioTech.Commands
|
||||||
private readonly ReportCommand reportCommand;
|
private readonly ReportCommand reportCommand;
|
||||||
private readonly DeployListCommand deployListCommand;
|
private readonly DeployListCommand deployListCommand;
|
||||||
private readonly DeployUploadCommand deployUploadCommand;
|
private readonly DeployUploadCommand deployUploadCommand;
|
||||||
|
private readonly DeployRemoveCommand deployRemoveCommand;
|
||||||
|
|
||||||
public override string Name => "admin";
|
public override string Name => "admin";
|
||||||
public override string StartingMessage => "...";
|
public override string StartingMessage => "...";
|
||||||
|
@ -20,6 +21,7 @@ namespace BiblioTech.Commands
|
||||||
reportCommand = new ReportCommand();
|
reportCommand = new ReportCommand();
|
||||||
deployListCommand = new DeployListCommand(monitor);
|
deployListCommand = new DeployListCommand(monitor);
|
||||||
deployUploadCommand = new DeployUploadCommand(monitor);
|
deployUploadCommand = new DeployUploadCommand(monitor);
|
||||||
|
deployRemoveCommand = new DeployRemoveCommand(monitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override CommandOption[] Options => new CommandOption[]
|
public override CommandOption[] Options => new CommandOption[]
|
||||||
|
@ -28,6 +30,7 @@ namespace BiblioTech.Commands
|
||||||
reportCommand,
|
reportCommand,
|
||||||
deployListCommand,
|
deployListCommand,
|
||||||
deployUploadCommand,
|
deployUploadCommand,
|
||||||
|
deployRemoveCommand
|
||||||
};
|
};
|
||||||
|
|
||||||
protected override async Task Invoke(CommandContext context)
|
protected override async Task Invoke(CommandContext context)
|
||||||
|
@ -42,6 +45,7 @@ namespace BiblioTech.Commands
|
||||||
await reportCommand.CommandHandler(context);
|
await reportCommand.CommandHandler(context);
|
||||||
await deployListCommand.CommandHandler(context);
|
await deployListCommand.CommandHandler(context);
|
||||||
await deployUploadCommand.CommandHandler(context);
|
await deployUploadCommand.CommandHandler(context);
|
||||||
|
await deployRemoveCommand.CommandHandler(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ClearUserAssociationCommand : SubCommandOption
|
public class ClearUserAssociationCommand : SubCommandOption
|
||||||
|
@ -122,7 +126,7 @@ namespace BiblioTech.Commands
|
||||||
private string FormatDeployment(CodexDeployment deployment)
|
private string FormatDeployment(CodexDeployment deployment)
|
||||||
{
|
{
|
||||||
var m = deployment.Metadata;
|
var m = deployment.Metadata;
|
||||||
return $"{m.Name} ({m.StartUtc.ToString("o")})";
|
return $"'{m.Name}' ({m.StartUtc.ToString("o")})";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,9 +151,48 @@ namespace BiblioTech.Commands
|
||||||
var file = await fileOption.Parse(context);
|
var file = await fileOption.Parse(context);
|
||||||
if (file == null) return;
|
if (file == null) return;
|
||||||
|
|
||||||
await context.Command.FollowupAsync("Received: " + file.Size);
|
var result = await monitor.DownloadDeployment(file);
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
await context.Command.FollowupAsync("Success!");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
await context.Command.FollowupAsync("That didn't work.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// todo pass to monitor, add to folder.
|
public class DeployRemoveCommand : SubCommandOption
|
||||||
|
{
|
||||||
|
private readonly DeploymentsFilesMonitor monitor;
|
||||||
|
private readonly StringOption stringOption = new StringOption(
|
||||||
|
name: "deployment name",
|
||||||
|
description: "Name of deployment to remove.",
|
||||||
|
isRequired: true);
|
||||||
|
|
||||||
|
public DeployRemoveCommand(DeploymentsFilesMonitor monitor)
|
||||||
|
: base("remove", "Removes a deployment file.")
|
||||||
|
{
|
||||||
|
this.monitor = monitor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override CommandOption[] Options => new[] { stringOption };
|
||||||
|
|
||||||
|
protected override async Task onSubCommand(CommandContext context)
|
||||||
|
{
|
||||||
|
var str = await stringOption.Parse(context);
|
||||||
|
if (string.IsNullOrEmpty(str)) return;
|
||||||
|
|
||||||
|
var result = monitor.DeleteDeployment(str);
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
await context.Command.FollowupAsync("Success!");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
await context.Command.FollowupAsync("That didn't work.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using CodexPlugin;
|
using CodexPlugin;
|
||||||
|
using Discord;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace BiblioTech
|
namespace BiblioTech
|
||||||
|
@ -15,6 +16,47 @@ namespace BiblioTech
|
||||||
return deployments;
|
return deployments;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<bool> DownloadDeployment(IAttachment file)
|
||||||
|
{
|
||||||
|
using var http = new HttpClient();
|
||||||
|
var response = await http.GetAsync(file.Url);
|
||||||
|
var str = await response.Content.ReadAsStringAsync();
|
||||||
|
if (string.IsNullOrEmpty(str)) return false;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var deploy = JsonConvert.DeserializeObject<CodexDeployment>(str);
|
||||||
|
if (deploy != null)
|
||||||
|
{
|
||||||
|
var targetFile = Path.Combine(Program.Config.EndpointsPath, Guid.NewGuid().ToString().ToLowerInvariant() + ".json");
|
||||||
|
File.WriteAllText(targetFile, str);
|
||||||
|
deployments = Array.Empty<CodexDeployment>();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool DeleteDeployment(string deploymentName)
|
||||||
|
{
|
||||||
|
var path = Program.Config.EndpointsPath;
|
||||||
|
if (!Directory.Exists(path)) return false;
|
||||||
|
var files = Directory.GetFiles(path);
|
||||||
|
|
||||||
|
foreach ( var file in files)
|
||||||
|
{
|
||||||
|
var deploy = ProcessFile(file);
|
||||||
|
if (deploy != null && deploy.Metadata.Name == deploymentName)
|
||||||
|
{
|
||||||
|
File.Delete(file);
|
||||||
|
deployments = Array.Empty<CodexDeployment>();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private void UpdateDeployments()
|
private void UpdateDeployments()
|
||||||
{
|
{
|
||||||
lastUpdate = DateTime.UtcNow;
|
lastUpdate = DateTime.UtcNow;
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
using Discord;
|
||||||
|
|
||||||
|
namespace BiblioTech.Options
|
||||||
|
{
|
||||||
|
public class StringOption : CommandOption
|
||||||
|
{
|
||||||
|
public StringOption(string name, string description, bool isRequired)
|
||||||
|
: base(name, description, type: ApplicationCommandOptionType.String, isRequired)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<string?> Parse(CommandContext context)
|
||||||
|
{
|
||||||
|
var strData = context.Options.SingleOrDefault(o => o.Name == Name);
|
||||||
|
if (strData == null)
|
||||||
|
{
|
||||||
|
await context.Command.FollowupAsync("String option not received.");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return strData.Value as string;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue