@@ -2,11 +2,16 @@ package bot
22
33import (
44 "context"
5+ "encoding/json"
6+ "time"
57
68 "github.com/disgoorg/disgo/bot"
79 "github.com/disgoorg/disgo/events"
810 "github.com/disgoorg/disgolink/v3/disgolink"
911 "github.com/disgoorg/disgolink/v3/lavalink"
12+ "github.com/disgoorg/lavaqueue-plugin"
13+ "github.com/mroctopus/bottie-bot/internal/player"
14+ "github.com/rs/zerolog/log"
1015)
1116
1217func (b * RobotoBot ) OnDiscordEvent (event bot.Event ) {
@@ -24,19 +29,62 @@ func (b *RobotoBot) OnDiscordEvent(event bot.Event) {
2429 }
2530}
2631
32+ // NOTE:
33+ // This might need a mutex -> !!!!
2734func (b * RobotoBot ) OnLavalinkEvent (p disgolink.Player , event lavalink.Event ) {
28- // player := b.Lavalink.Player(p.GuildID())
29- /*
30- switch e := event.(type) {
31- case lavaqueue.QueueEndEvent:
32- //slog.Info("queue end", slog.String("guild", p.GuildID().String()))
35+ client := b .Discord
3336
34- case lavalink.TrackStartEvent:
37+ switch e := event .(type ) {
38+ case lavaqueue.QueueEndEvent :
39+ log .Debug ().Msgf ("LAVALINK EVENT: %s" , event .Type ())
40+
41+ go func () {
42+ time .Sleep (time .Second * 10 )
43+ track := p .Track ()
44+ if track == nil {
45+ ctx := context .Background ()
46+
47+ err := p .Destroy (ctx )
48+ if err != nil {
49+ log .Warn ().Err (err ).Msg ("Failed to stop the music player" )
50+ }
3551
36- case lavalink.TrackExceptionEvent:
37- //slog.Error("track exception", tint.Err(e.Exception))
52+ _ = client . UpdateVoiceState ( ctx , e . GuildID (), nil , false , false )
53+ }
3854
39- case lavalink.TrackStuckEvent:
55+ }()
4056
41- }*/
57+ case lavalink.TrackEndEvent :
58+ track := e .Track
59+
60+ var data player.TrackUserData
61+ err := json .Unmarshal (track .UserData , & data )
62+ if err != nil {
63+ log .Error ().Err (err ).Msg ("Failed to unmarshal track TrackUserData on Lavalink.TrackEndEvent" )
64+ return
65+ }
66+
67+ msg , ok := b .LavalinkTrackMessages [data .ID ]
68+ if ! ok {
69+ log .Warn ().Msgf ("Failed to find the corresponding message for track snowflake ID '%s'" , data .ID )
70+ return
71+ }
72+
73+ err = client .Rest ().DeleteFollowupMessage (msg .AppID , msg .InteractionToken , msg .MessageID )
74+ if err != nil {
75+ log .Warn ().Err (err ).Msgf ("Failed to delete the message with ID '%s' in channel ID '%s'" , msg .MessageID , msg .ChannelID )
76+ }
77+
78+ delete (b .LavalinkTrackMessages , data .ID )
79+
80+ case lavalink.TrackStartEvent :
81+ // TODO
82+
83+ case lavalink.TrackExceptionEvent :
84+ // TODO
85+
86+ case lavalink.TrackStuckEvent :
87+ // TODO
88+
89+ }
4290}
0 commit comments