From d39147f21545355fe9248db725173afc9dbac70d Mon Sep 17 00:00:00 2001 From: "Gustavo L de Mello (Guz)" Date: Thu, 21 Nov 2024 21:33:18 -0300 Subject: [PATCH] feat(lib,commands,options): integer option for chat commands --- lib/command_chat.go | 48 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/lib/command_chat.go b/lib/command_chat.go index ff81dd6..c62a386 100644 --- a/lib/command_chat.go +++ b/lib/command_chat.go @@ -127,6 +127,54 @@ func (o *ChatCommandStringOption) Validate() (bool, error) { return validateOption(o) } +type ChatCommandIntegerOption struct { + Name string + NameLocalizations map[discordgo.Locale]string + Description string + DescriptionLocalizations map[discordgo.Locale]string + Required bool + Autocomplete bool + Choices []*ChatCommandIntegerOptionChoice + MinValue int + MaxValue int +} + +type ChatCommandIntegerOptionChoice struct { + Name string + NameLocalizations map[discordgo.Locale]string + Value int +} + +func (o *ChatCommandIntegerOption) ApplicationCommandOption() *discordgo.ApplicationCommandOption { + choices := make([]*discordgo.ApplicationCommandOptionChoice, len(o.Choices)) + for i, v := range o.Choices { + choices[i] = &discordgo.ApplicationCommandOptionChoice{ + Name: v.Name, + NameLocalizations: v.NameLocalizations, + Value: any(v.Value), + } + } + + minValue := float64(o.MinValue) + + return &discordgo.ApplicationCommandOption{ + Type: discordgo.ApplicationCommandOptionInteger, + Name: o.Name, + NameLocalizations: o.NameLocalizations, + Description: o.Description, + DescriptionLocalizations: o.DescriptionLocalizations, + Required: o.Required, + Autocomplete: o.Autocomplete, + MinValue: &minValue, + MaxValue: float64(o.MaxValue), + Choices: choices, + } +} + +func (o *ChatCommandIntegerOption) Validate() (bool, error) { + return validateOption(o) +} + func validateOption(opt interface { ApplicationCommandOption() *discordgo.ApplicationCommandOption },