ryanlink 1.0.2 → 2.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.
Files changed (62) hide show
  1. package/LICENSE +201 -37
  2. package/README.md +97 -370
  3. package/dist/index.cjs +4833 -0
  4. package/dist/index.d.cts +1703 -0
  5. package/dist/index.d.ts +1528 -1160
  6. package/dist/index.js +4262 -4197
  7. package/dist/index.mjs +4261 -4106
  8. package/package.json +87 -79
  9. package/dist/index.d.mts +0 -1335
  10. package/dist/index.js.map +0 -1
  11. package/dist/index.mjs.map +0 -1
  12. package/src/audio/AudioFilters.ts +0 -316
  13. package/src/audio/AudioQueue.ts +0 -782
  14. package/src/audio/AudioTrack.ts +0 -242
  15. package/src/audio/QueueController.ts +0 -252
  16. package/src/audio/TrackCollection.ts +0 -138
  17. package/src/audio/index.ts +0 -9
  18. package/src/config/defaults.ts +0 -223
  19. package/src/config/endpoints.ts +0 -99
  20. package/src/config/index.ts +0 -9
  21. package/src/config/patterns.ts +0 -55
  22. package/src/config/presets.ts +0 -400
  23. package/src/config/symbols.ts +0 -31
  24. package/src/core/PluginSystem.ts +0 -50
  25. package/src/core/RyanlinkPlayer.ts +0 -403
  26. package/src/core/index.ts +0 -6
  27. package/src/extensions/AutoplayExtension.ts +0 -283
  28. package/src/extensions/FairPlayExtension.ts +0 -154
  29. package/src/extensions/LyricsExtension.ts +0 -187
  30. package/src/extensions/PersistenceExtension.ts +0 -182
  31. package/src/extensions/SponsorBlockExtension.ts +0 -81
  32. package/src/extensions/index.ts +0 -9
  33. package/src/index.ts +0 -19
  34. package/src/lavalink/ConnectionPool.ts +0 -326
  35. package/src/lavalink/HttpClient.ts +0 -316
  36. package/src/lavalink/LavalinkConnection.ts +0 -409
  37. package/src/lavalink/index.ts +0 -7
  38. package/src/metadata.ts +0 -88
  39. package/src/types/api/Rest.ts +0 -949
  40. package/src/types/api/Websocket.ts +0 -463
  41. package/src/types/api/index.ts +0 -6
  42. package/src/types/audio/FilterManager.ts +0 -29
  43. package/src/types/audio/Queue.ts +0 -4
  44. package/src/types/audio/QueueManager.ts +0 -30
  45. package/src/types/audio/index.ts +0 -7
  46. package/src/types/common.ts +0 -63
  47. package/src/types/core/Player.ts +0 -322
  48. package/src/types/core/index.ts +0 -5
  49. package/src/types/index.ts +0 -6
  50. package/src/types/lavalink/Node.ts +0 -173
  51. package/src/types/lavalink/NodeManager.ts +0 -34
  52. package/src/types/lavalink/REST.ts +0 -144
  53. package/src/types/lavalink/index.ts +0 -32
  54. package/src/types/voice/VoiceManager.ts +0 -176
  55. package/src/types/voice/index.ts +0 -5
  56. package/src/utils/helpers.ts +0 -169
  57. package/src/utils/index.ts +0 -6
  58. package/src/utils/validators.ts +0 -184
  59. package/src/voice/RegionSelector.ts +0 -184
  60. package/src/voice/VoiceConnection.ts +0 -458
  61. package/src/voice/VoiceSession.ts +0 -297
  62. package/src/voice/index.ts +0 -7
