Skip to content

Commit ddccd63

Browse files
committed
add requester & track original
1 parent b15549a commit ddccd63

File tree

7 files changed

+77
-18
lines changed

7 files changed

+77
-18
lines changed

commands/now_playing.go

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package commands
22

33
import (
4+
"bytes"
45
"fmt"
56

67
"github.com/disgoorg/disgo/discord"
@@ -19,7 +20,16 @@ func (c *Commands) NowPlaying(e *handler.CommandEvent) error {
1920
})
2021
}
2122
content := fmt.Sprintf("Now playing: %s", res.FormatTrack(*track, player.Position()))
23+
var userData UserData
24+
_ = track.UserData.Unmarshal(&userData)
25+
if userData.Requester > 0 {
26+
content += "\nRequested by: " + discord.UserMention(userData.Requester)
27+
}
28+
if userData.OriginType == "playlist" {
29+
content += fmt.Sprintf("\nFrom: %s", userData.OriginName)
30+
}
2231

32+
var files []*discord.File
2333
if e.SlashCommandInteractionData().Bool("raw") {
2434
data, err := json.MarshalIndent(track, "", " ")
2535
if err != nil {
@@ -28,11 +38,15 @@ func (c *Commands) NowPlaying(e *handler.CommandEvent) error {
2838
Flags: discord.MessageFlagEphemeral,
2939
})
3040
}
31-
32-
content += fmt.Sprintf("\n```json\n%s\n```", data)
41+
files = append(files, &discord.File{
42+
Name: "track.json",
43+
Reader: bytes.NewReader(data),
44+
})
3345
}
3446

3547
return e.CreateMessage(discord.MessageCreate{
36-
Content: content,
48+
Content: content,
49+
AllowedMentions: &discord.AllowedMentions{},
50+
Files: files,
3751
})
3852
}

commands/play.go

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/disgoorg/json"
1515
"github.com/disgoorg/lavasearch-plugin"
1616
"github.com/disgoorg/lavasrc-plugin"
17+
"github.com/disgoorg/snowflake/v2"
1718
"github.com/lavalink-devs/lavalink-bot/internal/res"
1819
"go.deanishe.net/fuzzy"
1920
)
@@ -23,12 +24,27 @@ var (
2324
queryPattern = regexp.MustCompile(`^(.{2})(search|isrc):(.+)`)
2425
)
2526

