Skip to content

Commit

Permalink
Merge pull request #38 from DisgoOrg/track-userdata-and-smal-refactors
Browse files Browse the repository at this point in the history
* introduce track userdata
* player backup/restore for resuming
* missing rest endpoints
  • Loading branch information
topi314 authored Feb 27, 2022
2 parents 80d32f5 + 4d3545f commit ba39ac4
Show file tree
Hide file tree
Showing 36 changed files with 595 additions and 341 deletions.
2 changes: 1 addition & 1 deletion _example/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ require (

require (
github.com/DisgoOrg/log v1.1.3 // indirect
github.com/gorilla/websocket v1.4.2 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
)
6 changes: 2 additions & 4 deletions _example/go.sum
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
github.com/DisgoOrg/disgolink/lavalink v1.3.3 h1:YZgGlAm4bGKJar/Dm9rgdAprH/qMC/A+iI2eD6zbLdg=
github.com/DisgoOrg/disgolink/lavalink v1.3.3/go.mod h1:u14urQSHp9DA41yYi3RnhGLeSw2J0WeN1za2Rr4Kekg=
github.com/DisgoOrg/log v1.1.3 h1:UN0ZfmPZ7yhCCDQ7iVvIedvZ2zEexNS5Ek76GBuffOE=
github.com/DisgoOrg/log v1.1.3/go.mod h1:tSMofXaNhQNvzLRoL4tAiCG9yGY1ES5DLvduh7e9GRU=
github.com/DisgoOrg/snowflake v1.0.4 h1:hgeXSaXRDVdoNJ0rfHXyVsgxQMzctP346S5WXlBmoOU=
github.com/DisgoOrg/snowflake v1.0.4/go.mod h1:jIQVlVmElm2OGt6v52ITf/71ODaU09chUCflxt8+3yM=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
Expand Down
2 changes: 1 addition & 1 deletion dgolink/_example/example.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ func (b *Bot) messageCreateHandler(s *discordgo.Session, e *discordgo.MessageCre
b.play(s, e.GuildID, args[1], e.ChannelID, track)
},
func(playlist lavalink.AudioPlaylist) {
b.play(s, e.GuildID, args[1], e.ChannelID, playlist.Tracks...)
b.play(s, e.GuildID, args[1], e.ChannelID, playlist.Tracks()...)
},
func(tracks []lavalink.AudioTrack) {
b.play(s, e.GuildID, args[1], e.ChannelID, tracks[0])
Expand Down
4 changes: 2 additions & 2 deletions dgolink/_example/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ replace (

require (
github.com/DisgoOrg/disgolink/dgolink v0.0.0-20220112214621-4d364f10b07e
github.com/DisgoOrg/disgolink/lavalink v1.3.3
github.com/DisgoOrg/disgolink/lavalink v1.3.4
github.com/DisgoOrg/snowflake v1.0.4
github.com/bwmarrin/discordgo v0.23.3-0.20211228023845-29269347e820
)

require (
github.com/DisgoOrg/log v1.1.3 // indirect
github.com/gorilla/websocket v1.4.2 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b // indirect
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 // indirect
Expand Down
5 changes: 2 additions & 3 deletions dgolink/_example/go.sum
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
github.com/DisgoOrg/disgolink/lavalink v1.3.3 h1:YZgGlAm4bGKJar/Dm9rgdAprH/qMC/A+iI2eD6zbLdg=
github.com/DisgoOrg/disgolink/lavalink v1.3.3/go.mod h1:u14urQSHp9DA41yYi3RnhGLeSw2J0WeN1za2Rr4Kekg=
github.com/DisgoOrg/log v1.1.3 h1:UN0ZfmPZ7yhCCDQ7iVvIedvZ2zEexNS5Ek76GBuffOE=
github.com/DisgoOrg/log v1.1.3/go.mod h1:tSMofXaNhQNvzLRoL4tAiCG9yGY1ES5DLvduh7e9GRU=
github.com/DisgoOrg/snowflake v1.0.4 h1:hgeXSaXRDVdoNJ0rfHXyVsgxQMzctP346S5WXlBmoOU=
Expand All @@ -8,8 +6,9 @@ github.com/bwmarrin/discordgo v0.23.3-0.20211228023845-29269347e820 h1:MIW5DnBVJ
github.com/bwmarrin/discordgo v0.23.3-0.20211228023845-29269347e820/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
Expand Down
26 changes: 16 additions & 10 deletions dgolink/dgolink.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,14 @@ import (

func New(s *discordgo.Session, opts ...lavalink.ConfigOpt) *Link {
discordgolink := &Link{
Lavalink: lavalink.New(append([]lavalink.ConfigOpt{lavalink.WithHTTPClient(s.Client), lavalink.WithUserIDFromBotToken(s.Token)}, opts...)...),
Lavalink: lavalink.New(append([]lavalink.ConfigOpt{
lavalink.WithHTTPClient(s.Client),
lavalink.WithUserIDFromBotToken(s.Token),
}, opts...)...),
}

s.AddHandler(discordgolink.VoiceStateUpdateHandler)
s.AddHandler(discordgolink.VoiceServerUpdateHandler)
s.AddHandler(discordgolink.OnVoiceStateUpdateHandler)
s.AddHandler(discordgolink.OnVoiceServerUpdateHandler)
return discordgolink
}

Expand All @@ -22,24 +25,27 @@ type Link struct {
lavalink.Lavalink
}

func (l *Link) VoiceStateUpdateHandler(_ *discordgo.Session, voiceStateUpdate *discordgo.VoiceStateUpdate) {
var channelID *string
func (l *Link) OnVoiceStateUpdateHandler(_ *discordgo.Session, voiceStateUpdate *discordgo.VoiceStateUpdate) {
if snowflake.Snowflake(voiceStateUpdate.UserID) != l.UserID() {
return
}
var channelID *snowflake.Snowflake
if voiceStateUpdate.ChannelID != "" {
channelID = &voiceStateUpdate.ChannelID
channelID = (*snowflake.Snowflake)(&voiceStateUpdate.ChannelID)
}
l.VoiceStateUpdate(lavalink.VoiceStateUpdate{
l.OnVoiceStateUpdate(lavalink.VoiceStateUpdate{
GuildID: snowflake.Snowflake(voiceStateUpdate.GuildID),
ChannelID: (*snowflake.Snowflake)(channelID),
ChannelID: channelID,
SessionID: voiceStateUpdate.SessionID,
})
}

func (l *Link) VoiceServerUpdateHandler(_ *discordgo.Session, voiceServerUpdate *discordgo.VoiceServerUpdate) {
func (l *Link) OnVoiceServerUpdateHandler(_ *discordgo.Session, voiceServerUpdate *discordgo.VoiceServerUpdate) {
var endpoint *string
if voiceServerUpdate.Endpoint != "" {
endpoint = &voiceServerUpdate.Endpoint
}
l.VoiceServerUpdate(lavalink.VoiceServerUpdate{
l.OnVoiceServerUpdate(lavalink.VoiceServerUpdate{
GuildID: snowflake.Snowflake(voiceServerUpdate.GuildID),
Token: voiceServerUpdate.Token,
Endpoint: endpoint,
Expand Down
2 changes: 1 addition & 1 deletion dgolink/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ require (

require (
github.com/DisgoOrg/log v1.1.3 // indirect
github.com/gorilla/websocket v1.4.2 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b // indirect
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 // indirect
Expand Down
5 changes: 2 additions & 3 deletions dgolink/go.sum
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
github.com/DisgoOrg/disgolink/lavalink v1.3.4 h1:WhZlQMeHZaXIeW+t3GmijR91QZBNd3VlTo1LPNVCNJU=
github.com/DisgoOrg/disgolink/lavalink v1.3.4/go.mod h1:u14urQSHp9DA41yYi3RnhGLeSw2J0WeN1za2Rr4Kekg=
github.com/DisgoOrg/log v1.1.3 h1:UN0ZfmPZ7yhCCDQ7iVvIedvZ2zEexNS5Ek76GBuffOE=
github.com/DisgoOrg/log v1.1.3/go.mod h1:tSMofXaNhQNvzLRoL4tAiCG9yGY1ES5DLvduh7e9GRU=
github.com/DisgoOrg/snowflake v1.0.4 h1:hgeXSaXRDVdoNJ0rfHXyVsgxQMzctP346S5WXlBmoOU=
Expand All @@ -8,8 +6,9 @@ github.com/bwmarrin/discordgo v0.23.3-0.20211228023845-29269347e820 h1:MIW5DnBVJ
github.com/bwmarrin/discordgo v0.23.3-0.20211228023845-29269347e820/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
Expand Down
4 changes: 0 additions & 4 deletions disgolink/_example/commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,6 @@ var commands = []discord.ApplicationCommandCreate{
{Name: "SoundCloud", Value: "sc"},
},
},
discord.ApplicationCommandOptionBool{
Name: "skip-segments",
Description: "skip sponsorblock segments",
},
},
},
}
2 changes: 1 addition & 1 deletion disgolink/_example/example.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ func connect(event *events.ApplicationCommandInteractionEvent, voiceState *core.

func registerNodes() {
secure, _ := strconv.ParseBool(os.Getenv("lavalink_secure"))
dgolink.AddNode(context.TODO(), lavalink.NodeConfig{
_, _ = dgolink.AddNode(context.TODO(), lavalink.NodeConfig{
Name: "test",
Host: os.Getenv("lavalink_host"),
Port: os.Getenv("lavalink_port"),
Expand Down
2 changes: 1 addition & 1 deletion disgolink/_example/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ require (

require (
github.com/google/go-cmp v0.5.7 // indirect
github.com/gorilla/websocket v1.4.2 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/sasha-s/go-csync v0.0.0-20210812194225-61421b77c44b // indirect
)
5 changes: 2 additions & 3 deletions disgolink/_example/go.sum
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
github.com/DisgoOrg/disgo v0.7.2 h1:7yy/45NQ8IBFtx841Cy62RtWOPlj9LAOVHM/u8f4yko=
github.com/DisgoOrg/disgo v0.7.2/go.mod h1:BMXRXwMe2kjakJ/T+FvER6bnfPr8zwFXDLyeCNJn2Cc=
github.com/DisgoOrg/disgolink/lavalink v1.3.3 h1:YZgGlAm4bGKJar/Dm9rgdAprH/qMC/A+iI2eD6zbLdg=
github.com/DisgoOrg/disgolink/lavalink v1.3.3/go.mod h1:u14urQSHp9DA41yYi3RnhGLeSw2J0WeN1za2Rr4Kekg=
github.com/DisgoOrg/log v1.1.3 h1:UN0ZfmPZ7yhCCDQ7iVvIedvZ2zEexNS5Ek76GBuffOE=
github.com/DisgoOrg/log v1.1.3/go.mod h1:tSMofXaNhQNvzLRoL4tAiCG9yGY1ES5DLvduh7e9GRU=
github.com/DisgoOrg/snowflake v1.0.4 h1:hgeXSaXRDVdoNJ0rfHXyVsgxQMzctP346S5WXlBmoOU=
Expand All @@ -10,8 +8,9 @@ github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o=
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
Expand Down
10 changes: 3 additions & 7 deletions disgolink/_example/listeners.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,29 +116,25 @@ func onApplicationCommand(event *events.ApplicationCommandInteractionEvent) {
musicPlayer = NewMusicPlayer(*event.GuildID)
musicPlayers[*event.GuildID] = musicPlayer
}
skipSegments := false
if option := data.Options.Bool("skip-segments"); option != nil {
skipSegments = *option
}

_ = musicPlayer.Node().RestClient().LoadItemHandler(context.TODO(), query, lavalink.NewResultHandler(
func(track lavalink.AudioTrack) {
if ok = connect(event, voiceState); !ok {
return
}
musicPlayer.Queue(event, skipSegments, track)
musicPlayer.Queue(event, track)
},
func(playlist lavalink.AudioPlaylist) {
if ok = connect(event, voiceState); !ok {
return
}
musicPlayer.Queue(event, skipSegments, playlist.Tracks...)
musicPlayer.Queue(event, playlist.Tracks()...)
},
func(tracks []lavalink.AudioTrack) {
if ok = connect(event, voiceState); !ok {
return
}
musicPlayer.Queue(event, skipSegments, tracks[0])
musicPlayer.Queue(event, tracks[0])
},
func() {
_, _ = event.UpdateOriginalMessage(discord.NewMessageUpdateBuilder().SetContent("no tracks found").Build())
Expand Down
4 changes: 2 additions & 2 deletions disgolink/_example/music_player.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,14 @@ type MusicPlayer struct {
channel core.MessageChannel
}

func (p *MusicPlayer) Queue(event *events.ApplicationCommandInteractionEvent, skipSegments bool, tracks ...lavalink.AudioTrack) {
func (p *MusicPlayer) Queue(event *events.ApplicationCommandInteractionEvent, tracks ...lavalink.AudioTrack) {
p.channel = event.Channel()
for _, track := range tracks {
p.queue = append(p.queue, track)
}

var embed discord.EmbedBuilder
if p.Track() == nil {
if p.PlayingTrack() == nil {
var track lavalink.AudioTrack
track, p.queue = p.queue[len(p.queue)-1], p.queue[:len(p.queue)-1]
_ = p.Play(track)
Expand Down
5 changes: 2 additions & 3 deletions disgolink/disgolink.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ type Link interface {

var (
_ Link = (*linkImpl)(nil)
_ lavalink.Lavalink = (*linkImpl)(nil)
_ core.EventListener = (*linkImpl)(nil)
)

Expand All @@ -37,7 +36,7 @@ type linkImpl struct {
func (l *linkImpl) OnEvent(event core.Event) {
switch e := event.(type) {
case *events.VoiceServerUpdateEvent:
l.VoiceServerUpdate(lavalink.VoiceServerUpdate{
l.OnVoiceServerUpdate(lavalink.VoiceServerUpdate{
Token: e.VoiceServerUpdate.Token,
GuildID: e.VoiceServerUpdate.GuildID,
Endpoint: e.VoiceServerUpdate.Endpoint,
Expand All @@ -47,7 +46,7 @@ func (l *linkImpl) OnEvent(event core.Event) {
if e.VoiceState.UserID != l.UserID() {
return
}
l.VoiceStateUpdate(lavalink.VoiceStateUpdate{
l.OnVoiceStateUpdate(lavalink.VoiceStateUpdate{
GuildID: e.VoiceState.GuildID,
ChannelID: e.VoiceState.ChannelID,
SessionID: e.VoiceState.SessionID,
Expand Down
2 changes: 1 addition & 1 deletion disgolink/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ require (
require (
github.com/DisgoOrg/log v1.1.3 // indirect
github.com/DisgoOrg/snowflake v1.0.4 // indirect
github.com/gorilla/websocket v1.4.2 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/sasha-s/go-csync v0.0.0-20210812194225-61421b77c44b // indirect
)
5 changes: 2 additions & 3 deletions disgolink/go.sum
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
github.com/DisgoOrg/disgo v0.7.2 h1:7yy/45NQ8IBFtx841Cy62RtWOPlj9LAOVHM/u8f4yko=
github.com/DisgoOrg/disgo v0.7.2/go.mod h1:BMXRXwMe2kjakJ/T+FvER6bnfPr8zwFXDLyeCNJn2Cc=
github.com/DisgoOrg/disgolink/lavalink v1.3.3 h1:YZgGlAm4bGKJar/Dm9rgdAprH/qMC/A+iI2eD6zbLdg=
github.com/DisgoOrg/disgolink/lavalink v1.3.3/go.mod h1:u14urQSHp9DA41yYi3RnhGLeSw2J0WeN1za2Rr4Kekg=
github.com/DisgoOrg/log v1.1.3 h1:UN0ZfmPZ7yhCCDQ7iVvIedvZ2zEexNS5Ek76GBuffOE=
github.com/DisgoOrg/log v1.1.3/go.mod h1:tSMofXaNhQNvzLRoL4tAiCG9yGY1ES5DLvduh7e9GRU=
github.com/DisgoOrg/snowflake v1.0.4 h1:hgeXSaXRDVdoNJ0rfHXyVsgxQMzctP346S5WXlBmoOU=
github.com/DisgoOrg/snowflake v1.0.4/go.mod h1:jIQVlVmElm2OGt6v52ITf/71ODaU09chUCflxt8+3yM=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
Expand Down
44 changes: 26 additions & 18 deletions lavalink/audio_playlist.go
Original file line number Diff line number Diff line change
@@ -1,28 +1,36 @@
package lavalink

func NewAudioPlaylist(info AudioPlaylistInfo, tracks []AudioTrack) AudioPlaylist {
return AudioPlaylist{
Info: info,
Tracks: tracks,
func NewAudioPlaylist(name string, selectedTrackIndex int, tracks []AudioTrack) AudioPlaylist {
return BasicAudioPlaylist{
PlaylistName: name,
SelectedTrackIndex: selectedTrackIndex,
PlaylistTracks: tracks,
}
}

type AudioPlaylist struct {
Info AudioPlaylistInfo
Tracks []AudioTrack
type AudioPlaylist interface {
Name() string
Tracks() []AudioTrack
SelectedTrack() AudioTrack
}

func (p AudioPlaylist) SelectedTrack() AudioTrack {
if p.Info.SelectedTrack == -1 {
return nil
}
if p.Info.SelectedTrack >= len(p.Tracks) {
return nil
}
return p.Tracks[p.Info.SelectedTrack]
type BasicAudioPlaylist struct {
PlaylistName string
SelectedTrackIndex int
PlaylistTracks []AudioTrack
}

func (p BasicAudioPlaylist) Name() string {
return p.PlaylistName
}

func (p BasicAudioPlaylist) Tracks() []AudioTrack {
return p.PlaylistTracks
}

type AudioPlaylistInfo struct {
Name string `json:"name"`
SelectedTrack int `json:"selectedTrack"`
func (p BasicAudioPlaylist) SelectedTrack() AudioTrack {
if p.SelectedTrackIndex == -1 || p.SelectedTrackIndex >= len(p.PlaylistTracks) {
return nil
}
return p.PlaylistTracks[p.SelectedTrackIndex]
}
Loading

0 comments on commit ba39ac4

Please sign in to comment.