Add plugin support for commands

This commit is contained in:
2023-06-16 02:08:29 +00:00
parent 7b0c8351a8
commit b252d5e62e
6 changed files with 41 additions and 34 deletions

View File

@ -7,29 +7,8 @@ import (
"github.com/yeslayla/birdbot/common"
)
type CommandConfiguration struct {
Description string
EphemeralResponse bool
Options map[string]CommandOption
}
type CommandOption struct {
Description string
Type CommandOptionType
Required bool
}
type CommandOptionType uint64
const (
CommandTypeString CommandOptionType = CommandOptionType(discordgo.ApplicationCommandOptionString)
CommandTypeInt CommandOptionType = CommandOptionType(discordgo.ApplicationCommandOptionInteger)
CommandTypeBool CommandOptionType = CommandOptionType(discordgo.ApplicationCommandOptionBoolean)
CommandTypeFloat CommandOptionType = CommandOptionType(discordgo.ApplicationCommandOptionNumber)
)
// RegisterCommand creates an new command that can be used to interact with bird bot
func (discord *Discord) RegisterCommand(name string, config CommandConfiguration, handler func(common.User, map[string]any) string) {
func (discord *Discord) RegisterCommand(name string, config common.ChatCommandConfiguration, handler func(common.User, map[string]any) string) {
command := &discordgo.ApplicationCommand{
Name: name,
Description: config.Description,
@ -60,13 +39,13 @@ func (discord *Discord) RegisterCommand(name string, config CommandConfiguration
optionsMap := make(map[string]any, len(cmdOptions))
for _, opt := range cmdOptions {
switch config.Options[opt.Name].Type {
case CommandTypeString:
case common.CommandTypeString:
optionsMap[opt.Name] = opt.StringValue()
case CommandTypeInt:
case common.CommandTypeInt:
optionsMap[opt.Name] = opt.IntValue()
case CommandTypeBool:
case common.CommandTypeBool:
optionsMap[opt.Name] = opt.BoolValue()
case CommandTypeFloat:
case common.CommandTypeFloat:
optionsMap[opt.Name] = opt.FloatValue()
default:
optionsMap[opt.Name] = opt.Value