27+
type UserData struct {
28+
Requester snowflake.ID `json:"requester"`
29+
OriginType string `json:"origin_type"`
30+
OriginName string `json:"origin_name"`
31+
}
32+
2633
func (c *Commands) PlayAutocomplete(e *handler.AutocompleteEvent) error {
2734
query := e.Data.String("query")
2835
if query == "" {
2936
return e.AutocompleteResult(nil)
3037
}
3138

39+
if urlPattern.MatchString(query) {
40+
return e.AutocompleteResult([]discord.AutocompleteChoice{
41+
discord.AutocompleteChoiceString{
42+
Name: res.Trim("🔗 "+query, 100),
43+
Value: query,
44+
},
45+
})
46+
}
47+
3248
source := lavalink.SearchType(e.Data.String("source"))
3349
if source == "" {
3450
source = "dzsearch"
@@ -186,6 +202,9 @@ func (c *Commands) Play(e *handler.CommandEvent) error {
186202
var (
187203
tracks []lavalink.Track
188204
messageContent string
205+
userData = UserData{
206+
Requester: e.User().ID,
207+
}
189208
)
190209
switch loadData := result.Data.(type) {
191210
case lavalink.Track:
@@ -194,7 +213,9 @@ func (c *Commands) Play(e *handler.CommandEvent) error {
194213
case lavalink.Playlist:
195214
tracks = append(tracks, loadData.Tracks...)
196215
playlistType, playlistName := res.FormatPlaylist(loadData)
197-
messageContent = fmt.Sprintf("Loaded %s **%s**", playlistType, playlistName)
216+
messageContent = fmt.Sprintf("Loaded %s **%s** - `%d tracks`", playlistType, playlistName, len(loadData.Tracks))
217+
userData.OriginType = playlistType
218+
userData.OriginName = playlistName
198219
case lavalink.Search:
199220
tracks = append(tracks, loadData[0])
200221
messageContent = fmt.Sprintf("Loaded track **%s** from search", res.FormatTrack(loadData[0], 0))
@@ -223,6 +244,11 @@ func (c *Commands) Play(e *handler.CommandEvent) error {
223244
return err
224245
}
225246

247+
userDataRaw, _ := json.Marshal(userData)
248+
for i := range tracks {
249+
tracks[i].UserData = userDataRaw
250+
}
251+
226252
player := c.Lavalink.Player(*e.GuildID())
227253
if player.Track() == nil {
228254
var track lavalink.Track

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ go 1.21
44

55
require (
66
github.com/disgoorg/disgo v0.17.0
7-
github.com/disgoorg/disgolink/v3 v3.0.0-20231123221557-7482a52d013a
7+
github.com/disgoorg/disgolink/v3 v3.0.0-20231126174358-f0db0ed57f17
88
github.com/disgoorg/json v1.1.0
99
github.com/disgoorg/lavasearch-plugin v0.0.0-20230812211104-12547850ae07
1010
github.com/disgoorg/lavasrc-plugin v0.0.0-20230812211312-b2484e9b20da

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
99
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1010
github.com/disgoorg/disgo v0.17.0 h1:/LcgXgPDhzHt3GkQ4cpjmIJBim1/VYfS31VhGYif3Ms=
1111
github.com/disgoorg/disgo v0.17.0/go.mod h1:AE2J/8oLR2PtYfqcARsk1mgBxQ5z3Z1OD6Lc2SA0gak=
12-
github.com/disgoorg/disgolink/v3 v3.0.0-20231123221557-7482a52d013a h1:Q4rsO+hwjRYELK0X43fUft02BJBN3nleVImxNxzUnjM=
13-
github.com/disgoorg/disgolink/v3 v3.0.0-20231123221557-7482a52d013a/go.mod h1:YIwjIteZcjfI7HYZWH241iRI7RjTLoN51HLDOUHVSFI=
12+
github.com/disgoorg/disgolink/v3 v3.0.0-20231126174358-f0db0ed57f17 h1:UqxupfVPqaiMWGr7xVrQmmrZCG2Y/9sosqkCDWyo9VU=
13+
github.com/disgoorg/disgolink/v3 v3.0.0-20231126174358-f0db0ed57f17/go.mod h1:YIwjIteZcjfI7HYZWH241iRI7RjTLoN51HLDOUHVSFI=
1414
github.com/disgoorg/json v1.1.0 h1:7xigHvomlVA9PQw9bMGO02PHGJJPqvX5AnwlYg/Tnys=
1515
github.com/disgoorg/json v1.1.0/go.mod h1:BHDwdde0rpQFDVsRLKhma6Y7fTbQKub/zdGO5O9NqqA=
1616
github.com/disgoorg/lavasearch-plugin v0.0.0-20230812211104-12547850ae07 h1:hf3vNsBK1gp1TEqonO3YYG8NxJswbLe6BusUalMnYfg=

handlers/lavalink.go

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/disgoorg/disgolink/v3/disgolink"
1212
"github.com/disgoorg/disgolink/v3/lavalink"
1313
"github.com/disgoorg/sponsorblock-plugin"
14+
"github.com/lavalink-devs/lavalink-bot/commands"
1415
"github.com/lavalink-devs/lavalink-bot/internal/res"
1516
"github.com/topi314/tint"
1617
)
@@ -55,8 +56,20 @@ func (h *Handlers) OnTrackStart(p disgolink.Player, event lavalink.TrackStartEve
5556
if channelID == 0 {
5657
return
5758
}
59+
60+
content := "Now playing: " + res.FormatTrack(event.Track, 0)
61+
var userData commands.UserData
62+
_ = event.Track.UserData.Unmarshal(&userData)
63+
if userData.Requester > 0 {
64+
content += "\nRequested by: " + discord.UserMention(userData.Requester)
65+
}
66+
if userData.OriginType == "playlist" {
67+
content += fmt.Sprintf("\nFrom: %s", userData.OriginName)
68+
}
69+
5870
if _, err := h.Client.Rest().CreateMessage(channelID, discord.MessageCreate{
59-
Content: "Now playing: " + res.FormatTrack(event.Track, 0),
71+
Content: content,
72+
AllowedMentions: &discord.AllowedMentions{},
6073
}); err != nil {
6174
slog.Error("failed to send message", tint.Err(err))
6275
}
@@ -78,7 +91,8 @@ func (h *Handlers) OnTrackEnd(p disgolink.Player, event lavalink.TrackEndEvent)
7891
return
7992
}
8093
if _, err = h.Client.Rest().CreateMessage(channelID, discord.MessageCreate{
81-
Content: "failed to start next track: " + err.Error(),
94+
Content: "failed to start next track: " + err.Error(),
95+
AllowedMentions: &discord.AllowedMentions{},
8296
}); err != nil {
8397
slog.Error("failed to send message", tint.Err(err))
8498
}
@@ -91,7 +105,8 @@ func (h *Handlers) OnTrackException(p disgolink.Player, event lavalink.TrackExce
91105
return
92106
}
93107
if _, err := h.Client.Rest().CreateMessage(channelID, discord.MessageCreate{
94-
Content: "Track exception: " + event.Exception.Error(),
108+
Content: "Track exception: " + event.Exception.Error(),
109+
AllowedMentions: &discord.AllowedMentions{},
95110
}); err != nil {
96111
slog.Error("failed to send message", tint.Err(err))
97112
}
@@ -103,7 +118,8 @@ func (h *Handlers) OnTrackStuck(p disgolink.Player, event lavalink.TrackStuckEve
103118
return
104119
}
105120
if _, err := h.Client.Rest().CreateMessage(channelID, discord.MessageCreate{
106-
Content: "Track stuck: " + event.Track.Info.Title,
121+
Content: "Track stuck: " + event.Track.Info.Title,
122+
AllowedMentions: &discord.AllowedMentions{},
107123
}); err != nil {
108124
slog.Error("failed to send message", tint.Err(err))
109125
}
@@ -138,7 +154,8 @@ func (h *Handlers) OnSegmentsLoaded(p disgolink.Player, event sponsorblock.Segme
138154
content += line
139155
}
140156
if _, err := h.Client.Rest().CreateMessage(channelID, discord.MessageCreate{
141-
Content: content,
157+
Content: content,
158+
AllowedMentions: &discord.AllowedMentions{},
142159
}); err != nil {
143160
slog.Error("failed to send message", tint.Err(err))
144161
}
@@ -150,7 +167,8 @@ func (h *Handlers) OndSegmentSkipped(p disgolink.Player, event sponsorblock.Segm
150167
return
151168
}
152169
if _, err := h.Client.Rest().CreateMessage(channelID, discord.MessageCreate{
153-
Content: fmt.Sprintf("Segment skipped: %s: %s - %s", event.Segment.Category, res.FormatDuration(event.Segment.Start), res.FormatDuration(event.Segment.End)),
170+
Content: fmt.Sprintf("Segment skipped: %s: %s - %s", event.Segment.Category, res.FormatDuration(event.Segment.Start), res.FormatDuration(event.Segment.End)),
171+
AllowedMentions: &discord.AllowedMentions{},
154172
}); err != nil {
155173
slog.Error("failed to send message", tint.Err(err))
156174
}
@@ -172,7 +190,8 @@ func (h *Handlers) OnChaptersLoaded(p disgolink.Player, event sponsorblock.Chapt
172190
content += line
173191
}
174192
if _, err := h.Client.Rest().CreateMessage(channelID, discord.MessageCreate{
175-
Content: content,
193+
Content: content,
194+
AllowedMentions: &discord.AllowedMentions{},
176195
}); err != nil {
177196
slog.Error("failed to send message", tint.Err(err))
178197
}
@@ -184,7 +203,8 @@ func (h *Handlers) OnChapterStarted(p disgolink.Player, event sponsorblock.Chapt
184203
return
185204
}
186205
if _, err := h.Client.Rest().CreateMessage(channelID, discord.MessageCreate{
187-
Content: fmt.Sprintf("Chapter started: %s: %s - %s", event.Chapter.Name, res.FormatDuration(event.Chapter.Start), res.FormatDuration(event.Chapter.End)),
206+
Content: fmt.Sprintf("Chapter started: %s: %s - %s", event.Chapter.Name, res.FormatDuration(event.Chapter.Start), res.FormatDuration(event.Chapter.End)),
207+
AllowedMentions: &discord.AllowedMentions{},
188208
}); err != nil {
189209
slog.Error("failed to send message", tint.Err(err))
190210
}

internal/res/playlist.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ func FormatPlaylist(playlist lavalink.Playlist) (string, string) {
2323
name = lavasrcInfo.Author + " - " + name
2424
}
2525
if lavasrcInfo.URL != "" {
26-
return playlistType, fmt.Sprintf("[`%s`](<%s>) - `%d tracks`", name, lavasrcInfo.URL, len(playlist.Tracks))
26+
return playlistType, fmt.Sprintf("[`%s`](<%s>)", name, lavasrcInfo.URL)
2727
}
2828

29-
return playlistType, fmt.Sprintf("`%s` - `%d tracks`", name, len(playlist.Tracks))
29+
return playlistType, fmt.Sprintf("`%s`", name)
3030
}

internal/res/track.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ func FormatTrack(track lavalink.Track, position lavalink.Duration) string {
4040
if lavasrcInfo.AlbumURL != "" {
4141
albumName = fmt.Sprintf("[`%s`](<%s>)", lavasrcInfo.AlbumName, lavasrcInfo.AlbumURL)
4242
}
43-
4443
return fmt.Sprintf("%s - %s %s - %s", trackName, trackAuthor, positionStr, albumName)
4544
}
4645

0 commit comments

Comments
 (0)