first commit
This commit is contained in:
112
commands/setup.go
Normal file
112
commands/setup.go
Normal file
@@ -0,0 +1,112 @@
|
||||
package commands
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/bwmarrin/discordgo"
|
||||
)
|
||||
|
||||
func newSetupCommand() *Cmd {
|
||||
return &Cmd{
|
||||
Command: &discordgo.ApplicationCommand{
|
||||
Name: "setup",
|
||||
Description: "Configure your Thoughtful instance",
|
||||
},
|
||||
Handler: handleSetup,
|
||||
}
|
||||
}
|
||||
|
||||
func handleSetup(s *discordgo.Session, ic *discordgo.InteractionCreate) {
|
||||
err := s.InteractionRespond(ic.Interaction, &discordgo.InteractionResponse{
|
||||
Type: discordgo.InteractionResponseModal,
|
||||
Data: &discordgo.InteractionResponseData{
|
||||
CustomID: "setup_modal",
|
||||
Title: "Thoughtful Setup",
|
||||
Components: []discordgo.MessageComponent{
|
||||
discordgo.ActionsRow{
|
||||
Components: []discordgo.MessageComponent{
|
||||
discordgo.TextInput{
|
||||
CustomID: "instance_url",
|
||||
Label: "Instance URL",
|
||||
Style: discordgo.TextInputShort,
|
||||
Placeholder: "https://your-thoughtful-instance.com",
|
||||
Required: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
discordgo.ActionsRow{
|
||||
Components: []discordgo.MessageComponent{
|
||||
discordgo.TextInput{
|
||||
CustomID: "api_key",
|
||||
Label: "API Key",
|
||||
Style: discordgo.TextInputShort,
|
||||
Placeholder: "Your API Key",
|
||||
Required: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
// fallback if modal fails (rare)
|
||||
}
|
||||
}
|
||||
|
||||
func handleSetupSubmit(s *discordgo.Session, ic *discordgo.InteractionCreate) {
|
||||
data := ic.ModalSubmitData()
|
||||
url := ""
|
||||
key := ""
|
||||
|
||||
for _, comp := range data.Components {
|
||||
// ActionsRow -> TextInput
|
||||
if row, ok := comp.(*discordgo.ActionsRow); ok {
|
||||
for _, c := range row.Components {
|
||||
if input, ok := c.(*discordgo.TextInput); ok {
|
||||
if input.CustomID == "instance_url" {
|
||||
url = strings.TrimSpace(input.Value)
|
||||
} else if input.CustomID == "api_key" {
|
||||
key = strings.TrimSpace(input.Value)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Normalize URL
|
||||
url = strings.TrimSuffix(url, "/")
|
||||
|
||||
if url == "" || key == "" {
|
||||
s.InteractionRespond(ic.Interaction, &discordgo.InteractionResponse{
|
||||
Type: discordgo.InteractionResponseChannelMessageWithSource,
|
||||
Data: &discordgo.InteractionResponseData{
|
||||
Content: "Both URL and API Key are required.",
|
||||
Flags: discordgo.MessageFlagsEphemeral,
|
||||
},
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
user := ic.User
|
||||
if user == nil {
|
||||
user = ic.Member.User
|
||||
}
|
||||
|
||||
err := SaveUserConfig(user.ID, UserConfig{
|
||||
InstanceURL: url,
|
||||
APIKey: key,
|
||||
})
|
||||
|
||||
content := "Configuration saved successfully!"
|
||||
if err != nil {
|
||||
content = "Error saving configuration: " + err.Error()
|
||||
}
|
||||
|
||||
s.InteractionRespond(ic.Interaction, &discordgo.InteractionResponse{
|
||||
Type: discordgo.InteractionResponseChannelMessageWithSource,
|
||||
Data: &discordgo.InteractionResponseData{
|
||||
Content: content,
|
||||
Flags: discordgo.MessageFlagsEphemeral,
|
||||
},
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user