package discord import ( "fmt" "git.jojodev.com/Minecraft/canopeas/database" "git.jojodev.com/Minecraft/canopeas/discord/track" "github.com/bwmarrin/discordgo" "github.com/rs/zerolog/log" "strings" ) var trackCommand = &discordgo.ApplicationCommand{ Name: "track", Description: "Track words", Options: []*discordgo.ApplicationCommandOption{ { Type: discordgo.ApplicationCommandOptionSubCommand, Name: "add", Description: "Add a tracked word", Options: []*discordgo.ApplicationCommandOption{ { Type: discordgo.ApplicationCommandOptionString, Name: "word", Description: "The word to track", Required: true, }, }, }, { Type: discordgo.ApplicationCommandOptionSubCommand, Name: "remove", Description: "Remove a tracked word", Options: []*discordgo.ApplicationCommandOption{ { Type: discordgo.ApplicationCommandOptionString, Name: "word", Description: "The tracked word to remove", Required: true, }, }, }, }, } var ( trackCommandHandler = func(t track.Tracker, d *database.Database) func(*discordgo.Session, *discordgo.InteractionCreate) { return func(s *discordgo.Session, i *discordgo.InteractionCreate) { var action string word := strings.ToLower(i.ApplicationCommandData().Options[0].Options[0].StringValue()) switch i.ApplicationCommandData().Options[0].Name { case "add": action = "added" t.Add(word, i.User.ID) case "remove": action = "removed" t.Remove(word, i.User.ID) default: log.Error().Msg("Track command did a woopsie") } if err := d.SetTrack(word, t[word]); err != nil { log.Err(err).Msg("") } if err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ Type: discordgo.InteractionResponseChannelMessageWithSource, Data: &discordgo.InteractionResponseData{ Content: fmt.Sprintf("Successfully %s tracking for %q", action, word), Flags: uint64(discordgo.MessageFlagsEphemeral), }, }); err != nil { log.Err(err).Msg("") } } } )