Documentation ¶
Index ¶
- Constants
- Variables
- func SetLoggerConfig(conf Configuration)
- func SingleButtonFollowUpResponse(content string, buttonLabel string, url string, emojiName string) *discordgo.WebhookParams
- func SingleButtonInteractionResponse(content string, buttonLabel string, url string, emojiName string, ...) *discordgo.InteractionResponse
- func SingleEmbedFollowUpResponse(content string, title string, messageEmbedField []*discordgo.MessageEmbedField) *discordgo.WebhookParams
- func SingleFollowUpResponse(content string) *discordgo.WebhookParams
- func SingleInteractionResponse(content string, interactionResponseType discordgo.InteractionResponseType) *discordgo.InteractionResponse
- func SingleSelectMenuFollowUpResponse(content string, customID string, placeHolder string, ...) *discordgo.WebhookParams
- func StartBot(conf Configuration)
- type Bot
- type Configuration
- type PlayerManager
- func (m *PlayerManager) AddQueue(tracks ...lavalink.AudioTrack)
- func (m *PlayerManager) DeleteQueue()
- func (m *PlayerManager) OnTrackEnd(player lavalink.Player, track lavalink.AudioTrack, ...)
- func (m *PlayerManager) OnTrackException(player lavalink.Player, track lavalink.AudioTrack, ...)
- func (m *PlayerManager) OnTrackStart(player lavalink.Player, track lavalink.AudioTrack)
- func (m *PlayerManager) OnTrackStuck(player lavalink.Player, track lavalink.AudioTrack, ...)
- func (m *PlayerManager) OnWebSocketClosed(player lavalink.Player, code int, reason string, byRemote bool)
- func (m *PlayerManager) PeekQueue() lavalink.AudioTrack
- func (m *PlayerManager) PopQueue() lavalink.AudioTrack
- type RepeatingMode
Constants ¶
View Source
const ( RepeatingModeOff = iota RepeatingModeSong RepeatingModeQueue )
Variables ¶
View Source
var CommandsHandlers = map[string]func(s *discordgo.Session, i *discordgo.InteractionCreate, b *Bot){
"play": playCommand,
"leave": leaveCommand,
"skip": skipCommand,
"show": showCommand,
"set": setCommand,
"seek": seekCommand,
"exit": exitCommand,
}
View Source
var ComponentsHandlers = map[string]func(s *discordgo.Session, i *discordgo.InteractionCreate, b *Bot){ "selectTrack": func(s *discordgo.Session, i *discordgo.InteractionCreate, b *Bot) { // Get user and track IDs var response *discordgo.InteractionResponse data := i.MessageComponentData().Values if data == nil { Logger.Warn("Expected user response but values are empty. Make sure the commands are set up properly.") response := SingleInteractionResponse("An error occurred. The bot interaction appears to be set up incorrectly. Please try again later.", discordgo.InteractionResponseChannelMessageWithSource) if err := s.InteractionRespond(i.Interaction, response); err != nil { Logger.Warn("Failed to create interaction response: ", err) } return } var trackID = data[0] var userID = i.Member.User.ID selectLogger := Logger.WithFields(logrus.Fields{ "cmp": "select", "userID": userID, "guildID": i.GuildID, "trackID": trackID, }) selectLogger.Info("Select component interaction triggered.") query := b.TrackMap[userID] if query == nil { selectLogger.Warn("User is not registered in the track map.") response = SingleInteractionResponse("Could not find queries for the user. Please try a different query.", discordgo.InteractionResponseChannelMessageWithSource) } else { track := query[trackID] if track == nil { selectLogger.Warn("Track not found.") response = SingleInteractionResponse("Could not find tracks for the user. Please try a different query", discordgo.InteractionResponseChannelMessageWithSource) } else { selectLogger.Debug("Track ID found. Chosen title: ", track.Info().Title) if err := b.Play(s, i, track); err != nil { selectLogger.Warn("Something went wrong when trying to play chosen single-track: ", err) response = SingleInteractionResponse("Could not query track. Please try a different query and make sure you are connected to a voice channel.", discordgo.InteractionResponseChannelMessageWithSource) } else { response = SingleButtonInteractionResponse(fmt.Sprintf("Querying the track: %v", track.Info().Title), "Click here for the link", *track.Info().URI, "🙈", discordgo.InteractionResponseUpdateMessage) } } } if err := s.InteractionRespond(i.Interaction, response); err != nil { selectLogger.Warn("Failed to create interaction response: ", err) } }, }
View Source
var (
Logger = logrus.New()
)
View Source
var (
NumberEmojiMap = map[int]string{
1: "1️⃣",
2: "2️⃣",
3: "3️⃣",
4: "4️⃣",
5: "5️⃣",
6: "6️⃣",
7: "7️⃣",
8: "8️⃣",
9: "9️⃣",
10: "🔟",
}
)
Functions ¶
func SetLoggerConfig ¶
func SetLoggerConfig(conf Configuration)
func SingleButtonInteractionResponse ¶
func SingleButtonInteractionResponse(content string, buttonLabel string, url string, emojiName string, interactionResponseType discordgo.InteractionResponseType) *discordgo.InteractionResponse
func SingleEmbedFollowUpResponse ¶
func SingleEmbedFollowUpResponse(content string, title string, messageEmbedField []*discordgo.MessageEmbedField) *discordgo.WebhookParams
func SingleFollowUpResponse ¶
func SingleFollowUpResponse(content string) *discordgo.WebhookParams
func SingleInteractionResponse ¶
func SingleInteractionResponse(content string, interactionResponseType discordgo.InteractionResponseType) *discordgo.InteractionResponse
func SingleSelectMenuFollowUpResponse ¶
func SingleSelectMenuFollowUpResponse(content string, customID string, placeHolder string, options []discordgo.SelectMenuOption) *discordgo.WebhookParams
func StartBot ¶
func StartBot(conf Configuration)
Types ¶
type Bot ¶
type Bot struct { Link *dgolink.Link // Corresponding Link PlayerManagers map[string]*PlayerManager // available playermanager, maps guildid to manager TrackMap map[string]map[string]lavalink.AudioTrack // maps query author and selected track id to track object }
func (*Bot) Play ¶
func (b *Bot) Play(s *discordgo.Session, i *discordgo.InteractionCreate, tracks ...lavalink.AudioTrack) error
type Configuration ¶
type Configuration struct { LogFile string LogLevel string LogFormat string LogTimeStamp string DiscordToken string LavalinkPW string LavalinkHost string LavalinkPort string LavalinkNode string ResumeKey string ResumeTimeOut int Secure bool }
func ReadConfig ¶
func ReadConfig(configFile string) Configuration
type PlayerManager ¶
type PlayerManager struct { lavalink.PlayerEventAdapter Player lavalink.Player Queue []lavalink.AudioTrack QueueMu sync.Mutex RepeatingMode RepeatingMode PlayerSession *discordgo.Session }
func (*PlayerManager) AddQueue ¶
func (m *PlayerManager) AddQueue(tracks ...lavalink.AudioTrack)
func (*PlayerManager) DeleteQueue ¶
func (m *PlayerManager) DeleteQueue()
func (*PlayerManager) OnTrackEnd ¶
func (m *PlayerManager) OnTrackEnd(player lavalink.Player, track lavalink.AudioTrack, endReason lavalink.AudioTrackEndReason)
func (*PlayerManager) OnTrackException ¶
func (m *PlayerManager) OnTrackException(player lavalink.Player, track lavalink.AudioTrack, exception lavalink.FriendlyException)
func (*PlayerManager) OnTrackStart ¶
func (m *PlayerManager) OnTrackStart(player lavalink.Player, track lavalink.AudioTrack)
func (*PlayerManager) OnTrackStuck ¶
func (m *PlayerManager) OnTrackStuck(player lavalink.Player, track lavalink.AudioTrack, thresholdMs lavalink.Duration)
func (*PlayerManager) OnWebSocketClosed ¶
func (*PlayerManager) PeekQueue ¶
func (m *PlayerManager) PeekQueue() lavalink.AudioTrack
func (*PlayerManager) PopQueue ¶
func (m *PlayerManager) PopQueue() lavalink.AudioTrack
type RepeatingMode ¶
type RepeatingMode int
Click to show internal directories.
Click to hide internal directories.