aqualink 2.20.0 โ 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +174 -184
- package/build/handlers/autoplay.js +5 -1
- package/build/structures/Aqua.js +226 -539
- package/build/structures/AquaRecovery.js +901 -0
- package/build/structures/Connection.js +72 -261
- package/build/structures/ConnectionRecovery.js +398 -0
- package/build/structures/Filters.js +93 -12
- package/build/structures/Node.js +93 -54
- package/build/structures/Player.js +284 -337
- package/build/structures/PlayerLifecycle.js +575 -0
- package/build/structures/PlayerLifecycleState.js +42 -0
- package/build/structures/Reporting.js +32 -0
- package/build/structures/Rest.js +25 -2
- package/build/structures/Track.js +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
3
|
<p align="center">
|
|
4
|
-
<img src="https://capsule-render.vercel.app/api?type=wave&color=0099FF&height=300§ion=header&text=Aqualink&fontSize=90&fontAlignY=35&animation=twinkling&fontColor=ffffff&desc=
|
|
4
|
+
<img src="https://capsule-render.vercel.app/api?type=wave&color=0099FF&height=300§ion=header&text=Aqualink&fontSize=90&fontAlignY=35&animation=twinkling&fontColor=ffffff&desc=Performance-focused%20Lavalink%20Client&descSize=25&descAlignY=60" />
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
7
|
[](https://www.npmjs.com/package/aqualink)
|
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
<br />
|
|
13
13
|
|
|
14
14
|
<p align="center">
|
|
15
|
-
<img src="https://readme-typing-svg.herokuapp.com?font=Montserrat&duration=3000&pause=1000&color=0099FF¢er=true&vCenter=true&width=
|
|
15
|
+
<img src="https://readme-typing-svg.herokuapp.com?font=Montserrat&duration=3000&pause=1000&color=0099FF¢er=true&vCenter=true&width=700&lines=Powerful+Audio+Streaming+for+Discord+Bots;Optimized+for+Lavalink+v4+and+Nodelink;Failover%2C+Filters%2C+Autoplay%2C+Lyrics;Easy+to+Integrate%2C+Built+for+Stability" />
|
|
16
16
|
</p>
|
|
17
17
|
|
|
18
18
|
</div>
|
|
19
19
|
|
|
20
20
|
<div align="center">
|
|
21
21
|
<h3>๐ REIMAGINING AUDIO STREAMING FOR DISCORD ๐</h3>
|
|
22
|
-
<h4>
|
|
22
|
+
<h4>Built for high uptime, clean APIs, and real-world bot workloads</h4>
|
|
23
23
|
</div>
|
|
24
24
|
|
|
25
25
|
<br />
|
|
@@ -32,77 +32,68 @@
|
|
|
32
32
|
<td align="center" width="33%">
|
|
33
33
|
<h3>๐</h3>
|
|
34
34
|
<h4>Performance First</h4>
|
|
35
|
-
<p>
|
|
35
|
+
<p>Efficient queue/player internals and load-balanced node selection.</p>
|
|
36
36
|
</td>
|
|
37
37
|
<td align="center" width="33%">
|
|
38
38
|
<h3>๐ ๏ธ</h3>
|
|
39
39
|
<h4>Developer Friendly</h4>
|
|
40
|
-
<p>
|
|
40
|
+
<p>Simple API surface with CJS/ESM compatibility and TypeScript types.</p>
|
|
41
41
|
</td>
|
|
42
42
|
<td align="center" width="33%">
|
|
43
43
|
<h3>๐</h3>
|
|
44
|
-
<h4>
|
|
45
|
-
<p>Plugin
|
|
44
|
+
<h4>Extensible</h4>
|
|
45
|
+
<p>Plugin base class + rich event system for custom bot behavior.</p>
|
|
46
46
|
</td>
|
|
47
47
|
</tr>
|
|
48
48
|
</table>
|
|
49
49
|
</div>
|
|
50
50
|
|
|
51
51
|
## ๐ฆ Installation
|
|
52
|
-
**Latest Stable Release: `v2.
|
|
52
|
+
**Latest Stable Release: `v2.20.1`**
|
|
53
53
|
|
|
54
54
|
<details>
|
|
55
|
-
<summary><strong>๐ฆ NPM
|
|
55
|
+
<summary><strong>๐ฆ NPM</strong></summary>
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
|
-
#
|
|
58
|
+
# Stable release
|
|
59
59
|
npm install aqualink
|
|
60
60
|
|
|
61
|
-
#
|
|
61
|
+
# Development build
|
|
62
62
|
npm install ToddyTheNoobDud/aqualink
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
</details>
|
|
66
66
|
|
|
67
67
|
<details>
|
|
68
|
-
<summary><strong>๐งถ Yarn
|
|
68
|
+
<summary><strong>๐งถ Yarn</strong></summary>
|
|
69
69
|
|
|
70
70
|
```bash
|
|
71
|
-
# ๐ฏ Stable release (recommended for production)
|
|
72
71
|
yarn add aqualink
|
|
73
|
-
|
|
74
|
-
# ๐ง Latest development build
|
|
75
72
|
yarn add ToddyTheNoobDud/aqualink
|
|
76
73
|
```
|
|
77
74
|
|
|
78
75
|
</details>
|
|
79
76
|
|
|
80
77
|
<details>
|
|
81
|
-
<summary><strong>โก Bun
|
|
78
|
+
<summary><strong>โก Bun</strong></summary>
|
|
82
79
|
|
|
83
80
|
```bash
|
|
84
|
-
# ๐ฏ Stable release (recommended for production)
|
|
85
81
|
bun add aqualink
|
|
86
|
-
|
|
87
|
-
# ๐ง Latest development build
|
|
88
82
|
bun add ToddyTheNoobDud/aqualink
|
|
89
83
|
```
|
|
90
84
|
|
|
91
85
|
</details>
|
|
92
86
|
|
|
93
87
|
<details>
|
|
94
|
-
<summary><strong>๐ฆ pnpm
|
|
88
|
+
<summary><strong>๐ฆ pnpm</strong></summary>
|
|
95
89
|
|
|
96
90
|
```bash
|
|
97
|
-
# ๐ฏ Stable release (recommended for production)
|
|
98
91
|
pnpm add aqualink
|
|
99
|
-
|
|
100
|
-
# ๐ง Latest development build
|
|
101
92
|
pnpm add ToddyTheNoobDud/aqualink
|
|
102
93
|
```
|
|
103
94
|
</details>
|
|
104
95
|
|
|
105
|
-
## ๐ฅ
|
|
96
|
+
## ๐ฅ Implemented Highlights (v2.20.1)
|
|
106
97
|
|
|
107
98
|
<div align="center">
|
|
108
99
|
<table>
|
|
@@ -110,22 +101,22 @@ pnpm add ToddyTheNoobDud/aqualink
|
|
|
110
101
|
<td align="center" width="25%">
|
|
111
102
|
<img src="https://img.icons8.com/fluent/48/000000/filter.png"/>
|
|
112
103
|
<h4>Advanced Filters</h4>
|
|
113
|
-
<p>EQ,
|
|
104
|
+
<p>EQ, Bassboost, Nightcore, Vaporwave, 8D, Karaoke, and more.</p>
|
|
114
105
|
</td>
|
|
115
106
|
<td align="center" width="25%">
|
|
116
107
|
<img src="https://img.icons8.com/fluent/48/000000/cloud-backup-restore.png"/>
|
|
117
|
-
<h4>
|
|
118
|
-
<p>
|
|
108
|
+
<h4>Failover + Recovery</h4>
|
|
109
|
+
<p>Node failover, player migration, auto-resume, queue persistence.</p>
|
|
119
110
|
</td>
|
|
120
111
|
<td align="center" width="25%">
|
|
121
112
|
<img src="https://img.icons8.com/fluent/48/000000/bar-chart.png"/>
|
|
122
|
-
<h4>
|
|
123
|
-
<p>
|
|
113
|
+
<h4>Diagnostics</h4>
|
|
114
|
+
<p>Debug events + trace buffer for production troubleshooting.</p>
|
|
124
115
|
</td>
|
|
125
116
|
<td align="center" width="25%">
|
|
126
117
|
<img src="https://img.icons8.com/fluent/48/000000/settings.png"/>
|
|
127
|
-
<h4>
|
|
128
|
-
<p>
|
|
118
|
+
<h4>Flexible Runtime</h4>
|
|
119
|
+
<p>Load balancing, region-aware nodes, autoplay, lyrics, mixer APIs.</p>
|
|
129
120
|
</td>
|
|
130
121
|
</tr>
|
|
131
122
|
</table>
|
|
@@ -134,7 +125,7 @@ pnpm add ToddyTheNoobDud/aqualink
|
|
|
134
125
|
## ๐ฆ Resources
|
|
135
126
|
|
|
136
127
|
<div align="center">
|
|
137
|
-
<a href="https://discord.gg/
|
|
128
|
+
<a href="https://discord.gg/K4CVv84VBC">
|
|
138
129
|
<img src="https://img.shields.io/badge/Support_Server-3498db?style=for-the-badge&logo=discord&logoColor=white" />
|
|
139
130
|
</a>
|
|
140
131
|
</div>
|
|
@@ -146,140 +137,138 @@ npm install aqualink discord.js
|
|
|
146
137
|
```
|
|
147
138
|
|
|
148
139
|
```javascript
|
|
149
|
-
const { Aqua } = require(
|
|
150
|
-
const { Client, GatewayIntentBits, Events } = require(
|
|
140
|
+
const { Aqua, AqualinkEvents } = require('aqualink')
|
|
141
|
+
const { Client, GatewayIntentBits, Events } = require('discord.js')
|
|
151
142
|
|
|
152
143
|
const client = new Client({
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
});
|
|
144
|
+
intents: [
|
|
145
|
+
GatewayIntentBits.Guilds,
|
|
146
|
+
GatewayIntentBits.GuildMessages,
|
|
147
|
+
GatewayIntentBits.MessageContent,
|
|
148
|
+
GatewayIntentBits.GuildVoiceStates
|
|
149
|
+
]
|
|
150
|
+
})
|
|
161
151
|
|
|
162
152
|
const nodes = [
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
]
|
|
153
|
+
{
|
|
154
|
+
host: '127.0.0.1',
|
|
155
|
+
password: 'your_password', // alias for `auth`
|
|
156
|
+
port: 2333,
|
|
157
|
+
ssl: false,
|
|
158
|
+
name: 'main-node'
|
|
159
|
+
}
|
|
160
|
+
]
|
|
171
161
|
|
|
172
162
|
const aqua = new Aqua(client, nodes, {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
client.on(Events.Raw, (
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
})
|
|
193
|
-
|
|
163
|
+
defaultSearchPlatform: 'ytsearch',
|
|
164
|
+
restVersion: 'v4',
|
|
165
|
+
autoResume: true,
|
|
166
|
+
infiniteReconnects: true,
|
|
167
|
+
loadBalancer: 'leastLoad',
|
|
168
|
+
leaveOnEnd: false,
|
|
169
|
+
autoRegionMigrate: false
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
client.once(Events.ClientReady, async () => {
|
|
173
|
+
await aqua.init(client.user.id)
|
|
174
|
+
console.log(`Logged in as ${client.user.tag}`)
|
|
175
|
+
})
|
|
176
|
+
|
|
177
|
+
// Forward Discord voice packets to Aqualink
|
|
178
|
+
client.on(Events.Raw, (packet) => {
|
|
179
|
+
if (packet.t === 'VOICE_SERVER_UPDATE' || packet.t === 'VOICE_STATE_UPDATE') {
|
|
180
|
+
aqua.updateVoiceState(packet)
|
|
181
|
+
}
|
|
182
|
+
})
|
|
194
183
|
|
|
195
184
|
client.on(Events.MessageCreate, async (message) => {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
185
|
+
if (message.author.bot || !message.content.startsWith('!play')) return
|
|
186
|
+
|
|
187
|
+
const query = message.content.slice(6).trim()
|
|
188
|
+
if (!query) return message.channel.send('Please provide a song to play.')
|
|
189
|
+
if (!message.member.voice.channel) {
|
|
190
|
+
return message.channel.send('You need to be in a voice channel to play music!')
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
const player = aqua.createConnection({
|
|
194
|
+
guildId: message.guild.id,
|
|
195
|
+
voiceChannel: message.member.voice.channel.id,
|
|
196
|
+
textChannel: message.channel.id,
|
|
197
|
+
deaf: true
|
|
198
|
+
})
|
|
199
|
+
|
|
200
|
+
try {
|
|
201
|
+
const resolved = await aqua.resolve({
|
|
202
|
+
query,
|
|
203
|
+
requester: message.member
|
|
204
|
+
})
|
|
205
|
+
|
|
206
|
+
const { loadType, tracks, playlistInfo } = resolved
|
|
207
|
+
|
|
208
|
+
if (loadType === 'playlist') {
|
|
209
|
+
player.queue.add(...tracks)
|
|
210
|
+
message.channel.send(`Added ${tracks.length} songs from ${playlistInfo?.name || 'playlist'}.`)
|
|
211
|
+
} else if (loadType === 'search' || loadType === 'track') {
|
|
212
|
+
const track = tracks[0]
|
|
213
|
+
player.queue.add(track)
|
|
214
|
+
message.channel.send(`Added **${track.title}** to the queue.`)
|
|
215
|
+
} else {
|
|
216
|
+
return message.channel.send('No results found.')
|
|
204
217
|
}
|
|
205
218
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
voiceChannel: message.member.voice.channel.id,
|
|
209
|
-
textChannel: message.channel.id,
|
|
210
|
-
deaf: true,
|
|
211
|
-
});
|
|
212
|
-
|
|
213
|
-
try {
|
|
214
|
-
const resolve = await client.aqua.resolve({ query, requester: message.member });
|
|
215
|
-
const { loadType, tracks, playlistInfo } = resolve;
|
|
216
|
-
|
|
217
|
-
if (loadType === 'playlist') {
|
|
218
|
-
for (const track of tracks) {
|
|
219
|
-
player.queue.add(track);
|
|
220
|
-
}
|
|
221
|
-
message.channel.send(`Added ${tracks.length} songs from ${playlistInfo.name}.`);
|
|
222
|
-
} else if (loadType === 'search' || loadType === 'track') {
|
|
223
|
-
const track = tracks[0];
|
|
224
|
-
player.queue.add(track);
|
|
225
|
-
message.channel.send(`Added **${track.title}** to the queue.`);
|
|
226
|
-
} else {
|
|
227
|
-
return message.channel.send("No results found.");
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
if (!player.playing && !player.paused) {
|
|
231
|
-
player.play();
|
|
232
|
-
}
|
|
233
|
-
} catch (error) {
|
|
234
|
-
console.error("Playback error:", error);
|
|
235
|
-
message.channel.send("An error occurred while trying to play the song.");
|
|
219
|
+
if (!player.playing && !player.paused) {
|
|
220
|
+
await player.play()
|
|
236
221
|
}
|
|
237
|
-
})
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
})
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
})
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
client.
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
222
|
+
} catch (error) {
|
|
223
|
+
console.error('Playback error:', error)
|
|
224
|
+
message.channel.send('An error occurred while trying to play the song.')
|
|
225
|
+
}
|
|
226
|
+
})
|
|
227
|
+
|
|
228
|
+
aqua.on(AqualinkEvents.NodeConnect, (node) => {
|
|
229
|
+
console.log(`Node connected: ${node.name}`)
|
|
230
|
+
})
|
|
231
|
+
|
|
232
|
+
aqua.on(AqualinkEvents.NodeError, (node, error) => {
|
|
233
|
+
console.log(`Node "${node.name}" encountered an error: ${error.message}`)
|
|
234
|
+
})
|
|
235
|
+
|
|
236
|
+
aqua.on(AqualinkEvents.TrackStart, (player, track) => {
|
|
237
|
+
const channel = client.channels.cache.get(player.textChannel)
|
|
238
|
+
if (channel) channel.send(`Now playing: **${track.title}**`)
|
|
239
|
+
})
|
|
240
|
+
|
|
241
|
+
aqua.on(AqualinkEvents.QueueEnd, (player) => {
|
|
242
|
+
const channel = client.channels.cache.get(player.textChannel)
|
|
243
|
+
if (channel) channel.send('The queue has ended.')
|
|
244
|
+
player.destroy()
|
|
245
|
+
})
|
|
246
|
+
|
|
247
|
+
client.login('YOUR_DISCORD_BOT_TOKEN')
|
|
259
248
|
```
|
|
260
249
|
|
|
261
|
-
### Additional Commands You Can Add
|
|
250
|
+
### Additional Commands You Can Add
|
|
262
251
|
|
|
263
252
|
```javascript
|
|
264
253
|
client.on(Events.MessageCreate, async (message) => {
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
}
|
|
254
|
+
if (message.content === '!skip') {
|
|
255
|
+
const player = aqua.players.get(message.guild.id)
|
|
256
|
+
if (player) {
|
|
257
|
+
player.skip()
|
|
258
|
+
message.channel.send('โญ๏ธ Skipped current track!')
|
|
271
259
|
}
|
|
272
|
-
}
|
|
260
|
+
}
|
|
261
|
+
})
|
|
273
262
|
|
|
274
263
|
client.on(Events.MessageCreate, async (message) => {
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
}
|
|
264
|
+
if (message.content === '!stop') {
|
|
265
|
+
const player = aqua.players.get(message.guild.id)
|
|
266
|
+
if (player) {
|
|
267
|
+
player.destroy()
|
|
268
|
+
message.channel.send('โน๏ธ Stopped playback and cleared queue!')
|
|
281
269
|
}
|
|
282
|
-
}
|
|
270
|
+
}
|
|
271
|
+
})
|
|
283
272
|
```
|
|
284
273
|
|
|
285
274
|
## ๐ Featured Projects
|
|
@@ -294,43 +283,44 @@ client.on(Events.MessageCreate, async (message) => {
|
|
|
294
283
|
<a href="https://discord.com/oauth2/authorize?client_id=1202232935311495209">Add to Discord</a>
|
|
295
284
|
</td>
|
|
296
285
|
<td align="center" width="33%">
|
|
297
|
-
<img width="120" height="120" src="https://cdn.discordapp.com/attachments/1347414750463660032/1365654298989690930/soya1.jpg
|
|
286
|
+
<img width="120" height="120" src="https://cdn.discordapp.com/attachments/1347414750463660032/1365654298989690930/soya1.jpg"/>
|
|
298
287
|
<br/>
|
|
299
288
|
<img src="https://img.shields.io/badge/SoyaMusic-22c55e?style=for-the-badge&logo=discord&logoColor=white" /><br />
|
|
300
289
|
<a href="https://discord.com/oauth2/authorize?client_id=997906613082013868&permissions=281357446481&integration_type=0&scope=bot+applications.commands">Add to Discord</a>
|
|
301
290
|
</td>
|
|
291
|
+
<td align="center" width="33%">
|
|
292
|
+
<img width="120" height="120" src="https://img.icons8.com/fluency/240/music.png"/>
|
|
293
|
+
<br/>
|
|
294
|
+
<img src="https://img.shields.io/badge/Rive-a855f7?style=for-the-badge&logo=discord&logoColor=white" /><br />
|
|
295
|
+
<a href="https://discord.com/oauth2/authorize?client_id=1384158871207280651">Add to Discord</a>
|
|
296
|
+
</td>
|
|
302
297
|
</tr>
|
|
303
298
|
</table>
|
|
304
299
|
</div>
|
|
305
300
|
|
|
306
301
|
[View All Projects โ](https://github.com/ToddyTheNoobDud/AquaLink#used-by)
|
|
307
|
-
</div>
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
**300+** weekly downloads โข **3+** GitHub stars โข **3+** Discord bots
|
|
311
|
-
|
|
312
|
-
</div>
|
|
313
302
|
|
|
314
303
|
## ๐ Documentation
|
|
315
304
|
|
|
316
|
-
For detailed usage, API references, and examples, check out
|
|
305
|
+
For detailed usage, API references, and examples, check out the official documentation:
|
|
317
306
|
|
|
318
|
-
|
|
307
|
+
[](https://aqualink-6006388d.mintlify.app)
|
|
319
308
|
|
|
320
309
|
๐ **Get Started Quickly**
|
|
321
310
|
- Installation guide
|
|
322
311
|
- API methods
|
|
323
|
-
-
|
|
312
|
+
- Events and filters
|
|
324
313
|
- Troubleshooting
|
|
325
314
|
|
|
326
315
|
๐ Visit: **[Aqualink Docs](https://aqualink-6006388d.mintlify.app)**
|
|
327
316
|
|
|
328
|
-
## ๐
|
|
317
|
+
## ๐ Bots Using Aqualink
|
|
329
318
|
|
|
330
|
-
| Bot | Invite Link |
|
|
331
|
-
|
|
332
|
-
| Kenium | [Add to Discord](https://discord.com/oauth2/authorize?client_id=1202232935311495209) |
|
|
333
|
-
| Soya Music | [Add to Discord](https://discord.com/oauth2/authorize?client_id=997906613082013868&permissions=281357446481&integration_type=0&scope=bot+applications.commands) |
|
|
319
|
+
| Bot | Invite Link | Notes |
|
|
320
|
+
|-----|-------------|-------|
|
|
321
|
+
| Kenium | [Add to Discord](https://discord.com/oauth2/authorize?client_id=1202232935311495209) | Music playback, playlist support |
|
|
322
|
+
| Soya Music | [Add to Discord](https://discord.com/oauth2/authorize?client_id=997906613082013868&permissions=281357446481&integration_type=0&scope=bot+applications.commands) | Music playback, Discord integration |
|
|
323
|
+
| Rive | [Add to Discord](https://discord.com/oauth2/authorize?client_id=1384158871207280651) | Audio streaming bot |
|
|
334
324
|
|
|
335
325
|
## ๐ ๏ธ Advanced Features
|
|
336
326
|
|
|
@@ -340,31 +330,31 @@ For detailed usage, API references, and examples, check out our official documen
|
|
|
340
330
|
<td>
|
|
341
331
|
<h4>๐๏ธ Audio Filters</h4>
|
|
342
332
|
<ul>
|
|
343
|
-
<li>Equalizer
|
|
344
|
-
<li>
|
|
345
|
-
<li>Nightcore & Vaporwave</li>
|
|
346
|
-
<li>8D
|
|
347
|
-
<li>Karaoke
|
|
333
|
+
<li>Equalizer</li>
|
|
334
|
+
<li>Bassboost preset</li>
|
|
335
|
+
<li>Nightcore & Vaporwave presets</li>
|
|
336
|
+
<li>8D rotation</li>
|
|
337
|
+
<li>Karaoke, ChannelMix, LowPass, Distortion</li>
|
|
348
338
|
</ul>
|
|
349
339
|
</td>
|
|
350
340
|
<td>
|
|
351
|
-
<h4>๐ Queue
|
|
341
|
+
<h4>๐ Queue & Player Control</h4>
|
|
352
342
|
<ul>
|
|
353
|
-
<li>Shuffle &
|
|
354
|
-
<li>
|
|
355
|
-
<li>
|
|
356
|
-
<li>
|
|
357
|
-
<li>
|
|
343
|
+
<li>Shuffle & loop modes</li>
|
|
344
|
+
<li>Seek, replay, skip</li>
|
|
345
|
+
<li>Queue move/swap/remove</li>
|
|
346
|
+
<li>Autoplay support</li>
|
|
347
|
+
<li>Save/load player sessions</li>
|
|
358
348
|
</ul>
|
|
359
349
|
</td>
|
|
360
350
|
<td>
|
|
361
|
-
<h4
|
|
351
|
+
<h4>๐ก Reliability</h4>
|
|
362
352
|
<ul>
|
|
363
|
-
<li>
|
|
364
|
-
<li>
|
|
365
|
-
<li>
|
|
366
|
-
<li>
|
|
367
|
-
<li>
|
|
353
|
+
<li>Auto reconnects</li>
|
|
354
|
+
<li>Node failover migration</li>
|
|
355
|
+
<li>Region-aware node migration</li>
|
|
356
|
+
<li>Debug trace buffer</li>
|
|
357
|
+
<li>Lyrics and live lyrics support</li>
|
|
368
358
|
</ul>
|
|
369
359
|
</td>
|
|
370
360
|
</tr>
|
|
@@ -378,7 +368,7 @@ For detailed usage, API references, and examples, check out our official documen
|
|
|
378
368
|
<table>
|
|
379
369
|
<tbody>
|
|
380
370
|
<tr>
|
|
381
|
-
<td align="center" valign="top" width="
|
|
371
|
+
<td align="center" valign="top" width="33%">
|
|
382
372
|
<a href="https://github.com/southctrl">
|
|
383
373
|
<img src="https://avatars.githubusercontent.com/u/134554554?v=4?s=100" width="100px;" alt="southctrl"/>
|
|
384
374
|
<br />
|
|
@@ -388,7 +378,7 @@ For detailed usage, API references, and examples, check out our official documen
|
|
|
388
378
|
<a href="#code-pomicee" title="Code">๐ป</a>
|
|
389
379
|
<a href="#doc-pomicee" title="Documentation">๐</a>
|
|
390
380
|
</td>
|
|
391
|
-
<td align="center" valign="top" width="
|
|
381
|
+
<td align="center" valign="top" width="33%">
|
|
392
382
|
<a href="https://github.com/ToddyTheNoobDud">
|
|
393
383
|
<img src="https://avatars.githubusercontent.com/u/86982643?v=4?s=100" width="100px;" alt="ToddyTheNoobDud"/>
|
|
394
384
|
<br />
|
|
@@ -398,7 +388,7 @@ For detailed usage, API references, and examples, check out our official documen
|
|
|
398
388
|
<a href="#code-ToddyTheNoobDud" title="Code">๐ป</a>
|
|
399
389
|
<a href="#doc-ToddyTheNoobDud" title="Documentation">๐</a>
|
|
400
390
|
</td>
|
|
401
|
-
<td align="center" valign="top" width="
|
|
391
|
+
<td align="center" valign="top" width="33%">
|
|
402
392
|
<a href="https://github.com/SoulDevs">
|
|
403
393
|
<img src="https://avatars.githubusercontent.com/u/114820381?v=4" width="100px;" alt="SoulDevs"/>
|
|
404
394
|
<br />
|
|
@@ -421,7 +411,7 @@ For detailed usage, API references, and examples, check out our official documen
|
|
|
421
411
|
|
|
422
412
|
<div align="center">
|
|
423
413
|
|
|
424
|
-
We welcome contributions
|
|
414
|
+
We welcome contributions of all sizes: fixes, features, and docs improvements.
|
|
425
415
|
|
|
426
416
|
[](CONTRIBUTING.md)
|
|
427
417
|
|
|
@@ -431,7 +421,7 @@ We welcome contributions from developers of all skill levels! Whether it's addin
|
|
|
431
421
|
|
|
432
422
|
<div align="center">
|
|
433
423
|
|
|
434
|
-
Join
|
|
424
|
+
Join the community and get help quickly:
|
|
435
425
|
|
|
436
426
|
[](https://discord.gg/K4CVv84VBC)
|
|
437
427
|
[](https://github.com/ToddyTheNoobDud/AquaLink/discussions)
|
|
@@ -448,4 +438,4 @@ Join our thriving community of developers and bot creators!
|
|
|
448
438
|
|
|
449
439
|
<sub>Built with ๐ by the Aqualink Team</sub>
|
|
450
440
|
|
|
451
|
-
</div>
|
|
441
|
+
</div>
|
|
@@ -20,7 +20,11 @@ const getAgent = () => {
|
|
|
20
20
|
|
|
21
21
|
// Allow Rest module to inject its agent
|
|
22
22
|
const setSharedAgent = (agent) => {
|
|
23
|
-
if (agent
|
|
23
|
+
if (!agent) {
|
|
24
|
+
sharedAgent = null
|
|
25
|
+
return
|
|
26
|
+
}
|
|
27
|
+
if (agent && typeof agent.addRequest === 'function') {
|
|
24
28
|
sharedAgent = agent
|
|
25
29
|
}
|
|
26
30
|
}
|