aqualink 2.20.1 โ†’ 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 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&section=header&text=Aqualink&fontSize=90&fontAlignY=35&animation=twinkling&fontColor=ffffff&desc=The%20Ultimate%20Lavalink%20Wrapper&descSize=25&descAlignY=60" />
4
+ <img src="https://capsule-render.vercel.app/api?type=wave&color=0099FF&height=300&section=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
  [![NPM Downloads](https://img.shields.io/npm/dw/aqualink.svg?style=for-the-badge&color=3498db)](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&center=true&vCenter=true&width=600&lines=Powerful+Audio+Streaming+for+Discord+Bots;Optimized+for+Lavalink+v4+%26+Node.js;Industry-Leading+Performance;Easy+to+Implement%2C+Hard+to+Master" />
15
+ <img src="https://readme-typing-svg.herokuapp.com?font=Montserrat&duration=3000&pause=1000&color=0099FF&center=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>Experience crystal-clear audio with unmatched stability</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>Optimized architecture with 50% less latency than other wrappers</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>Intuitive API with extensive documentation and CJS/ESM support</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>Extendable</h4>
45
- <p>Plugin ecosystem for custom functionality and seamless integration</p>
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.13.0`** โ€ข **Choose your preferred package manager below**
52
+ **Latest Stable Release: `v2.20.1`**
53
53
 
54
54
  <details>
55
- <summary><strong>๐Ÿ“ฆ NPM (Most Popular)</strong></summary>
55
+ <summary><strong>๐Ÿ“ฆ NPM</strong></summary>
56
56
 
57
57
  ```bash
58
- # ๐ŸŽฏ Stable release (recommended for production)
58
+ # Stable release
59
59
  npm install aqualink
60
60
 
61
- # ๐Ÿšง Latest development build
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 (Fast & Reliable)</strong></summary>
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 (Lightning Fast)</strong></summary>
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 (Space Efficient)</strong></summary>
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
- ## ๐Ÿ”ฅ Feature Highlights
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, Bass Boost, Nightcore & more</p>
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>Fail-Safe System</h4>
118
- <p>Auto-reconnect & queue preservation</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>Real-time Analytics</h4>
123
- <p>Performance monitoring & insights</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>Customizable</h4>
128
- <p>Adapt to your specific needs</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/BNrPCvgrCf">
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("aqualink");
150
- const { Client, GatewayIntentBits, Events } = require("discord.js");
140
+ const { Aqua, AqualinkEvents } = require('aqualink')
141
+ const { Client, GatewayIntentBits, Events } = require('discord.js')
151
142
 
152
143
  const client = new Client({
153
- intents: [
154
- GatewayIntentBits.Guilds,
155
- GatewayIntentBits.GuildMembers,
156
- GatewayIntentBits.GuildMessages,
157
- GatewayIntentBits.MessageContent,
158
- GatewayIntentBits.GuildVoiceStates
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
- host: "127.0.0.1",
165
- password: "your_password",
166
- port: 2333,
167
- ssl: false,
168
- name: "main-node"
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
- defaultSearchPlatform: "ytsearch",
174
- restVersion: "v4",
175
- autoResume: true,
176
- infiniteReconnects: true,
177
- loadBalancer: 'LeastLoad',
178
- leaveOnEnd: false
179
- });
180
-
181
- client.aqua = aqua;
182
-
183
- client.once(Events.ClientReady, () => {
184
- client.aqua.init(client.user.id);
185
- console.log(`Logged in as ${client.user.tag}`);
186
- });
187
-
188
- client.on(Events.Raw, (d, t) => {
189
- if (d.t === "VOICE_SERVER_UPDATE" || d.t === "VOICE_STATE_UPDATE") {
190
- return client.aqua.updateVoiceState(d, t);
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
- if (message.author.bot || !message.content.startsWith("!play")) return;
197
-
198
- const query = message.content.slice(6).trim();
199
- if (!query) return message.channel.send("Please provide a song to play.");
200
-
201
- // Check if user is in a voice channel
202
- if (!message.member.voice.channel) {
203
- return message.channel.send("You need to be in a voice channel to play music!");
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
- const player = client.aqua.createConnection({
207
- guildId: message.guild.id,
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
- client.aqua.on("nodeConnect", (node) => {
240
- console.log(`Node connected: ${node.name}`);
241
- });
242
-
243
- client.aqua.on("nodeError", (node, error) => {
244
- console.log(`Node "${node.name}" encountered an error: ${error.message}.`);
245
- });
246
-
247
- client.aqua.on('trackStart', (player, track) => {
248
- const channel = client.channels.cache.get(player.textChannel);
249
- if (channel) channel.send(`Now playing: **${track.title}**`);
250
- });
251
-
252
- client.aqua.on('queueEnd', (player) => {
253
- const channel = client.channels.cache.get(player.textChannel);
254
- if (channel) channel.send('The queue has ended.');
255
- player.destroy();
256
- });
257
-
258
- client.login("YOUR_DISCORD_BOT_TOKEN");
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
- if (message.content === "!skip") {
266
- const player = client.aqua.players.get(message.guild.id);
267
- if (player) {
268
- player.skip();
269
- message.channel.send("โญ๏ธ Skipped current track!");
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
- if (message.content === "!stop") {
276
- const player = client.aqua.players.get(message.guild.id);
277
- if (player) {
278
- player.destroy();
279
- message.channel.send("โน๏ธ Stopped playback and cleared queue!");
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?ex=680e182d&is=680cc6ad&hm=3055de34e2af31a3a430f52b147a00215f8b88c8dcc9363cab5359c50ce8d75f&"/>
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 our official documentation:
305
+ For detailed usage, API references, and examples, check out the official documentation:
317
306
 
318
- [![Docs](https://img.shields.io/badge/Documentation-0099FF?style=for-the-badge&logo=readthedocs&logoColor=white)](https://aqualink-6006388d.mintlify.app)
307
+ [![Docs](https://img.shields.io/badge/Documentation-0099FF?style=for-the-badge&logo=readthedocs&logoColor=white)](https://aqualink-6006388d.mintlify.app)
319
308
 
320
309
  ๐Ÿ“Œ **Get Started Quickly**
321
310
  - Installation guide
322
311
  - API methods
323
- - Advanced features
312
+ - Events and filters
324
313
  - Troubleshooting
325
314
 
326
315
  ๐Ÿ”— Visit: **[Aqualink Docs](https://aqualink-6006388d.mintlify.app)**
327
316
 
328
- ## ๐Ÿ‘‘ Premium Bots Using Aqualink
317
+ ## ๐Ÿ‘‘ Bots Using Aqualink
329
318
 
330
- | Bot | Invite Link | Features |
331
- |-----|-------------|----------|
332
- | Kenium | [Add to Discord](https://discord.com/oauth2/authorize?client_id=1202232935311495209) | Audio streaming, Discord integration |
333
- | Soya Music | [Add to Discord](https://discord.com/oauth2/authorize?client_id=997906613082013868&permissions=281357446481&integration_type=0&scope=bot+applications.commands) | Audio streaming, Discord integration |
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 (15-band)</li>
344
- <li>Bass Boost & Bass Cut</li>
345
- <li>Nightcore & Vaporwave</li>
346
- <li>8D Audio & Rotation</li>
347
- <li>Karaoke & Channel Mixing</li>
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 Management</h4>
341
+ <h4>๐Ÿ”„ Queue & Player Control</h4>
352
342
  <ul>
353
- <li>Shuffle & Loop modes</li>
354
- <li>Queue history & navigation</li>
355
- <li>Auto playlist continuation</li>
356
- <li>Skip voting systems</li>
357
- <li>Playlist import/export</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>๐Ÿ“Š Monitoring</h4>
351
+ <h4>๐Ÿ“ก Reliability</h4>
362
352
  <ul>
363
- <li>Resource utilization</li>
364
- <li>Performance metrics</li>
365
- <li>Automatic issue detection</li>
366
- <li>Node health tracking</li>
367
- <li>Load balancing</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="50%">
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="50%">
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="80%">
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 from developers of all skill levels! Whether it's adding features, fixing bugs, or improving documentation.
414
+ We welcome contributions of all sizes: fixes, features, and docs improvements.
425
415
 
426
416
  [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-0061ff.svg?style=for-the-badge)](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 our thriving community of developers and bot creators!
424
+ Join the community and get help quickly:
435
425
 
436
426
  [![Discord Server](https://img.shields.io/badge/Discord_Server-7289da?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/K4CVv84VBC)
437
427
  [![GitHub Discussions](https://img.shields.io/badge/GitHub_Discussions-0061ff?style=for-the-badge&logo=github&logoColor=white)](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 && typeof agent.request === 'function') {
23
+ if (!agent) {
24
+ sharedAgent = null
25
+ return
26
+ }
27
+ if (agent && typeof agent.addRequest === 'function') {
24
28
  sharedAgent = agent
25
29
  }
26
30
  }