package public import ( "fmt" "velox-bot/internal/music" "github.com/bwmarrin/discordgo" ) var Volume = &discordgo.ApplicationCommand{ Name: "volume", Description: "Set playback volume (0-150)", Options: []*discordgo.ApplicationCommandOption{ { Type: discordgo.ApplicationCommandOptionInteger, Name: "value", Description: "Volume percent (0-150)", Required: true, MinValue: ptrFloat(0), MaxValue: 150, }, }, } func VolumeHandler(s *discordgo.Session, i *discordgo.InteractionCreate) { _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ Type: discordgo.InteractionResponseDeferredChannelMessageWithSource, Data: &discordgo.InteractionResponseData{ Content: "Updating volume...", Flags: discordgo.MessageFlagsEphemeral, }, }) if !memberHasDJRole(s, i.GuildID, i.Member) { _, _ = s.InteractionResponseEdit(i.Interaction, &discordgo.WebhookEdit{ Content: ptr("You need the **DJ** role to use music commands."), }) return } data := i.ApplicationCommandData() if len(data.Options) == 0 { _, _ = s.InteractionResponseEdit(i.Interaction, &discordgo.WebhookEdit{ Content: ptr("Missing volume value."), }) return } vol := int(data.Options[0].IntValue()) if err := music.SetVolume(i.GuildID, vol); err != nil { _, _ = s.InteractionResponseEdit(i.Interaction, &discordgo.WebhookEdit{ Content: ptr(fmt.Sprintf("Error: %v", err)), }) return } _, _ = s.InteractionResponseEdit(i.Interaction, &discordgo.WebhookEdit{ Content: ptr(fmt.Sprintf("Volume set to **%d%%**.", vol)), }) } func ptrFloat(v float64) *float64 { return &v }