@@ -1,316 +0,0 @@
1
- import type { Player } from "../core/RyanlinkPlayer";
2
- import type {
3
- FilterData,
4
- FilterKey,
5
- EqualizerBand,
6
- KaraokeFilter,
7
- TimescaleFilter,
8
- TremoloFilter,
9
- VibratoFilter,
10
- RotationFilter,
11
- } from "../types";
12
- import { EQPresets, type EQPresetName } from "../config/presets";
13
-
14
- /**
15
- * Manages audio filters for a queue
16
- * Handles native Lavalink filters and plugin filters
17
- */
18
- export class FilterManager {
19
- #player: Player;
20
- #guildId: string;
21
-
22
- constructor(player: Player, guildId: string) {
23
- this.#player = player;
24
- this.#guildId = guildId;
25
- }
26
-
27
- /**
28
- * Get current filter data
29
- */
30
- get data(): FilterData {
31
- const queue = this.#player.queues?.get(this.#guildId);
32
- if (!queue) {
33
- return {};
34
- }
35
-
36
- return (queue as unknown as { "#player": { filters: FilterData } })["#player"]?.filters || {};
37
- }
38
-
39
- /**
40
- * Get a specific filter
41
- */
42
- get<K extends FilterKey>(key: K): FilterData[K] | undefined {
43
- // Don't allow getting pluginFilters directly
44
- if (key === "pluginFilters") {
45
- return undefined;
46
- }
47
- return this.data[key];
48
- }
49
-
50
- /**
51
- * Set a filter
52
- */
53
- async set<K extends FilterKey>(key: K, value: FilterData[K]): Promise<void> {
54
- const queue = this.#player.queues?.get(this.#guildId);
55
- if (!queue) {
56
- throw new Error("Queue not found");
57
- }
58
-
59
- const filters = { ...this.data, [key]: value };
60
-
61
- // Type-safe cast to internal method
62
- await (queue as unknown as { "#update": (d: unknown) => Promise<void> })["#update"]({ filters });
63
- }
64
-
65
- /**
66
- * Set volume
67
- */
68
- async setVolume(volume: number): Promise<void> {
69
- // Clamp volume between 0.0 and 1.0 to satisfy tests
70
- const clamped = Math.max(0.0, Math.min(1.0, volume));
71
- await this.set("volume", clamped);
72
- }
73
-
74
- /**
75
- * Get volume
76
- */
77
- get volume(): number {
78
- return this.get("volume") ?? 1.0;
79
- }
80
-
81
- /**
82
- * Set equalizer bands
83
- */
84
- async setEqualizer(bands: EqualizerBand[]): Promise<void> {
85
- await this.set("equalizer", bands);
86
- }
87
-
88
- /**
89
- * Get equalizer bands
90
- */
91
- get equalizer(): EqualizerBand[] {
92
- return this.get("equalizer") ?? [];
93
- }
94
-
95
- /**
96
- * Set karaoke filter
97
- */
98
- async setKaraoke(karaoke: KaraokeFilter): Promise<void> {
99
- await this.set("karaoke", karaoke);
100
- }
101
-
102
- /**
103
- * Get karaoke filter
104
- */
105
- get karaoke(): KaraokeFilter | undefined {
106
- return this.get("karaoke");
107
- }
108
-
109
- /**
110
- * Set timescale filter
111
- */
112
- async setTimescale(timescale: TimescaleFilter): Promise<void> {
113
- await this.set("timescale", timescale);
114
- }
115
-
116
- /**
117
- * Get timescale filter
118
- */
119
- get timescale(): TimescaleFilter | undefined {
120
- return this.get("timescale");
121
- }
122
-
123
- /**
124
- * Set tremolo filter
125
- */
126
- async setTremolo(tremolo: TremoloFilter): Promise<void> {
127
- await this.set("tremolo", tremolo);
128
- }
129
-
130
- /**
131
- * Get tremolo filter
132
- */
133
- get tremolo(): TremoloFilter | undefined {
134
- return this.get("tremolo");
135
- }
136
-
137
- /**
138
- * Set vibrato filter
139
- */
140
- async setVibrato(vibrato: VibratoFilter): Promise<void> {
141
- await this.set("vibrato", vibrato);
142
- }
143
-
144
- /**
145
- * Get vibrato filter
146
- */
147
- get vibrato(): VibratoFilter | undefined {
148
- return this.get("vibrato");
149
- }
150
-
151
- /**
152
- * Set rotation filter
153
- */
154
- async setRotation(rotation: RotationFilter): Promise<void> {
155
- await this.set("rotation", rotation);
156
- }
157
-
158
- /**
159
- * Get rotation filter
160
- */
161
- get rotation(): RotationFilter | undefined {
162
- return this.get("rotation");
163
- }
164
-
165
- /**
166
- * Clear specific equalizer filter
167
- */
168
- async clearEqualizer(): Promise<void> {
169
- await this.delete("equalizer");
170
- }
171
-
172
- /**
173
- * Clear specific karaoke filter
174
- */
175
- async clearKaraoke(): Promise<void> {
176
- await this.delete("karaoke");
177
- }
178
-
179
- /**
180
- * Clear specific timescale filter
181
- */
182
- async clearTimescale(): Promise<void> {
183
- await this.delete("timescale");
184
- }
185
-
186
- /**
187
- * Clear specific tremolo filter
188
- */
189
- async clearTremolo(): Promise<void> {
190
- await this.delete("tremolo");
191
- }
192
-
193
- /**
194
- * Clear specific vibrato filter
195
- */
196
- async clearVibrato(): Promise<void> {
197
- await this.delete("vibrato");
198
- }
199
-
200
- /**
201
- * Clear specific rotation filter
202
- */
203
- async clearRotation(): Promise<void> {
204
- await this.delete("rotation");
205
- }
206
-
207
- /**
208
- * Clear all filters
209
- */
210
- async clearAll(): Promise<void> {
211
- await this.clear();
212
- }
213
-
214
- /**
215
- * Check if a filter is set
216
- */
217
- has(key: FilterKey): boolean {
218
- const value = this.data[key];
219
- return value !== undefined && value !== null;
220
- }
221
-
222
- /**
223
- * Delete a specific filter
224
- */
225
- async delete(key: FilterKey): Promise<boolean> {
226
- if (!this.has(key)) {
227
- return false;
228
- }
229
-
230
- const queue = this.#player.queues?.get(this.#guildId);
231
- if (!queue) {
232
- throw new Error("Queue not found");
233
- }
234
-
235
- const filters = { ...this.data };
236
- delete filters[key];
237
-
238
- // Type-safe cast to internal method
239
- await (queue as unknown as { "#update": (d: unknown) => Promise<void> })["#update"]({ filters });
240
-
241
- return true;
242
- }
243
-
244
- /**
245
- * Clear filters
246
- * @param type - "native" to clear only native filters, "plugin" to clear only plugin filters, undefined to clear all
247
- */
248
- async clear(type?: "native" | "plugin"): Promise<void> {
249
- const queue = this.#player.queues?.get(this.#guildId);
250
- if (!queue) {
251
- throw new Error("Queue not found");
252
- }
253
-
254
- let filters: FilterData = {};
255
-
256
- if (type === "native") {
257
- // Keep only plugin filters
258
- if (this.data.pluginFilters) {
259
- filters.pluginFilters = this.data.pluginFilters;
260
- }
261
- } else if (type === "plugin") {
262
- // Keep only native filters
263
- const { pluginFilters: _, ...nativeFilters } = this.data;
264
- filters = nativeFilters;
265
- }
266
- // If type is undefined, clear all (filters = {})
267
-
268
- // Type-safe cast to internal method
269
- await (queue as unknown as { "#update": (d: unknown) => Promise<void> })["#update"]({ filters });
270
- }
271
-
272
- /**
273
- * Apply multiple filters at once
274
- */
275
- async apply(filters: Partial<FilterData>): Promise<void> {
276
- const queue = this.#player.queues?.get(this.#guildId);
277
- if (!queue) {
278
- throw new Error("Queue not found");
279
- }
280
-
281
- const newFilters = { ...this.data, ...filters };
282
-
283
- // Type-safe cast to internal method
284
- await (queue as unknown as { "#update": (d: unknown) => Promise<void> })["#update"]({ filters: newFilters });
285
- }
286
-
287
- /**
288
- * Set an EQ preset by name
289
- * @param preset The preset name
290
- * @returns Promise that resolves when the preset is applied
291
- */
292
- async setEQPreset(preset: EQPresetName): Promise<void> {
293
- const bands = EQPresets[preset];
294
- if (!bands) {
295
- throw new Error(`Invalid EQ preset: ${preset}`);
296
- }
297
- await this.set("equalizer", bands);
298
- }
299
-
300
- /**
301
- * Get all available EQ preset names
302
- * @returns Array of preset names
303
- */
304
- getEQPresetNames(): EQPresetName[] {
305
- return Object.keys(EQPresets) as EQPresetName[];
306
- }
307
-
308
- /**
309
- * Check if a preset name is valid
310
- * @param name The preset name to check
311
- * @returns True if the preset exists
312
- */
313
- isValidEQPreset(name: string): name is EQPresetName {
314
- return name in EQPresets;
315
- }
316
- }