@@ -3,6 +3,8 @@ package commands
3
3
import (
4
4
"context"
5
5
"fmt"
6
+ "strings"
7
+ "sync"
6
8
7
9
"github.com/disgoorg/disgo/discord"
8
10
"github.com/disgoorg/disgo/handler"
@@ -24,9 +26,9 @@ var latest = discord.SlashCommandCreate{
24
26
}
25
27
26
28
func (c * Commands ) LatestAutocomplete (e * handler.AutocompleteEvent ) error {
27
- options := []string {"lavalink " }
29
+ options := []string {"Lavalink " }
28
30
for _ , plugin := range c .Cfg .Plugins {
29
- options = append (options , plugin .Dependency )
31
+ options = append (options , plugin .Name )
30
32
}
31
33
32
34
ranks := fuzzy .RankFindFold (e .Data .String ("type" ), options )
@@ -36,9 +38,17 @@ func (c *Commands) LatestAutocomplete(e *handler.AutocompleteEvent) error {
36
38
if len (choices ) >= 25 {
37
39
break
38
40
}
41
+
42
+ var value string
43
+ if rank .OriginalIndex == 0 {
44
+ value = "lavalink"
45
+ } else {
46
+ value = c .Cfg .Plugins [rank .OriginalIndex - 1 ].Dependency
47
+ }
48
+
39
49
choices = append (choices , discord.AutocompleteChoiceString {
40
50
Name : options [rank .OriginalIndex ],
41
- Value : options [ rank . OriginalIndex ] ,
51
+ Value : value ,
42
52
})
43
53
}
44
54
@@ -50,45 +60,49 @@ func (c *Commands) Latest(data discord.SlashCommandInteractionData, e *handler.C
50
60
return err
51
61
}
52
62
53
- latestType , ok := e .SlashCommandInteractionData ().OptString ("type" )
54
- if ! ok {
55
- embed := getLatestEmbed (c , "lavalink" )
63
+ var types []string
64
+ latestType , ok := data .OptString ("type" )
65
+ if ok {
66
+ types = []string {latestType }
67
+ } else {
68
+ types = append (types , "lavalink" )
56
69
for _ , plugin := range c .Cfg .Plugins {
57
- newEmbed := getLatestEmbed (c , plugin .Dependency )
58
- embed .Fields = append (embed .Fields , discord.EmbedField {
59
- Name : newEmbed .Title ,
60
- Value : newEmbed .Description ,
61
- })
70
+ types = append (types , plugin .Dependency )
62
71
}
72
+ }
63
73
64
- _ , err := e .UpdateInteractionResponse (discord.MessageUpdate {
65
- Embeds : & []discord.Embed {embed },
66
- })
67
- return err
74
+ var wg sync.WaitGroup
75
+ versions := make ([]string , len (types ))
76
+ for i , versionType := range types {
77
+ wg .Add (1 )
78
+ go func () {
79
+ defer wg .Done ()
80
+ versions [i ] = getLatest (c , versionType )
81
+ }()
68
82
}
69
- embed := getLatestEmbed (c , latestType )
83
+ wg .Wait ()
84
+
70
85
_ , err := e .UpdateInteractionResponse (discord.MessageUpdate {
71
- Embeds : & []discord.Embed {embed },
86
+ Embeds : & []discord.Embed {
87
+ {
88
+ Title : "Latest Versions" ,
89
+ URL : "https://lavalink.dev/plugins.html" ,
90
+ Description : strings .Join (versions , "\n \n " ),
91
+ },
92
+ },
72
93
})
73
94
return err
74
95
}
75
96
76
- func getLatestEmbed (c * Commands , latestType string ) discord. Embed {
97
+ func getLatest (c * Commands , latestType string ) string {
77
98
if latestType == "lavalink" {
78
- embed := discord.Embed {
79
- Author : & discord.EmbedAuthor {
80
- Name : "Latest Lavalink Version" ,
81
- },
82
- }
83
99
release , _ , err := c .GitHub .Repositories .GetLatestRelease (context .Background (), "lavalink-devs" , "Lavalink" )
84
100
if err != nil {
85
- embed .Description = "Failed to get latest Lavalink version: " + err .Error ()
86
- return embed
101
+ return "Failed to get latest Lavalink version: " + err .Error ()
87
102
}
88
- embed .Author .URL = release .GetHTMLURL ()
89
- embed .Description = fmt .Sprintf ("**Version:** `%s`\n **Release Date:** %s" , release .GetTagName (), discord .NewTimestamp (discord .TimestampStyleLongDateTime , release .GetPublishedAt ().Time ))
90
- return embed
103
+ return fmt .Sprintf ("**[`Lavalink`](%s):**\n **Latest Version:** `%s`\n **Release Date:** %s" , release .GetHTMLURL (), release .GetTagName (), discord .NewTimestamp (discord .TimestampStyleLongDateTime , release .GetPublishedAt ().Time ))
91
104
}
105
+
92
106
var pluginCfg lavalinkbot.PluginConfig
93
107
for _ , plugin := range c .Cfg .Plugins {
94
108
if plugin .Dependency == latestType {
@@ -97,20 +111,12 @@ func getLatestEmbed(c *Commands, latestType string) discord.Embed {
97
111
}
98
112
}
99
113
if pluginCfg .Dependency == "" {
100
- return discord.Embed {
101
- Description : fmt .Sprintf ("Unknown plugin: `%s`" , latestType ),
102
- }
114
+ return fmt .Sprintf ("Unknown plugin: `%s`" , latestType )
103
115
}
104
116
105
117
metadata , err := c .Maven .FetchLatestVersion (pluginCfg .Dependency , pluginCfg .Repository )
106
118
if err != nil {
107
- return discord.Embed {
108
- Description : fmt .Sprintf ("Failed to get latest %s version: %s" , pluginCfg .Dependency , err .Error ()),
109
- }
119
+ return fmt .Sprintf ("Failed to get latest %s version: %s" , pluginCfg .Dependency , err .Error ())
110
120
}
111
- return discord.Embed {
112
- Title : fmt .Sprintf ("Latest %s Version" , metadata .ArtifactID ),
113
- Description : fmt .Sprintf ("**Version:** `%s`" , metadata .Latest ()),
114
- }
115
-
121
+ return fmt .Sprintf ("**[`%s`](%s):**\n **Latest Version:** `%s`" , pluginCfg .Name , pluginCfg .Git , metadata .Latest ())
116
122
}
0 commit comments