feat(bot): initial support for Discord application commands

This commit is contained in:
Iris System 2023-05-07 16:11:59 +12:00
parent c69ab99519
commit 86717603d3
21 changed files with 452 additions and 18 deletions

View file

@ -0,0 +1,17 @@
using ApplicationCommandType = Myriad.Types.ApplicationCommand.ApplicationCommandType;
namespace PluralKit.Bot;
public class ApplicationCommand
{
public ApplicationCommand(ApplicationCommandType type, string name, string? description = null)
{
Type = type;
Name = name;
Description = description;
}
public ApplicationCommandType Type { get; }
public string Name { get; }
public string Description { get; }
}

View file

@ -0,0 +1,10 @@
using ApplicationCommandType = Myriad.Types.ApplicationCommand.ApplicationCommandType;
namespace PluralKit.Bot;
public partial class ApplicationCommandTree
{
public static ApplicationCommand ProxiedMessageQuery = new(ApplicationCommandType.Message, "Message info");
public static ApplicationCommand ProxiedMessageDelete = new(ApplicationCommandType.Message, "Delete message");
public static ApplicationCommand ProxiedMessagePing = new(ApplicationCommandType.Message, "Ping message author");
}

View file

@ -0,0 +1,19 @@
using ApplicationCommandType = Myriad.Types.ApplicationCommand.ApplicationCommandType;
using InteractionType = Myriad.Types.Interaction.InteractionType;
namespace PluralKit.Bot;
public partial class ApplicationCommandTree
{
public Task TryHandleCommand(InteractionContext ctx)
{
if (ctx.Event.Data!.Name == ProxiedMessageQuery.Name)
return ctx.Execute<ApplicationCommandProxiedMessage>(ProxiedMessageQuery, m => m.QueryMessage(ctx));
else if (ctx.Event.Data!.Name == ProxiedMessageDelete.Name)
return ctx.Execute<ApplicationCommandProxiedMessage>(ProxiedMessageDelete, m => m.DeleteMessage(ctx));
else if (ctx.Event.Data!.Name == ProxiedMessagePing.Name)
return ctx.Execute<ApplicationCommandProxiedMessage>(ProxiedMessageDelete, m => m.PingMessageAuthor(ctx));
return null;
}
}