gobot

package
v0.0.0-...-ce4f8b1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 30, 2022 License: GPL-3.0 Imports: 15 Imported by: 0

Documentation

Index

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 SingleButtonFollowUpResponse

func SingleButtonFollowUpResponse(content string, buttonLabel string, url string, emojiName string) *discordgo.WebhookParams

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) IsPlaying

func (b *Bot) IsPlaying(guildID string) (bool, error)

func (*Bot) IsQueueEmpty

func (b *Bot) IsQueueEmpty(guildID string) (bool, error)

func (*Bot) Play

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 (m *PlayerManager) OnWebSocketClosed(player lavalink.Player, code int, reason string, byRemote bool)

func (*PlayerManager) PeekQueue

func (m *PlayerManager) PeekQueue() lavalink.AudioTrack

func (*PlayerManager) PopQueue

func (m *PlayerManager) PopQueue() lavalink.AudioTrack

type RepeatingMode

type RepeatingMode int

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL