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
@@ -0,0 +1,1703 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import { ReadableStream } from 'node:stream/web';
3
+
4
+ declare enum DebugEvents {
5
+ SetSponsorBlock = "SetSponsorBlock",
6
+ DeleteSponsorBlock = "DeleteSponsorBlock",
7
+ TrackEndReplaced = "TrackEndReplaced",
8
+ AutoplayExecution = "AutoplayExecution",
9
+ AutoplayNoSongsAdded = "AutoplayNoSongsAdded",
10
+ AutoplayThresholdSpamLimiter = "AutoplayThresholdSpamLimiter",
11
+ TriggerQueueEmptyInterval = "TriggerQueueEmptyInterval",
12
+ QueueEnded = "QueueEnded",
13
+ TrackStartNewSongsOnly = "TrackStartNewSongsOnly",
14
+ TrackStartNoTrack = "TrackStartNoTrack",
15
+ ResumingFetchingError = "ResumingFetchingError",
16
+ PlayerUpdateNoPlayer = "PlayerUpdateNoPlayer",
17
+ PlayerUpdateFilterFixApply = "PlayerUpdateFilterFixApply",
18
+ PlayerUpdateSuccess = "PlayerUpdateSuccess",
19
+ HeartBeatTriggered = "HeartBeatTriggered",
20
+ NoSocketOnDestroy = "NoSocketOnDestroy",
21
+ SocketCleanupError = "SocketCleanupError",
22
+ SocketTerminateHeartBeatTimeout = "SocketTerminateHeartBeatTimeout",
23
+ TryingConnectWhileConnected = "TryingConnectWhileConnected",
24
+ SearchNothingFound = "SearchNothingFound",
25
+ ValidatingBlacklistLinks = "ValidatingBlacklistLinks",
26
+ ValidatingWhitelistLinks = "ValidatingWhitelistLinks",
27
+ TrackErrorMaxTracksErroredPerTime = "TrackErrorMaxTracksErroredPerTime",
28
+ TrackStuckMaxTracksErroredPerTime = "TrackStuckMaxTracksErroredPerTime",
29
+ PlayerDestroyingSomewhereElse = "PlayerDestroyingSomewhereElse",
30
+ PlayerCreateNodeNotFound = "PlayerCreateNodeNotFound",
31
+ PlayerPlayQueueEmptyTimeoutClear = "PlayerPlayQueueEmptyTimeoutClear",
32
+ PlayerPlayWithTrackReplace = "PlayerPlayWithTrackReplace",
33
+ PlayerPlayUnresolvedTrack = "PlayerPlayUnresolvedTrack",
34
+ PlayerPlayUnresolvedTrackFailed = "PlayerPlayUnresolvedTrackFailed",
35
+ PlayerVolumeAsFilter = "PlayerVolumeAsFilter",
36
+ BandcampSearchLokalEngine = "BandcampSearchLokalEngine",
37
+ PlayerChangeNode = "PlayerChangeNode",
38
+ BuildTrackError = "BuildTrackError",
39
+ TransformRequesterFunctionFailed = "TransformRequesterFunctionFailed",
40
+ GetClosestTrackFailed = "GetClosestTrackFailed",
41
+ PlayerDeleteInsteadOfDestroy = "PlayerDeleteInsteadOfDestroy",
42
+ FailedToConnectToNodes = "FailedToConnectToNodes",
43
+ NoAudioDebug = "NoAudioDebug",
44
+ PlayerAutoReconnect = "PlayerAutoReconnect",
45
+ PlayerDestroyFail = "PlayerDestroyFail",
46
+ PlayerChangeNodeFailNoEligibleNode = "PlayerChangeNodeFailNoEligibleNode",
47
+ PlayerChangeNodeFail = "PlayerChangeNodeFail"
48
+ }
49
+ declare enum DestroyReasons {
50
+ QueueEmpty = "QueueEmpty",
51
+ NodeDestroy = "NodeDestroy",
52
+ NodeDeleted = "NodeDeleted",
53
+ NodeNoVoice = "NodeNoVoice",
54
+ NodeReconnectFail = "NodeReconnectFail",
55
+ Disconnected = "Disconnected",
56
+ PlayerReconnectFail = "PlayerReconnectFail",
57
+ PlayerChangeNodeFail = "PlayerChangeNodeFail",
58
+ PlayerChangeNodeFailNoEligibleNode = "PlayerChangeNodeFailNoEligibleNode",
59
+ ChannelDeleted = "ChannelDeleted",
60
+ DisconnectAllNodes = "DisconnectAllNodes",
61
+ ReconnectAllNodes = "ReconnectAllNodes",
62
+ TrackErrorMaxTracksErroredPerTime = "TrackErrorMaxTracksErroredPerTime",
63
+ TrackStuckMaxTracksErroredPerTime = "TrackStuckMaxTracksErroredPerTime"
64
+ }
65
+ declare enum DisconnectReasons {
66
+ Disconnected = "Disconnected",
67
+ DisconnectAllNodes = "DisconnectAllNodes"
68
+ }
69
+ declare const validSponsorBlocks: string[];
70
+ declare const audioOutputsData: Record<AudioOutputs, ChannelMixFilter>;
71
+ declare const EQList: {
72
+ BassboostEarrape: EQBand[];
73
+ BassboostHigh: EQBand[];
74
+ BassboostMedium: EQBand[];
75
+ BassboostLow: EQBand[];
76
+ BetterMusic: EQBand[];
77
+ Rock: EQBand[];
78
+ Classic: EQBand[];
79
+ Pop: EQBand[];
80
+ Electronic: EQBand[];
81
+ FullSound: EQBand[];
82
+ Gaming: EQBand[];
83
+ };
84
+ declare const RecommendationsStrings: {
85
+ highCPULoad: (cpuLoad: number) => string;
86
+ highSystemLoad: (systemLoad: number) => string;
87
+ highMemoryUsage: (memoryUsagePercent: number) => string;
88
+ frameDeficit: (frameDeficit: number) => string;
89
+ highLatency: (ping: number) => string;
90
+ nodeRestart: string;
91
+ highPlayercount: (players: number) => string;
92
+ nodeOffline: string;
93
+ checkConnectivity: string;
94
+ };
95
+ declare const NodeLinkExclusiveEvents: NodeLinkEventTypes[];
96
+
97
+ interface StoredQueue {
98
+ current: Track | null;
99
+ previous: Track[];
100
+ tracks: (Track | UnresolvedTrack)[];
101
+ }
102
+ interface QueueStoreManager {
103
+ get: (guildId: string) => Awaitable<StoredQueue | string | undefined>;
104
+ set: (guildId: string, value: StoredQueue | string) => Awaitable<void | boolean>;
105
+ delete: (guildId: string) => Awaitable<void | boolean>;
106
+ stringify: (value: StoredQueue | string) => Awaitable<StoredQueue | string>;
107
+ parse: (value: StoredQueue | string) => Awaitable<Partial<StoredQueue>>;
108
+ }
109
+ interface ManagerQueueOptions {
110
+ maxPreviousTracks?: number;
111
+ queueStore?: QueueStoreManager;
112
+ queueChangesWatcher?: QueueChangesWatcher;
113
+ }
114
+ interface QueueChangesWatcher {
115
+ tracksAdd: (guildId: string, tracks: (Track | UnresolvedTrack)[], position: number, oldStoredQueue: StoredQueue, newStoredQueue: StoredQueue) => void;
116
+ tracksRemoved: (guildId: string, tracks: (Track | UnresolvedTrack)[], position: number | number[], oldStoredQueue: StoredQueue, newStoredQueue: StoredQueue) => void;
117
+ shuffled: (guildId: string, oldStoredQueue: StoredQueue, newStoredQueue: StoredQueue) => void;
118
+ }
119
+
120
+ type DestroyReasonsType = keyof typeof DestroyReasons | string;
121
+ type DisconnectReasonsType = keyof typeof DisconnectReasons | string;
122
+ interface PlayerJson {
123
+ guildId: string;
124
+ options: PlayerOptions;
125
+ voiceChannelId: string;
126
+ textChannelId?: string;
127
+ position: number;
128
+ lastPosition: number;
129
+ lastPositionChange: number | null;
130
+ volume: number;
131
+ internalVolume: number;
132
+ repeatMode: RepeatMode;
133
+ paused: boolean;
134
+ playing: boolean;
135
+ createdTimeStamp?: number;
136
+ filters: FilterData;
137
+ ping: {
138
+ ws: number;
139
+ node: number;
140
+ };
141
+ equalizer: EQBand[];
142
+ nodeId?: string;
143
+ nodeSessionId?: string;
144
+ queue?: StoredQueue;
145
+ }
146
+ type RepeatMode = 'queue' | 'track' | 'off';
147
+ interface PlayerOptions {
148
+ guildId: string;
149
+ voiceChannelId: string;
150
+ textChannelId?: string;
151
+ volume?: number;
152
+ vcRegion?: string;
153
+ selfDeaf?: boolean;
154
+ selfMute?: boolean;
155
+ node?: RyanlinkNode | string;
156
+ instaFixFilter?: boolean;
157
+ autoPauseOnMute?: boolean;
158
+ applyVolumeAsFilter?: boolean;
159
+ customData?: anyObject;
160
+ }
161
+ type anyObject = {
162
+ [key: string | number]: string | number | null | anyObject;
163
+ };
164
+ interface BasePlayOptions {
165
+ position?: number;
166
+ endTime?: number;
167
+ paused?: boolean;
168
+ volume?: number;
169
+ filters?: Partial<AudioFilters>;
170
+ voice?: VoiceConnectionOptions;
171
+ }
172
+ interface PlayConfiguration extends BasePlayOptions {
173
+ track?: {
174
+ encoded?: Base64 | null;
175
+ identifier?: string;
176
+ userData?: anyObject;
177
+ requester?: unknown;
178
+ audioTrackId?: string;
179
+ };
180
+ nextTrack?: {
181
+ encoded?: Base64 | null;
182
+ userData?: anyObject;
183
+ };
184
+ }
185
+ interface PlayOptions extends PlayConfiguration {
186
+ noReplace?: boolean;
187
+ clientTrack?: (Track | UnresolvedTrack) & {
188
+ audioTrackId?: string;
189
+ };
190
+ }
191
+
192
+ type CoreSourceNames = 'youtube' | 'youtubemusic' | 'soundcloud' | 'bandcamp' | 'twitch' | 'jiosaavn';
193
+ type AudioSourceNames = 'deezer' | 'spotify' | 'applemusic' | 'yandexmusic' | 'flowery-tts' | 'vkmusic' | 'tidal' | 'qobuz' | 'pandora' | CoreSourceNames;
194
+ interface AudioTrackInfo {
195
+ identifier: string;
196
+ title: string;
197
+ author: string;
198
+ length: number;
199
+ artworkUrl: string | null;
200
+ uri: string;
201
+ sourceName: AudioSourceNames;
202
+ isSeekable: boolean;
203
+ isStream: boolean;
204
+ isrc: string | null;
205
+ }
206
+ interface TrackInfo {
207
+ identifier: string;
208
+ title: string;
209
+ author: string;
210
+ duration: number;
211
+ artworkUrl: string | null;
212
+ uri: string;
213
+ sourceName: AudioSourceNames;
214
+ isSeekable: boolean;
215
+ isStream: boolean;
216
+ isrc: string | null;
217
+ }
218
+ interface PluginInfo {
219
+ type?: 'album' | 'playlist' | 'artist' | 'recommendations' | string;
220
+ albumName?: string;
221
+ albumUrl?: string;
222
+ albumArtUrl?: string;
223
+ artistUrl?: string;
224
+ artistArtworkUrl?: string;
225
+ previewUrl?: string;
226
+ isPreview?: boolean;
227
+ totalTracks?: number;
228
+ identifier?: string;
229
+ artworkUrl?: string;
230
+ author?: string;
231
+ url?: string;
232
+ uri?: string;
233
+ clientData?: {
234
+ previousTrack?: boolean;
235
+ [key: string]: any;
236
+ };
237
+ }
238
+ interface AudioTrack {
239
+ encoded?: Base64;
240
+ info: AudioTrackInfo;
241
+ pluginInfo: Partial<PluginInfo>;
242
+ userData?: anyObject;
243
+ }
244
+ interface TrackRequester {
245
+ }
246
+ interface Track {
247
+ encoded?: Base64;
248
+ info: TrackInfo;
249
+ pluginInfo: Partial<PluginInfo>;
250
+ requester?: TrackRequester;
251
+ userData?: anyObject;
252
+ }
253
+ interface UnresolvedTrackInfo extends Partial<TrackInfo> {
254
+ title: string;
255
+ }
256
+ interface UnresolvedQuery extends UnresolvedTrackInfo {
257
+ encoded?: Base64;
258
+ }
259
+ interface UnresolvedTrack {
260
+ resolve: (player: Player) => Promise<void>;
261
+ encoded?: Base64;
262
+ info: UnresolvedTrackInfo;
263
+ pluginInfo: Partial<PluginInfo>;
264
+ userData?: anyObject;
265
+ requester?: TrackRequester;
266
+ }
267
+
268
+ declare const AudioTrackSymbol: unique symbol;
269
+ declare const UnresolvedAudioTrackSymbol: unique symbol;
270
+ declare const AudioQueueSymbol: unique symbol;
271
+ declare const AudioNodeSymbol: unique symbol;
272
+ declare function parseConnectionUrl(connectionUrl: string): {
273
+ authorization: string;
274
+ nodeType: NodeTypes;
275
+ id: string;
276
+ host: string;
277
+ port: number;
278
+ };
279
+ declare class RyanlinkUtils {
280
+ RyanlinkManager: RyanlinkManager | undefined;
281
+ constructor(RyanlinkManager?: RyanlinkManager);
282
+ buildPluginInfo(data: any, clientData?: any): any;
283
+ buildTrack(data: AudioTrack | Track, requester: unknown): Track;
284
+ buildUnresolvedTrack(query: UnresolvedQuery | UnresolvedTrack, requester: unknown): UnresolvedTrack;
285
+ isNode(data: RyanlinkNode): boolean;
286
+ getTransformedRequester(requester: unknown): unknown;
287
+ isNodeOptions(data: NodeConfiguration): boolean;
288
+ isNotBrokenTrack(data: Track | UnresolvedTrack, minDuration?: number): data is Track;
289
+ isTrack(data: Track | UnresolvedTrack): data is Track;
290
+ isUnresolvedTrack(data: UnresolvedTrack | Track): data is UnresolvedTrack;
291
+ isUnresolvedTrackQuery(data: UnresolvedQuery): boolean;
292
+ getClosestTrack(data: UnresolvedTrack, player: Player): Promise<Track | undefined>;
293
+ validateQueryString(node: RyanlinkNode, queryString: string, sourceString?: SearchPlatform): void;
294
+ findSourceOfQuery(queryString: string): SearchPlatform;
295
+ extractSourceOfQuery<T extends {
296
+ query: string;
297
+ source?: string;
298
+ }>(searchQuery: T): T;
299
+ typedLowerCase<T extends unknown>(input: T): T;
300
+ transformQuery(query: SearchQuery): {
301
+ query: string;
302
+ extraQueryUrlParams: any;
303
+ source: SearchPlatform;
304
+ };
305
+ transformAudioSearchQuery(query: AudioSearchQuery): {
306
+ query: never;
307
+ types: any[];
308
+ extraQueryUrlParams: any;
309
+ source: SearchPlatform;
310
+ } | {
311
+ query: string;
312
+ types: string[];
313
+ source: "ytsearch" | "ytmsearch" | "scsearch" | "bcsearch" | "spsearch" | "sprec" | "amsearch" | "dzsearch" | "dzisrc" | "dzrec" | "ymsearch" | "ymrec" | "vksearch" | "vkrec" | "tdsearch" | "tdrec" | "qbsearch" | "qbisrc" | "qbrec" | "pdsearch" | "pdisrc" | "pdrec" | "ftts" | "speak" | "phsearch" | "pornhub" | "porn" | "tts" | "jssearch" | "jsrec" | "admsearch" | "admrec" | "shsearch" | "igsearch" | "blsearch" | "lfsearch" | "amzsearch" | "amzrec" | "gnsearch" | "gnrec" | "local" | "http" | "https" | "link" | "uri" | "youtube" | "yt" | "youtube music" | "youtubemusic" | "ytm" | "musicyoutube" | "music youtube" | "soundcloud" | "sc" | "am" | "apple music" | "applemusic" | "apple" | "musicapple" | "music apple" | "sp" | "spsuggestion" | "spotify" | "spotify.com" | "spotifycom" | "dz" | "deezer" | "yandex" | "yandex music" | "yandexmusic" | "vk" | "vk music" | "vkmusic" | "tidal" | "tidal music" | "qobuz" | "pandora" | "pd" | "pandora music" | "pandoramusic" | "flowerytts" | "flowery" | "flowery.tts" | "bandcamp" | "bc" | "js" | "jiosaavn" | "td" | "audiomack" | "adm" | "shazam" | "sh" | "instagram" | "ig" | "bilibili" | "bl" | "lastfm" | "last.fm" | "lf" | "amazon music" | "amazonmusic" | "amz" | "gaana" | "gn";
314
+ };
315
+ validateSourceString(node: RyanlinkNode, sourceString: SearchPlatform): void;
316
+ }
317
+ interface MiniMap<K, V> extends Map<K, V> {
318
+ constructor: MiniMapConstructor;
319
+ }
320
+ declare class MiniMap<K, V> extends Map<K, V> {
321
+ constructor(data?: [K, V][]);
322
+ filter<K2 extends K>(fn: (value: V, key: K, miniMap: this) => key is K2): MiniMap<K2, V>;
323
+ filter<V2 extends V>(fn: (value: V, key: K, miniMap: this) => value is V2): MiniMap<K, V2>;
324
+ filter(fn: (value: V, key: K, miniMap: this) => boolean): MiniMap<K, V>;
325
+ filter<This, K2 extends K>(fn: (this: This, value: V, key: K, miniMap: this) => key is K2, thisArg: This): MiniMap<K2, V>;
326
+ filter<This, V2 extends V>(fn: (this: This, value: V, key: K, miniMap: this) => value is V2, thisArg: This): MiniMap<K, V2>;
327
+ filter<This>(fn: (this: This, value: V, key: K, miniMap: this) => boolean, thisArg: This): MiniMap<K, V>;
328
+ toJSON(): [K, V][];
329
+ map<T>(fn: (value: V, key: K, miniMap: this) => T): T[];
330
+ map<This, T>(fn: (this: This, value: V, key: K, miniMap: this) => T, thisArg: This): T[];
331
+ }
332
+ declare function queueTrackEnd(player: Player, dontShiftQueue?: boolean): Promise<Track>;
333
+ declare function safeStringify(obj: any, padding?: number): string;
334
+
335
+ type Opaque<T, K> = T & {
336
+ __opaque__: K;
337
+ };
338
+ type IntegerNumber = Opaque<number, 'Int'>;
339
+ type FloatNumber = Opaque<number, 'Float'>;
340
+ type SourceSearchPlatformBase = 'spsearch' | 'sprec' | 'amsearch' | 'dzsearch' | 'dzisrc' | 'dzrec' | 'ymsearch' | 'ymrec' | 'vksearch' | 'vkrec' | 'tdsearch' | 'tdrec' | 'qbsearch' | 'qbisrc' | 'qbrec' | 'pdsearch' | 'pdisrc' | 'pdrec';
341
+ type SourceSearchPlatform = SourceSearchPlatformBase | 'ftts';
342
+ type JioSaavnSearchPlatform = 'jssearch' | 'jsrec';
343
+ type DuncteSearchPlatform = 'speak' | 'phsearch' | 'pornhub' | 'porn' | 'tts';
344
+ type ExtendedSearchPlatform = 'admsearch' | 'admrec' | 'shsearch' | 'igsearch' | 'blsearch' | 'lfsearch' | 'amzsearch' | 'amzrec' | 'gnsearch' | 'gnrec';
345
+ type AudioClientSearchPlatform = 'bcsearch';
346
+ type AudioClientSearchPlatformResolve = 'bandcamp' | 'bc';
347
+ type RyanlinkSearchPlatform = 'ytsearch' | 'ytmsearch' | 'scsearch' | 'bcsearch' | SourceSearchPlatform | DuncteSearchPlatform | JioSaavnSearchPlatform | ExtendedSearchPlatform | AudioClientSearchPlatform;
348
+ type ClientCustomSearchPlatformUtils = 'local' | 'http' | 'https' | 'link' | 'uri';
349
+ type ClientSearchPlatform = ClientCustomSearchPlatformUtils | 'youtube' | 'yt' | 'youtube music' | 'youtubemusic' | 'ytm' | 'musicyoutube' | 'music youtube' | 'soundcloud' | 'sc' | 'am' | 'apple music' | 'applemusic' | 'apple' | 'musicapple' | 'music apple' | 'sp' | 'spsuggestion' | 'spotify' | 'spotify.com' | 'spotifycom' | 'dz' | 'deezer' | 'yandex' | 'yandex music' | 'yandexmusic' | 'vk' | 'vk music' | 'vkmusic' | 'tidal' | 'tidal music' | 'qobuz' | 'pandora' | 'pd' | 'pandora music' | 'pandoramusic' | 'flowerytts' | 'flowery' | 'flowery.tts' | AudioClientSearchPlatformResolve | AudioClientSearchPlatform | 'js' | 'jiosaavn' | 'td' | 'tidal' | 'tdrec' | 'audiomack' | 'adm' | 'admsearch' | 'shazam' | 'sh' | 'shsearch' | 'instagram' | 'ig' | 'igsearch' | 'bilibili' | 'bl' | 'blsearch' | 'lastfm' | 'last.fm' | 'lf' | 'lfsearch' | 'amazon music' | 'amazonmusic' | 'amz' | 'amzsearch' | 'gaana' | 'gn' | 'gnsearch' | 'td' | 'tidal' | 'tdrec';
350
+ type SearchPlatform = RyanlinkSearchPlatform | ClientSearchPlatform;
351
+ type SourcesRegex = 'YoutubeRegex' | 'YoutubeMusicRegex' | 'SoundCloudRegex' | 'SoundCloudMobileRegex' | 'DeezerTrackRegex' | 'DeezerArtistRegex' | 'DeezerEpisodeRegex' | 'DeezerMixesRegex' | 'DeezerPageLinkRegex' | 'DeezerPlaylistRegex' | 'DeezerAlbumRegex' | 'AllDeezerRegex' | 'AllDeezerRegexWithoutPageLink' | 'SpotifySongRegex' | 'SpotifyPlaylistRegex' | 'SpotifyArtistRegex' | 'SpotifyEpisodeRegex' | 'SpotifyShowRegex' | 'SpotifyAlbumRegex' | 'AllSpotifyRegex' | 'mp3Url' | 'm3uUrl' | 'm3u8Url' | 'mp4Url' | 'm4aUrl' | 'wavUrl' | 'aacpUrl' | 'tiktok' | 'mixcloud' | 'musicYandex' | 'radiohost' | 'bandcamp' | 'jiosaavn' | 'appleMusic' | 'tidal' | 'PandoraTrackRegex' | 'PandoraAlbumRegex' | 'PandoraArtistRegex' | 'PandoraPlaylistRegex' | 'AllPandoraRegex' | 'TwitchTv' | 'vimeo';
352
+ interface PlaylistInfo {
353
+ name: string;
354
+ title: string;
355
+ author?: string;
356
+ thumbnail?: string;
357
+ uri?: string;
358
+ selectedTrack: Track | null;
359
+ duration: number;
360
+ }
361
+ interface SearchResult {
362
+ loadType: LoadTypes;
363
+ exception: Exception | null;
364
+ pluginInfo: PluginInfo;
365
+ playlist: PlaylistInfo | null;
366
+ tracks: Track[];
367
+ }
368
+ interface UnresolvedSearchResult {
369
+ loadType: LoadTypes;
370
+ exception: Exception | null;
371
+ pluginInfo: PluginInfo;
372
+ playlist: PlaylistInfo | null;
373
+ tracks: UnresolvedTrack[];
374
+ }
375
+ interface MiniMapConstructor {
376
+ new (): MiniMap<unknown, unknown>;
377
+ new <K, V>(entries?: ReadonlyArray<readonly [K, V]> | null): MiniMap<K, V>;
378
+ new <K, V>(iterable: Iterable<readonly [K, V]>): MiniMap<K, V>;
379
+ readonly prototype: MiniMap<unknown, unknown>;
380
+ readonly [Symbol.species]: MiniMapConstructor;
381
+ }
382
+ type PlayerEvents = TrackStartEvent | TrackEndEvent | TrackStuckEvent | TrackExceptionEvent | WebSocketClosedEvent | SponsorBlockSegmentEvents | LyricsEvent;
383
+ type Severity = 'COMMON' | 'SUSPICIOUS' | 'FAULT';
384
+ interface Exception {
385
+ severity: Severity;
386
+ error?: Error;
387
+ message: string;
388
+ cause: string;
389
+ causeStackTrace: string;
390
+ }
391
+ interface PlayerEvent {
392
+ op: 'event';
393
+ type: PlayerEventType;
394
+ guildId: string;
395
+ }
396
+ interface TrackStartEvent extends PlayerEvent {
397
+ type: 'TrackStartEvent';
398
+ track: AudioTrack;
399
+ }
400
+ interface TrackEndEvent extends PlayerEvent {
401
+ type: 'TrackEndEvent';
402
+ track: AudioTrack;
403
+ reason: TrackEndReason;
404
+ }
405
+ interface TrackExceptionEvent extends PlayerEvent {
406
+ type: 'TrackExceptionEvent';
407
+ exception?: Exception;
408
+ track: AudioTrack;
409
+ error: string;
410
+ }
411
+ interface TrackStuckEvent extends PlayerEvent {
412
+ type: 'TrackStuckEvent';
413
+ thresholdMs: number;
414
+ track: AudioTrack;
415
+ }
416
+ interface WebSocketClosedEvent extends PlayerEvent {
417
+ type: 'WebSocketClosedEvent';
418
+ code: number;
419
+ byRemote: boolean;
420
+ reason: string;
421
+ }
422
+ type SponsorBlockSegmentEvents = SponsorBlockSegmentSkipped | SponsorBlockSegmentsLoaded | SponsorBlockChapterStarted | SponsorBlockChaptersLoaded;
423
+ type SponsorBlockSegmentEventType = 'SegmentSkipped' | 'SegmentsLoaded' | 'ChaptersLoaded' | 'ChapterStarted';
424
+ interface SponsorBlockSegmentsLoaded extends PlayerEvent {
425
+ type: 'SegmentsLoaded';
426
+ segments: {
427
+ category: string;
428
+ start: number;
429
+ end: number;
430
+ }[];
431
+ }
432
+ interface SponsorBlockSegmentSkipped extends PlayerEvent {
433
+ type: 'SegmentSkipped';
434
+ segment: {
435
+ category: string;
436
+ start: number;
437
+ end: number;
438
+ };
439
+ }
440
+ interface SponsorBlockChapterStarted extends PlayerEvent {
441
+ type: 'ChapterStarted';
442
+ chapter: {
443
+ name: string;
444
+ start: number;
445
+ end: number;
446
+ duration: number;
447
+ };
448
+ }
449
+ interface SponsorBlockChaptersLoaded extends PlayerEvent {
450
+ type: 'ChaptersLoaded';
451
+ chapters: {
452
+ name: string;
453
+ start: number;
454
+ end: number;
455
+ duration: number;
456
+ }[];
457
+ }
458
+ type LyricsEvent = LyricsFoundEvent | LyricsNotFoundEvent | LyricsLineEvent;
459
+ type LyricsEventType = 'LyricsFoundEvent' | 'LyricsNotFoundEvent' | 'LyricsLineEvent';
460
+ interface LyricsFoundEvent extends PlayerEvent {
461
+ type: 'LyricsFoundEvent';
462
+ guildId: string;
463
+ lyrics: LyricsResult;
464
+ }
465
+ interface LyricsNotFoundEvent extends PlayerEvent {
466
+ type: 'LyricsNotFoundEvent';
467
+ guildId: string;
468
+ }
469
+ interface LyricsLineEvent extends PlayerEvent {
470
+ type: 'LyricsLineEvent';
471
+ guildId: string;
472
+ lineIndex: number;
473
+ line: LyricsLine;
474
+ skipped: boolean;
475
+ }
476
+ type LoadTypes = 'track' | 'playlist' | 'search' | 'error' | 'empty';
477
+ type State = 'CONNECTED' | 'CONNECTING' | 'DISCONNECTED' | 'DISCONNECTING' | 'DESTROYING';
478
+ type PlayerEventType = 'TrackStartEvent' | 'TrackEndEvent' | 'TrackExceptionEvent' | 'TrackStuckEvent' | 'WebSocketClosedEvent' | SponsorBlockSegmentEventType | LyricsEventType;
479
+ type TrackEndReason = 'finished' | 'loadFailed' | 'stopped' | 'replaced' | 'cleanup';
480
+ interface InvalidRestRequest {
481
+ timestamp: number;
482
+ status: number;
483
+ error: string;
484
+ message?: string;
485
+ trace?: unknown;
486
+ path: string;
487
+ }
488
+ interface VoiceConnectionState {
489
+ token: string;
490
+ endpoint: string;
491
+ sessionId: string;
492
+ channelId?: string;
493
+ connected?: boolean;
494
+ ping?: number;
495
+ }
496
+ type VoiceConnectionOptions = Omit<VoiceConnectionState, 'connected' | 'ping'>;
497
+ interface FailingAddress {
498
+ failingAddress: string;
499
+ failingTimestamp: number;
500
+ failingTime: string;
501
+ }
502
+ type RoutePlannerTypes = 'RotatingIpRoutePlanner' | 'NanoIpRoutePlanner' | 'RotatingNanoIpRoutePlanner' | 'BalancingIpRoutePlanner';
503
+ interface RoutePlanner {
504
+ class?: RoutePlannerTypes;
505
+ details?: {
506
+ ipBlock: {
507
+ type: 'Inet4Address' | 'Inet6Address';
508
+ size: string;
509
+ };
510
+ failingAddresses: FailingAddress[];
511
+ rotateIndex?: string;
512
+ ipIndex?: string;
513
+ currentAddress?: string;
514
+ currentAddressIndex?: string;
515
+ blockIndex?: string;
516
+ };
517
+ }
518
+ interface Session {
519
+ resuming: boolean;
520
+ timeout: number;
521
+ }
522
+ interface GuildShardPayload {
523
+ op: number;
524
+ d: {
525
+ guild_id: string;
526
+ channel_id: string | null;
527
+ self_mute: boolean;
528
+ self_deaf: boolean;
529
+ };
530
+ }
531
+ interface PlayerUpdateInfo {
532
+ guildId: string;
533
+ playerOptions: PlayConfiguration;
534
+ noReplace?: boolean;
535
+ }
536
+ interface AudioPlayerState {
537
+ guildId: string;
538
+ track?: AudioTrack;
539
+ volume: number;
540
+ paused: boolean;
541
+ voice: VoiceConnectionState;
542
+ filters: Partial<AudioFilters>;
543
+ state: {
544
+ time: number;
545
+ position: number;
546
+ connected: boolean;
547
+ ping: number;
548
+ };
549
+ }
550
+ interface ChannelDeletePacket {
551
+ t: 'CHANNEL_DELETE';
552
+ d: {
553
+ guild_id: string;
554
+ id: string;
555
+ };
556
+ }
557
+ interface VoiceState {
558
+ op: 'voiceUpdate';
559
+ guildId: string;
560
+ event: VoiceServer;
561
+ sessionId?: string;
562
+ guild_id: string;
563
+ user_id: string;
564
+ session_id: string;
565
+ channel_id: string;
566
+ mute: boolean;
567
+ deaf: boolean;
568
+ self_deaf: boolean;
569
+ self_mute: boolean;
570
+ self_video: boolean;
571
+ self_stream: boolean;
572
+ request_to_speak_timestamp: boolean;
573
+ suppress: boolean;
574
+ }
575
+ type Base64 = string;
576
+ interface VoiceServer {
577
+ token: string;
578
+ guild_id: string;
579
+ endpoint: string;
580
+ channel_id?: string;
581
+ }
582
+ interface VoicePacket {
583
+ t?: 'VOICE_SERVER_UPDATE' | 'VOICE_STATE_UPDATE';
584
+ d: VoiceState | VoiceServer;
585
+ }
586
+ interface NodeMessage extends NodeStats {
587
+ type: PlayerEventType;
588
+ op: 'stats' | 'playerUpdate' | 'event';
589
+ guildId: string;
590
+ }
591
+ type AudioSearchType = 'track' | 'album' | 'artist' | 'playlist' | 'text' | 'tracks' | 'albums' | 'artists' | 'playlists' | 'texts';
592
+ interface AudioSearchFilteredResponse {
593
+ info: PlaylistInfo;
594
+ pluginInfo: PluginInfo;
595
+ tracks: Track[];
596
+ }
597
+ interface AudioSearchResponse {
598
+ tracks: Track[];
599
+ albums: AudioSearchFilteredResponse[];
600
+ artists: AudioSearchFilteredResponse[];
601
+ playlists: AudioSearchFilteredResponse[];
602
+ texts: {
603
+ text: string;
604
+ pluginInfo: PluginInfo;
605
+ }[];
606
+ pluginInfo: PluginInfo;
607
+ }
608
+ type SearchQuery = {
609
+ query: string;
610
+ extraQueryUrlParams?: URLSearchParams;
611
+ source?: SearchPlatform;
612
+ } | string;
613
+ type AudioSearchQuery = {
614
+ query: string;
615
+ source: SourceSearchPlatformBase;
616
+ types?: AudioSearchType[];
617
+ };
618
+ type Awaitable<T> = Promise<T> | T;
619
+
620
+ type AudioOutputs = 'mono' | 'stereo' | 'left' | 'right';
621
+ interface PlayerFilters {
622
+ custom: boolean;
623
+ nightcore: boolean;
624
+ vaporwave: boolean;
625
+ rotation: boolean;
626
+ karaoke: boolean;
627
+ tremolo: boolean;
628
+ vibrato: boolean;
629
+ lowPass: boolean;
630
+ audioOutput: AudioOutputs;
631
+ nodeLinkEcho: boolean;
632
+ nodeLinkChorus: boolean;
633
+ nodeLinkCompressor: boolean;
634
+ nodeLinkHighPass: boolean;
635
+ nodeLinkPhaser: boolean;
636
+ nodeLinkSpatial: boolean;
637
+ volume: boolean;
638
+ coreFilterPlugin: {
639
+ echo: boolean;
640
+ reverb: boolean;
641
+ };
642
+ dspxPlugin: {
643
+ lowPass: boolean;
644
+ highPass: boolean;
645
+ normalization: boolean;
646
+ echo: boolean;
647
+ };
648
+ }
649
+ interface EQBand {
650
+ band: IntegerNumber | number;
651
+ gain: FloatNumber | number;
652
+ }
653
+ interface KaraokeFilter {
654
+ level?: number;
655
+ monoLevel?: number;
656
+ filterBand?: number;
657
+ filterWidth?: number;
658
+ }
659
+ interface TimescaleFilter {
660
+ speed?: number;
661
+ pitch?: number;
662
+ rate?: number;
663
+ }
664
+ interface TremoloFilter {
665
+ frequency?: number;
666
+ depth?: number;
667
+ }
668
+ interface VibratoFilter {
669
+ frequency?: number;
670
+ depth?: number;
671
+ }
672
+ interface RotationFilter {
673
+ rotationHz?: number;
674
+ }
675
+ interface DistortionFilter {
676
+ sinOffset?: number;
677
+ sinScale?: number;
678
+ cosOffset?: number;
679
+ cosScale?: number;
680
+ tanOffset?: number;
681
+ tanScale?: number;
682
+ offset?: number;
683
+ scale?: number;
684
+ }
685
+ interface ChannelMixFilter {
686
+ leftToLeft?: number;
687
+ leftToRight?: number;
688
+ rightToLeft?: number;
689
+ rightToRight?: number;
690
+ }
691
+ interface NodeLink_EchoFilter {
692
+ delay?: number;
693
+ feedback?: number;
694
+ mix?: number;
695
+ }
696
+ interface NodeLink_ChorusFilter {
697
+ rate?: number;
698
+ depth?: number;
699
+ delay?: number;
700
+ mix?: number;
701
+ feedback?: number;
702
+ }
703
+ interface NodeLink_CompressorFilter {
704
+ threshold?: number;
705
+ ratio?: number;
706
+ attack?: number;
707
+ release?: number;
708
+ gain?: number;
709
+ }
710
+ interface NodeLink_HighPassFilter {
711
+ smoothing?: number;
712
+ }
713
+ interface NodeLink_PhaserFilter {
714
+ stages?: number;
715
+ rate?: number;
716
+ depth?: number;
717
+ feedback?: number;
718
+ mix?: number;
719
+ minFrequency?: number;
720
+ maxFrequency?: number;
721
+ }
722
+ interface NodeLink_SpatialFilter {
723
+ depth?: number;
724
+ rate?: number;
725
+ }
726
+ interface LowPassFilter {
727
+ smoothing?: number;
728
+ }
729
+ interface FilterData {
730
+ volume?: number;
731
+ karaoke?: KaraokeFilter;
732
+ timescale?: TimescaleFilter;
733
+ tremolo?: TremoloFilter;
734
+ vibrato?: VibratoFilter;
735
+ rotation?: RotationFilter;
736
+ distortion?: DistortionFilter;
737
+ channelMix?: ChannelMixFilter;
738
+ lowPass?: LowPassFilter;
739
+ echo?: NodeLink_EchoFilter;
740
+ chorus?: NodeLink_ChorusFilter;
741
+ compressor?: NodeLink_CompressorFilter;
742
+ highPass?: NodeLink_HighPassFilter;
743
+ phaser?: NodeLink_PhaserFilter;
744
+ spatial?: NodeLink_SpatialFilter;
745
+ pluginFilters?: {
746
+ 'filter-engine'?: {
747
+ echo?: {
748
+ delay?: number;
749
+ decay?: number;
750
+ };
751
+ reverb?: {
752
+ delays?: number[];
753
+ gains?: number[];
754
+ };
755
+ };
756
+ 'high-pass'?: {
757
+ cutoffFrequency?: number;
758
+ boostFactor?: number;
759
+ };
760
+ 'low-pass'?: {
761
+ cutoffFrequency?: number;
762
+ boostFactor?: number;
763
+ };
764
+ normalization?: {
765
+ maxAmplitude?: number;
766
+ adaptive?: boolean;
767
+ };
768
+ echo?: {
769
+ echoLength?: number;
770
+ decay?: number;
771
+ };
772
+ };
773
+ }
774
+ interface AudioFilters extends FilterData {
775
+ equalizer?: EQBand[];
776
+ }
777
+
778
+ type NodeLinkEventTypes = 'PlayerCreatedEvent' | 'PlayerDestroyedEvent' | 'PlayerConnectedEvent' | 'PlayerReconnectingEvent' | 'VolumeChangedEvent' | 'FiltersChangedEvent' | 'SeekEvent' | 'PauseEvent' | 'ConnectionStatusEvent' | 'MixStartedEvent' | 'MixEndedEvent' | 'LyricsFoundEvent' | 'LyricsLineEvent' | 'LyricsNotFoundEvent';
779
+ interface NodeLinkBaseEvent {
780
+ op: 'event';
781
+ type: NodeLinkEventTypes;
782
+ guildId: string;
783
+ }
784
+ interface PlayerCreatedEvent extends NodeLinkBaseEvent {
785
+ type: 'PlayerCreatedEvent';
786
+ }
787
+ interface PlayerDestroyedEvent extends NodeLinkBaseEvent {
788
+ type: 'PlayerDestroyedEvent';
789
+ }
790
+ interface PlayerConnectedEvent extends NodeLinkBaseEvent {
791
+ type: 'PlayerConnectedEvent';
792
+ }
793
+ interface PlayerReconnectingEvent extends NodeLinkBaseEvent {
794
+ type: 'PlayerReconnectingEvent';
795
+ }
796
+ interface VolumeChangedEvent extends NodeLinkBaseEvent {
797
+ type: 'VolumeChangedEvent';
798
+ volume: number;
799
+ }
800
+ interface FiltersChangedEvent extends NodeLinkBaseEvent {
801
+ type: 'FiltersChangedEvent';
802
+ filters: AudioFilters;
803
+ }
804
+ interface SeekEvent extends NodeLinkBaseEvent {
805
+ type: 'SeekEvent';
806
+ position: number;
807
+ }
808
+ interface PauseEvent extends NodeLinkBaseEvent {
809
+ type: 'PauseEvent';
810
+ paused: boolean;
811
+ }
812
+ interface ConnectionStatusEvent extends NodeLinkBaseEvent {
813
+ type: 'ConnectionStatusEvent';
814
+ connected: boolean;
815
+ }
816
+ interface MixStartedEvent extends NodeLinkBaseEvent {
817
+ type: 'MixStartedEvent';
818
+ mixId: string;
819
+ track: AudioTrack;
820
+ volume: number;
821
+ }
822
+ interface MixEndedEvent extends NodeLinkBaseEvent {
823
+ type: 'MixEndedEvent';
824
+ mixId: string;
825
+ reason: 'FINISHED' | 'REMOVED' | 'ERROR' | 'MAIN_ENDED' | string;
826
+ }
827
+ type NodeLinkEventPayload<T extends NodeLinkEventTypes> = T extends 'PlayerCreatedEvent' ? PlayerCreatedEvent : T extends 'PlayerDestroyedEvent' ? PlayerDestroyedEvent : T extends 'PlayerConnectedEvent' ? PlayerConnectedEvent : T extends 'PlayerReconnectingEvent' ? PlayerReconnectingEvent : T extends 'VolumeChangedEvent' ? VolumeChangedEvent : T extends 'FiltersChangedEvent' ? FiltersChangedEvent : T extends 'SeekEvent' ? SeekEvent : T extends 'PauseEvent' ? PauseEvent : T extends 'ConnectionStatusEvent' ? ConnectionStatusEvent : T extends 'MixStartedEvent' ? MixStartedEvent : T extends 'MixEndedEvent' ? MixEndedEvent : never;
828
+ type HealthStatusThreshold = {
829
+ excellent: number;
830
+ good: number;
831
+ fair: number;
832
+ poor: number;
833
+ };
834
+ type HealthStatusThresholdOptions = {
835
+ cpu: Partial<HealthStatusThreshold>;
836
+ memory: Partial<HealthStatusThreshold>;
837
+ ping: Partial<HealthStatusThreshold>;
838
+ };
839
+ type NodeMetricSummary = {
840
+ cpuLoad: number;
841
+ systemLoad: number;
842
+ memoryUsage: number;
843
+ players: number;
844
+ playingPlayers: number;
845
+ uptime: number;
846
+ ping: number;
847
+ frameDeficit: number;
848
+ };
849
+ type HealthStatusObject = {
850
+ status: HealthStatusKeys;
851
+ performance: HealthPerformanceKeys;
852
+ isOverloaded: boolean;
853
+ needsRestart: boolean;
854
+ penaltyScore: number;
855
+ estimatedRemainingCapacity: number;
856
+ recommendations: string[];
857
+ metrics: {
858
+ cpuLoad: number;
859
+ memoryUsage: number;
860
+ players: number;
861
+ playingPlayers: number;
862
+ uptime: number;
863
+ ping: number;
864
+ frameDeficit: number;
865
+ };
866
+ };
867
+ type HealthPerformanceKeys = 'excellent' | 'good' | 'fair' | 'poor';
868
+ type HealthStatusKeys = 'healthy' | 'degraded' | 'critical' | 'offline';
869
+ type AddMixerLayerResponse = {
870
+ id: string;
871
+ track: AudioTrack;
872
+ volume: number;
873
+ };
874
+ type ListMixerLayersResponse = {
875
+ mixes: {
876
+ id: string;
877
+ track: AudioTrack;
878
+ volume: number;
879
+ position: number;
880
+ startTime: number;
881
+ }[];
882
+ };
883
+ type ConnectionMetricsResponse = {
884
+ status: string;
885
+ metrics: {
886
+ speed: {
887
+ bps: number;
888
+ kbps: number;
889
+ mbps: number;
890
+ };
891
+ downloadedBytes: number;
892
+ durationSeconds: number;
893
+ timestamp: number;
894
+ };
895
+ };
896
+ type NodeLinkLyricsSynced = {
897
+ loadType: string;
898
+ data: {
899
+ synced: true;
900
+ lang: string;
901
+ source: string;
902
+ lines: [
903
+ {
904
+ text: string;
905
+ time: number;
906
+ duration: number;
907
+ },
908
+ {
909
+ text: string;
910
+ time: number;
911
+ duration: number;
912
+ },
913
+ {
914
+ text: string;
915
+ time: number;
916
+ duration: number;
917
+ }
918
+ ];
919
+ };
920
+ };
921
+ type NodeLinkLyricsPlain = {
922
+ loadType: string;
923
+ data: {
924
+ synced: false;
925
+ lang: string;
926
+ source: string;
927
+ lines: [
928
+ {
929
+ text: string;
930
+ time: null;
931
+ duration: null;
932
+ },
933
+ {
934
+ text: string;
935
+ time: null;
936
+ duration: null;
937
+ },
938
+ {
939
+ text: string;
940
+ time: null;
941
+ duration: null;
942
+ }
943
+ ];
944
+ };
945
+ };
946
+ type NodeLinkLyrics = NodeLinkLyricsSynced | NodeLinkLyricsPlain;
947
+ type NodeLinkNoLyrics = {
948
+ loadType: string;
949
+ data: {};
950
+ };
951
+ type NodeLinkChapter = {
952
+ title: string;
953
+ startTime: number;
954
+ thumbnails: [
955
+ {
956
+ url: string;
957
+ width: number;
958
+ height: number;
959
+ }
960
+ ];
961
+ duration: number;
962
+ endTime: number;
963
+ };
964
+ type DirectStreamResponse = {
965
+ url: string;
966
+ protocol: string;
967
+ format: string;
968
+ hlsUrl: string | null;
969
+ formats: {
970
+ itag: number;
971
+ mimeType: string;
972
+ qualityLabel: string;
973
+ bitrate: number;
974
+ }[];
975
+ };
976
+ type YoutubeOAuthResponse = {
977
+ access_token: string;
978
+ expires_in: number;
979
+ scope: string;
980
+ token_type: string;
981
+ };
982
+ type MeaningResponse = {
983
+ loadType: 'meaning';
984
+ data: {
985
+ title: string;
986
+ description: string;
987
+ paragraphs: string[];
988
+ url: string;
989
+ provider: string;
990
+ type: string;
991
+ };
992
+ };
993
+
994
+ type ModifyRequest = (options: RequestInit & {
995
+ path: string;
996
+ extraQueryUrlParams?: URLSearchParams;
997
+ }) => void;
998
+ type SponsorBlockSegment = 'sponsor' | 'selfpromo' | 'interaction' | 'intro' | 'outro' | 'preview' | 'music_offtopic' | 'filler';
999
+ interface NodeConfiguration {
1000
+ nodeType?: NodeTypes;
1001
+ host: string;
1002
+ port: number;
1003
+ authorization: string;
1004
+ secure?: boolean;
1005
+ sessionId?: string;
1006
+ id?: string;
1007
+ regions?: string[];
1008
+ retryAmount?: number;
1009
+ retryDelay?: number;
1010
+ retryTimespan?: number;
1011
+ requestSignalTimeoutMS?: number;
1012
+ closeOnError?: boolean;
1013
+ heartBeatInterval?: number;
1014
+ enablePingOnStatsCheck?: boolean;
1015
+ autoChecks?: {
1016
+ pluginValidations?: boolean;
1017
+ sourcesValidations?: boolean;
1018
+ };
1019
+ }
1020
+ interface MemoryStats {
1021
+ free: number;
1022
+ used: number;
1023
+ allocated: number;
1024
+ reservable: number;
1025
+ }
1026
+ interface CPUStats {
1027
+ cores: number;
1028
+ systemLoad: number;
1029
+ audioLoad: number;
1030
+ }
1031
+ interface FrameStats {
1032
+ sent?: number;
1033
+ nulled?: number;
1034
+ deficit?: number;
1035
+ }
1036
+ interface BaseNodeStats {
1037
+ players: number;
1038
+ playingPlayers: number;
1039
+ uptime: number;
1040
+ memory: MemoryStats;
1041
+ cpu: CPUStats;
1042
+ frameStats: FrameStats;
1043
+ }
1044
+ interface NodeLinkConnectionMetrics {
1045
+ status: string;
1046
+ metrics: {
1047
+ speed: {
1048
+ bps: number;
1049
+ kbps: number;
1050
+ mbps: number;
1051
+ };
1052
+ downloadedBytes: number;
1053
+ durationSeconds: number;
1054
+ timestamp: number;
1055
+ };
1056
+ }
1057
+ interface NodeStats extends BaseNodeStats {
1058
+ frameStats: FrameStats;
1059
+ detailedStats?: {
1060
+ api: {
1061
+ requests: Record<string, number>;
1062
+ errors: unknown;
1063
+ };
1064
+ sources: Record<string, number>;
1065
+ playback: {
1066
+ events: Record<string, number>;
1067
+ };
1068
+ [key: string]: unknown;
1069
+ };
1070
+ }
1071
+ interface NodeInfo {
1072
+ version: VersionObject;
1073
+ buildTime: number;
1074
+ git: GitObject;
1075
+ jvm: string;
1076
+ playerEngine: string;
1077
+ sourceManagers: string[];
1078
+ filters: string[];
1079
+ plugins: PluginObject[];
1080
+ isNodelink?: boolean;
1081
+ }
1082
+ interface VersionObject {
1083
+ semver: string;
1084
+ major: number;
1085
+ minor: number;
1086
+ patch: number;
1087
+ preRelease?: string;
1088
+ build?: string;
1089
+ }
1090
+ interface GitObject {
1091
+ branch: string;
1092
+ commit: string;
1093
+ commitTime: string;
1094
+ }
1095
+ interface PluginObject {
1096
+ name: string;
1097
+ version: string;
1098
+ }
1099
+ interface LyricsResult {
1100
+ sourceName: string;
1101
+ provider: string;
1102
+ text: string | null;
1103
+ lines: LyricsLine[];
1104
+ plugin: PluginInfo;
1105
+ }
1106
+ interface LyricsLine {
1107
+ timestamp: number;
1108
+ duration: number | null;
1109
+ line: string;
1110
+ plugin: PluginInfo;
1111
+ }
1112
+ type RyanlinkNodeIdentifier = string;
1113
+ interface NodeManagerEvents {
1114
+ create: (node: RyanlinkNode) => void;
1115
+ destroy: (node: RyanlinkNode, destroyReason?: DestroyReasonsType) => void;
1116
+ connect: (node: RyanlinkNode) => void;
1117
+ reconnecting: (node: RyanlinkNode) => void;
1118
+ reconnectinprogress: (node: RyanlinkNode) => void;
1119
+ disconnect: (node: RyanlinkNode, reason: {
1120
+ code?: number;
1121
+ reason?: string;
1122
+ }) => void;
1123
+ error: (node: RyanlinkNode, error: Error, payload?: unknown) => void;
1124
+ raw: (node: RyanlinkNode, payload: unknown) => void;
1125
+ resumed: (node: RyanlinkNode, payload: {
1126
+ resumed: true;
1127
+ sessionId: string;
1128
+ op: 'ready';
1129
+ }, players: AudioPlayerState[] | InvalidRestRequest) => void;
1130
+ nodeLinkEvent: (...args: {
1131
+ [K in NodeLinkEventTypes]: [node: RyanlinkNode, event: K, player: Player, track: Track | null, payload: NodeLinkEventPayload<K>];
1132
+ }[NodeLinkEventTypes]) => void;
1133
+ }
1134
+ declare enum ReconnectionState {
1135
+ IDLE = "IDLE",
1136
+ RECONNECTING = "RECONNECTING",
1137
+ PENDING = "PENDING",
1138
+ DESTROYING = "DESTROYING"
1139
+ }
1140
+ type NodeTypes = 'Core' | 'NodeLink';
1141
+
1142
+ declare class FilterManager {
1143
+ static EQList: {
1144
+ BassboostEarrape: EQBand[];
1145
+ BassboostHigh: EQBand[];
1146
+ BassboostMedium: EQBand[];
1147
+ BassboostLow: EQBand[];
1148
+ BetterMusic: EQBand[];
1149
+ Rock: EQBand[];
1150
+ Classic: EQBand[];
1151
+ Pop: EQBand[];
1152
+ Electronic: EQBand[];
1153
+ FullSound: EQBand[];
1154
+ Gaming: EQBand[];
1155
+ };
1156
+ equalizerBands: EQBand[];
1157
+ filterUpdatedState: boolean;
1158
+ filters: PlayerFilters;
1159
+ data: FilterData;
1160
+ player: Player;
1161
+ constructor(player: Player);
1162
+ applyPlayerFilters(): Promise<void>;
1163
+ private privateNot0;
1164
+ private getAudioFilters;
1165
+ checkFiltersState(oldFilterTimescale?: Partial<TimescaleFilter>): boolean;
1166
+ resetFilters(): Promise<FilterManager>;
1167
+ setVolume(volume: number): Promise<this>;
1168
+ setAudioOutput(type: AudioOutputs): Promise<FilterManager>;
1169
+ setSpeed(speed?: number): Promise<FilterManager>;
1170
+ setPitch(pitch?: number): Promise<FilterManager>;
1171
+ setRate(rate?: number): Promise<FilterManager>;
1172
+ toggleRotation(rotationHz?: number): Promise<FilterManager>;
1173
+ toggleVibrato(frequency?: number, depth?: number): Promise<FilterManager>;
1174
+ toggleTremolo(frequency?: number, depth?: number): Promise<FilterManager>;
1175
+ toggleLowPass(smoothing?: number): Promise<FilterManager>;
1176
+ dspxPlugin: {
1177
+ toggleLowPass: (boostFactor?: number, cutoffFrequency?: number) => Promise<FilterManager>;
1178
+ toggleHighPass: (boostFactor?: number, cutoffFrequency?: number) => Promise<FilterManager>;
1179
+ toggleNormalization: (maxAmplitude?: number, adaptive?: boolean) => Promise<FilterManager>;
1180
+ toggleEcho: (decay?: number, echoLength?: number) => Promise<FilterManager>;
1181
+ };
1182
+ coreFilterPlugin: {
1183
+ toggleEcho: (delay?: number, decay?: number) => Promise<FilterManager>;
1184
+ toggleReverb: (delays?: number[], gains?: number[]) => Promise<FilterManager>;
1185
+ };
1186
+ toggleNightcore(speed?: number, pitch?: number, rate?: number): Promise<FilterManager>;
1187
+ toggleVaporwave(speed?: number, pitch?: number, rate?: number): Promise<FilterManager>;
1188
+ toggleKaraoke(level?: number, monoLevel?: number, filterBand?: number, filterWidth?: number): Promise<FilterManager>;
1189
+ isCustomFilterActive(): boolean;
1190
+ setEQPreset(preset: keyof typeof EQList): Promise<this>;
1191
+ setEQ(bands: EQBand | EQBand[]): Promise<this>;
1192
+ clearEQ(): Promise<this>;
1193
+ }
1194
+
1195
+ declare class QueueSaver {
1196
+ private _;
1197
+ options: {
1198
+ maxPreviousTracks: number;
1199
+ };
1200
+ constructor(options: ManagerQueueOptions);
1201
+ get(guildId: string): Promise<Partial<StoredQueue>>;
1202
+ delete(guildId: string): Promise<boolean | void>;
1203
+ set(guildId: string, valueToStringify: StoredQueue): Promise<boolean | void>;
1204
+ sync(guildId: string): Promise<Partial<StoredQueue>>;
1205
+ }
1206
+ declare class DefaultQueueStore implements QueueStoreManager {
1207
+ private data;
1208
+ constructor();
1209
+ get(guildId: string): StoredQueue | undefined;
1210
+ set(guildId: string, valueToStringify: any): boolean;
1211
+ delete(guildId: string): boolean;
1212
+ stringify(value: StoredQueue | string): StoredQueue | string;
1213
+ parse(value: StoredQueue | string): Partial<StoredQueue>;
1214
+ }
1215
+ declare class Queue {
1216
+ readonly tracks: (Track | UnresolvedTrack)[];
1217
+ readonly previous: Track[];
1218
+ current: Track | null;
1219
+ options: {
1220
+ maxPreviousTracks: number;
1221
+ };
1222
+ private readonly guildId;
1223
+ private readonly QueueSaver;
1224
+ private managerUtils;
1225
+ private queueChanges;
1226
+ constructor(guildId: string, data?: Partial<StoredQueue>, QueueSaver?: QueueSaver, queueOptions?: ManagerQueueOptions);
1227
+ utils: {
1228
+ save: () => Promise<boolean | void>;
1229
+ sync: (override?: boolean, dontSyncCurrent?: boolean) => Promise<void>;
1230
+ destroy: () => Promise<boolean | void>;
1231
+ toJSON: () => StoredQueue;
1232
+ totalDuration: () => number;
1233
+ filterTracks: (predicate: ((track: Track | UnresolvedTrack, index: number) => boolean) | {
1234
+ title?: string;
1235
+ author?: string;
1236
+ duration?: number | {
1237
+ min?: number;
1238
+ max?: number;
1239
+ };
1240
+ uri?: string;
1241
+ identifier?: string;
1242
+ sourceName?: string;
1243
+ isStream?: boolean;
1244
+ isSeekable?: boolean;
1245
+ }) => Array<{
1246
+ track: Track | UnresolvedTrack;
1247
+ index: number;
1248
+ }>;
1249
+ findTrack: (predicate: ((track: Track | UnresolvedTrack, index: number) => boolean) | {
1250
+ title?: string;
1251
+ author?: string;
1252
+ duration?: number | {
1253
+ min?: number;
1254
+ max?: number;
1255
+ };
1256
+ uri?: string;
1257
+ identifier?: string;
1258
+ sourceName?: string;
1259
+ isStream?: boolean;
1260
+ isSeekable?: boolean;
1261
+ }) => {
1262
+ track: Track | UnresolvedTrack;
1263
+ index: number;
1264
+ } | null;
1265
+ };
1266
+ shuffle(): Promise<number>;
1267
+ add(TrackOrTracks: Track | UnresolvedTrack | (Track | UnresolvedTrack)[], index?: number): any;
1268
+ splice(index: number, amount: number, TrackOrTracks?: Track | UnresolvedTrack | (Track | UnresolvedTrack)[]): any;
1269
+ remove<T extends Track | UnresolvedTrack | number | Track[] | UnresolvedTrack[] | number[] | (number | Track | UnresolvedTrack)[]>(removeQueryTrack: T): Promise<{
1270
+ removed: (Track | UnresolvedTrack)[];
1271
+ } | null>;
1272
+ shiftPrevious(): Promise<Track>;
1273
+ filter(predicate: ((track: Track | UnresolvedTrack, index: number) => boolean) | {
1274
+ title?: string;
1275
+ author?: string;
1276
+ duration?: number | {
1277
+ min?: number;
1278
+ max?: number;
1279
+ };
1280
+ uri?: string;
1281
+ identifier?: string;
1282
+ sourceName?: string;
1283
+ isStream?: boolean;
1284
+ isSeekable?: boolean;
1285
+ }): Array<{
1286
+ track: Track | UnresolvedTrack;
1287
+ index: number;
1288
+ }>;
1289
+ find(predicate: ((track: Track | UnresolvedTrack, index: number) => boolean) | {
1290
+ title?: string;
1291
+ author?: string;
1292
+ duration?: number | {
1293
+ min?: number;
1294
+ max?: number;
1295
+ };
1296
+ uri?: string;
1297
+ identifier?: string;
1298
+ sourceName?: string;
1299
+ isStream?: boolean;
1300
+ isSeekable?: boolean;
1301
+ }): {
1302
+ track: Track | UnresolvedTrack;
1303
+ index: number;
1304
+ } | null;
1305
+ sortBy(sortBy: 'duration' | 'title' | 'author' | ((a: Track | UnresolvedTrack, b: Track | UnresolvedTrack) => number), order?: 'asc' | 'desc'): Promise<this>;
1306
+ toSortedBy(sortBy: 'duration' | 'title' | 'author' | ((a: Track | UnresolvedTrack, b: Track | UnresolvedTrack) => number), order?: 'asc' | 'desc'): (Track | UnresolvedTrack)[];
1307
+ getTracks(start: number, end?: number): (Track | UnresolvedTrack)[];
1308
+ }
1309
+
1310
+ interface AutoplayConfig {
1311
+ enabled?: boolean;
1312
+ defaultSource?: 'ytsearch' | 'ytmsearch' | 'scsearch' | 'spsearch' | 'amsearch';
1313
+ limit?: number;
1314
+ minDuration?: number;
1315
+ maxDuration?: number;
1316
+ excludeKeywords?: string[];
1317
+ }
1318
+ declare class Player {
1319
+ filterManager: FilterManager;
1320
+ RyanlinkManager: RyanlinkManager;
1321
+ options: PlayerOptions;
1322
+ node: RyanlinkNode | NodeLinkNode;
1323
+ queue: Queue;
1324
+ guildId: string;
1325
+ voiceChannelId: string | null;
1326
+ textChannelId: string | null;
1327
+ playing: boolean;
1328
+ paused: boolean;
1329
+ repeatMode: RepeatMode;
1330
+ ping: {
1331
+ node: number;
1332
+ ws: number;
1333
+ };
1334
+ volume: number;
1335
+ internalVolume: number;
1336
+ get position(): number;
1337
+ lastPositionChange: number | null;
1338
+ lastPosition: number;
1339
+ lastSavedPosition: number;
1340
+ createdTimeStamp: number;
1341
+ connected: boolean | undefined;
1342
+ voice: VoiceConnectionOptions;
1343
+ voiceState: {
1344
+ selfDeaf: boolean;
1345
+ selfMute: boolean;
1346
+ serverDeaf: boolean;
1347
+ serverMute: boolean;
1348
+ suppress: boolean;
1349
+ };
1350
+ private readonly data;
1351
+ private dispatchDebug;
1352
+ constructor(options: PlayerOptions, RyanlinkManager: RyanlinkManager, dontEmitPlayerCreateEvent?: boolean);
1353
+ set(key: string, value: unknown): this;
1354
+ get<T>(key: string): T;
1355
+ setData(key: string, value: unknown): this;
1356
+ getData<T>(key: string): T;
1357
+ deleteData(key: string): this;
1358
+ clearData(): this;
1359
+ getAllData(): Record<string, unknown>;
1360
+ play(options?: Partial<PlayOptions>): any;
1361
+ oldJSON: PlayerJson;
1362
+ syncState(): void;
1363
+ setVolume(volume: number, ignoreVolumeDecrementer?: boolean): Promise<this>;
1364
+ audioSearch(query: AudioSearchQuery, requestUser: unknown, throwOnEmpty?: boolean): Promise<AudioSearchResponse | SearchResult>;
1365
+ setSponsorBlock(segments?: SponsorBlockSegment[]): Promise<void>;
1366
+ getSponsorBlock(): Promise<SponsorBlockSegment[]>;
1367
+ deleteSponsorBlock(): Promise<void>;
1368
+ search(query: SearchQuery, requestUser: unknown, throwOnEmpty?: boolean): Promise<SearchResult | UnresolvedSearchResult>;
1369
+ private _bandCampSearch;
1370
+ pause(): Promise<this>;
1371
+ resume(): Promise<this>;
1372
+ seek(position: number): Promise<this>;
1373
+ setRepeatMode(repeatMode: RepeatMode): Promise<this>;
1374
+ skip(skipTo?: number, throwError?: boolean): Promise<this>;
1375
+ stopPlaying(clearQueue?: boolean, executeAutoplay?: boolean): Promise<this>;
1376
+ connect(): Promise<this>;
1377
+ changeVoiceState(data: {
1378
+ voiceChannelId?: string;
1379
+ selfDeaf?: boolean;
1380
+ selfMute?: boolean;
1381
+ }): Promise<this>;
1382
+ disconnect(force?: boolean): Promise<this>;
1383
+ destroy(reason?: DestroyReasons | string, disconnect?: boolean): Promise<this>;
1384
+ getCurrentLyrics(skipTrackSource?: boolean): Promise<LyricsResult>;
1385
+ getLyrics(track: Track, skipTrackSource?: boolean): Promise<LyricsResult>;
1386
+ subscribeLyrics(skipTrackSource?: boolean): Promise<unknown>;
1387
+ unsubscribeLyrics(): Promise<void>;
1388
+ changeNode(newNode: RyanlinkNode | string, checkSources?: boolean): Promise<string>;
1389
+ moveNode(node?: string): Promise<string | this>;
1390
+ toJSON(): PlayerJson;
1391
+ }
1392
+ declare class Autoplay {
1393
+ private static adding;
1394
+ static defaultAutoplay(player: Player, lastTrack: Track): Promise<void>;
1395
+ private static buildPlayedData;
1396
+ private static fetchRelatedTracks;
1397
+ private static filterTracks;
1398
+ private static getSpotifyRecommendations;
1399
+ private static getYouTubeSimilar;
1400
+ private static getArtistSearch;
1401
+ }
1402
+
1403
+ declare class NodeLinkNode extends RyanlinkNode {
1404
+ nodeType: "NodeLink";
1405
+ constructor(options: NodeConfiguration, manager: NodeManager);
1406
+ setNextTrackGapLess(player: Player, track?: Track | UnresolvedTrack): Promise<boolean>;
1407
+ removeNextTrackGapLess(player: Player): Promise<boolean>;
1408
+ getMeaning(track?: Track | UnresolvedTrack): Promise<MeaningResponse>;
1409
+ addMixerLayer(player: Player, trackToAdd: Track, volume: number): Promise<AddMixerLayerResponse>;
1410
+ listMixerLayers(player: Player): Promise<ListMixerLayersResponse>;
1411
+ updateMixerLayerVolume(player: Player, mixId: string, volume: number): Promise<boolean>;
1412
+ removeMixerLayer(player: Player, mixId: string): Promise<boolean>;
1413
+ specificFilters: {
1414
+ echo: (player: Player, options: NodeLink_EchoFilter, disableFilter?: boolean) => Promise<boolean>;
1415
+ chorus: (player: Player, options: NodeLink_ChorusFilter, disableFilter?: boolean) => Promise<boolean>;
1416
+ compressor: (player: Player, options: NodeLink_CompressorFilter, disableFilter?: boolean) => Promise<boolean>;
1417
+ highPass: (player: Player, options: NodeLink_HighPassFilter, disableFilter?: boolean) => Promise<boolean>;
1418
+ phaser: (player: Player, options: NodeLink_PhaserFilter, disableFilter?: boolean) => Promise<boolean>;
1419
+ spatial: (player: Player, options: NodeLink_SpatialFilter, disableFilter?: boolean) => Promise<boolean>;
1420
+ resetNodeLinkFilters: (player: Player) => Promise<boolean>;
1421
+ };
1422
+ nodeLinkLyrics(player: Player, track?: Track | UnresolvedTrack, language?: string): Promise<NodeLinkLyrics | NodeLinkNoLyrics>;
1423
+ getChapters(player: Player, track?: Track | UnresolvedTrack): Promise<NodeLinkChapter[]>;
1424
+ getConnectionMetrics(): Promise<ConnectionMetricsResponse>;
1425
+ getDirectStream(track: Track | UnresolvedTrack): Promise<DirectStreamResponse>;
1426
+ loadDirectStream(track: Track | UnresolvedTrack, volume: number, position: number, filters: object | string): Promise<ReadableStream>;
1427
+ changeAudioTrackLanguage(player: Player, language_audioTrackId: string): Promise<any>;
1428
+ updateYoutubeConfig(refreshToken?: string, visitorData?: string): Promise<any>;
1429
+ getYoutubeConfig(validate?: boolean): Promise<{
1430
+ refreshToken: string;
1431
+ visitorData: string | null;
1432
+ isConfigured: boolean;
1433
+ isValid: boolean | null;
1434
+ }>;
1435
+ getYoutubeOAUTH(refreshToken: string): Promise<YoutubeOAuthResponse>;
1436
+ updateYoutubeOAUTH(refreshToken: string): Promise<YoutubeOAuthResponse>;
1437
+ }
1438
+
1439
+ declare class RyanlinkNode {
1440
+ private heartBeatPingTimestamp;
1441
+ private heartBeatPongTimestamp;
1442
+ private heartBeatInterval?;
1443
+ private pingTimeout?;
1444
+ nodeType: NodeTypes;
1445
+ isAlive: boolean;
1446
+ static _NodeLinkClass: unknown;
1447
+ options: NodeConfiguration;
1448
+ calls: number;
1449
+ stats: NodeStats;
1450
+ sessionId?: string | null;
1451
+ resuming: {
1452
+ enabled: boolean;
1453
+ timeout: number | null;
1454
+ };
1455
+ info: NodeInfo | null;
1456
+ reconnectionState: ReconnectionState;
1457
+ private NodeManager;
1458
+ private reconnectTimeout?;
1459
+ private reconnectAttempts;
1460
+ private socket;
1461
+ private version;
1462
+ private get _LManager();
1463
+ get heartBeatPing(): number;
1464
+ get _checkForPlugins(): boolean;
1465
+ get _checkForSources(): boolean;
1466
+ private dispatchDebug;
1467
+ get connected(): boolean;
1468
+ get connectionStatus(): string;
1469
+ constructor(options: NodeConfiguration, manager: NodeManager);
1470
+ rawRequest(endpoint: string, modify?: ModifyRequest): Promise<{
1471
+ response: Response;
1472
+ options: RequestInit & {
1473
+ path: string;
1474
+ extraQueryUrlParams?: URLSearchParams;
1475
+ };
1476
+ }>;
1477
+ request(endpoint: string, modify: ModifyRequest | undefined, parseAsText: true): Promise<string>;
1478
+ request(endpoint: string, modify?: ModifyRequest, parseAsText?: false): Promise<any>;
1479
+ search(query: SearchQuery, requestUser: unknown, throwOnEmpty?: boolean): Promise<SearchResult>;
1480
+ audioSearch(query: AudioSearchQuery, requestUser: unknown, throwOnEmpty?: boolean): Promise<AudioSearchResponse | SearchResult>;
1481
+ updatePlayer(data: PlayerUpdateInfo): Promise<AudioPlayerState>;
1482
+ destroyPlayer(guildId: any): Promise<void>;
1483
+ connect(sessionId?: string): void;
1484
+ private heartBeat;
1485
+ get id(): string;
1486
+ destroy(destroyReason?: DestroyReasonsType, deleteNode?: boolean, movePlayers?: boolean): void;
1487
+ disconnect(disconnectReason?: DisconnectReasonsType): void;
1488
+ fetchAllPlayers(): Promise<AudioPlayerState[] | InvalidRestRequest | null>;
1489
+ fetchPlayer(guildId: string): Promise<AudioPlayerState | InvalidRestRequest | null>;
1490
+ updateSession(resuming?: boolean, timeout?: number): Promise<Session | InvalidRestRequest | null>;
1491
+ decode: {
1492
+ singleTrack: (encoded: Base64, requester: unknown) => Promise<Track>;
1493
+ multipleTracks: (encodeds: Base64[], requester: unknown) => Promise<Track[]>;
1494
+ };
1495
+ lyrics: {
1496
+ get: (track: Track, skipTrackSource?: boolean) => Promise<LyricsResult | null>;
1497
+ getCurrent: (guildId: string, skipTrackSource?: boolean) => Promise<LyricsResult | null>;
1498
+ subscribe: (guildId: string, skipTrackSource?: boolean) => Promise<unknown>;
1499
+ unsubscribe: (guildId: string) => Promise<void>;
1500
+ };
1501
+ fetchStats(): Promise<BaseNodeStats>;
1502
+ fetchConnectionMetrics(): Promise<NodeLinkConnectionMetrics>;
1503
+ fetchVersion(): Promise<string>;
1504
+ fetchInfo(): Promise<NodeInfo>;
1505
+ nodeMetricSummary(): NodeMetricSummary;
1506
+ getHealthStatus(thresholds?: HealthStatusThresholdOptions): HealthStatusObject;
1507
+ routePlannerApi: {
1508
+ getStatus: () => Promise<RoutePlanner>;
1509
+ unmarkFailedAddress: (address: string) => Promise<unknown>;
1510
+ unmarkAllFailedAddresses: () => Promise<unknown>;
1511
+ };
1512
+ private validate;
1513
+ isNodeLink(): this is NodeLinkNode;
1514
+ isRyanlinkNode(): this is RyanlinkNode;
1515
+ private syncPlayerData;
1516
+ private get restAddress();
1517
+ get isNodeReconnecting(): boolean;
1518
+ private reconnect;
1519
+ get reconnectionAttemptCount(): number;
1520
+ private executeReconnect;
1521
+ private resetReconnectionAttempts;
1522
+ private resetAckTimeouts;
1523
+ private open;
1524
+ private close;
1525
+ private error;
1526
+ private message;
1527
+ private handleEvent;
1528
+ private nodeLinkEventHandler;
1529
+ private getTrackOfPayload;
1530
+ private trackStart;
1531
+ private trackEnd;
1532
+ private trackStuck;
1533
+ private trackError;
1534
+ private socketClosed;
1535
+ private SponsorBlockSegmentLoaded;
1536
+ private SponsorBlockSegmentSkipped;
1537
+ private SponsorBlockChaptersLoaded;
1538
+ private SponsorBlockChapterStarted;
1539
+ getSponsorBlock(player: Player): Promise<SponsorBlockSegment[]>;
1540
+ setSponsorBlock(player: Player, segments?: SponsorBlockSegment[]): Promise<void>;
1541
+ deleteSponsorBlock(player: Player): Promise<void>;
1542
+ private queueEnd;
1543
+ private LyricsLine;
1544
+ private LyricsFound;
1545
+ private LyricsNotFound;
1546
+ }
1547
+
1548
+ declare class NodeManager extends EventEmitter {
1549
+ emit<Event extends keyof NodeManagerEvents>(event: Event, ...args: Parameters<NodeManagerEvents[Event]>): boolean;
1550
+ on<Event extends keyof NodeManagerEvents>(event: Event, listener: NodeManagerEvents[Event]): this;
1551
+ once<Event extends keyof NodeManagerEvents>(event: Event, listener: NodeManagerEvents[Event]): this;
1552
+ off<Event extends keyof NodeManagerEvents>(event: Event, listener: NodeManagerEvents[Event]): this;
1553
+ removeListener<Event extends keyof NodeManagerEvents>(event: Event, listener: NodeManagerEvents[Event]): this;
1554
+ RyanlinkManager: RyanlinkManager;
1555
+ nodes: MiniMap<string, RyanlinkNode | NodeLinkNode>;
1556
+ constructor(RyanlinkManager: RyanlinkManager);
1557
+ disconnectAll(deleteAllNodes?: boolean, destroyPlayers?: boolean): Promise<number>;
1558
+ connectAll(): Promise<number>;
1559
+ reconnectAll(): Promise<number>;
1560
+ createNode<T extends RyanlinkNode | NodeLinkNode>(options: NodeConfiguration): T;
1561
+ leastUsedNodes(sortType?: 'memory' | 'cpuLavalink' | 'cpuSystem' | 'calls' | 'playingPlayers' | 'players'): RyanlinkNode[];
1562
+ deleteNode(node: RyanlinkNodeIdentifier | RyanlinkNode | NodeLinkNode, movePlayers?: boolean): void;
1563
+ getNode(node: RyanlinkNodeIdentifier | RyanlinkNode | NodeLinkNode): RyanlinkNode | NodeLinkNode | undefined;
1564
+ }
1565
+
1566
+ interface ManagerEvents<CustomPlayerT extends Player = Player> {
1567
+ trackStart: (player: CustomPlayerT, track: Track | null, payload: TrackStartEvent) => void;
1568
+ trackEnd: (player: CustomPlayerT, track: Track | null, payload: TrackEndEvent) => void;
1569
+ trackStuck: (player: CustomPlayerT, track: Track | null, payload: TrackStuckEvent) => void;
1570
+ trackError: (player: CustomPlayerT, track: Track | UnresolvedTrack | null, payload: TrackExceptionEvent) => void;
1571
+ queueEnd: (player: CustomPlayerT, track: Track | UnresolvedTrack | null, payload: TrackEndEvent | TrackStuckEvent | TrackExceptionEvent) => void;
1572
+ playerCreate: (player: CustomPlayerT) => void;
1573
+ playerMove: (player: CustomPlayerT, oldVoiceChannelId: string, newVoiceChannelId: string) => void;
1574
+ playerDisconnect: (player: CustomPlayerT, voiceChannelId: string) => void;
1575
+ playerReconnect: (player: CustomPlayerT, voiceChannelId: string) => void;
1576
+ playerSocketClosed: (player: CustomPlayerT, payload: WebSocketClosedEvent) => void;
1577
+ playerDestroy: (player: CustomPlayerT, destroyReason?: DestroyReasonsType) => void;
1578
+ playerUpdate: (oldPlayerJson: PlayerJson, newPlayer: CustomPlayerT) => void;
1579
+ playerClientUpdate: (oldPlayerJson: PlayerJson, newPlayer: CustomPlayerT) => void;
1580
+ playerMuteChange: (player: CustomPlayerT, selfMuted: boolean, serverMuted: boolean) => void;
1581
+ playerDeafChange: (player: CustomPlayerT, selfDeafed: boolean, serverDeafed: boolean) => void;
1582
+ playerSuppressChange: (player: CustomPlayerT, suppress: boolean) => void;
1583
+ playerQueueEmptyStart: (player: CustomPlayerT, timeoutMs: number) => void;
1584
+ playerQueueEmptyEnd: (player: CustomPlayerT) => void;
1585
+ playerQueueEmptyCancel: (player: CustomPlayerT) => void;
1586
+ playerVoiceJoin: (player: CustomPlayerT, userId: string) => void;
1587
+ playerVoiceLeave: (player: CustomPlayerT, userId: string) => void;
1588
+ SegmentsLoaded: (player: CustomPlayerT, track: Track | UnresolvedTrack | null, payload: SponsorBlockSegmentsLoaded) => void;
1589
+ SegmentSkipped: (player: CustomPlayerT, track: Track | UnresolvedTrack | null, payload: SponsorBlockSegmentSkipped) => void;
1590
+ ChapterStarted: (player: CustomPlayerT, track: Track | UnresolvedTrack | null, payload: SponsorBlockChapterStarted) => void;
1591
+ ChaptersLoaded: (player: CustomPlayerT, track: Track | UnresolvedTrack | null, payload: SponsorBlockChaptersLoaded) => void;
1592
+ debug: (eventKey: DebugEvents, eventData: {
1593
+ message: string;
1594
+ state: 'log' | 'warn' | 'error';
1595
+ error?: Error | string;
1596
+ functionLayer: string;
1597
+ }) => void;
1598
+ LyricsLine: (player: CustomPlayerT, track: Track | UnresolvedTrack | null, payload: LyricsLineEvent) => void;
1599
+ LyricsFound: (player: CustomPlayerT, track: Track | UnresolvedTrack | null, payload: LyricsFoundEvent) => void;
1600
+ LyricsNotFound: (player: CustomPlayerT, track: Track | UnresolvedTrack | null, payload: LyricsNotFoundEvent) => void;
1601
+ playerResumed: (player: CustomPlayerT, track: Track | UnresolvedTrack | null) => void;
1602
+ playerPaused: (player: CustomPlayerT, track: Track | UnresolvedTrack | null) => void;
1603
+ }
1604
+ interface BotClientOptions {
1605
+ id: string;
1606
+ username?: string;
1607
+ [x: string | number | symbol]: unknown;
1608
+ }
1609
+ interface ManagerPlayerOptions<CustomPlayerT extends Player = Player> {
1610
+ volumeDecrementer?: number;
1611
+ clientBasedPositionUpdateInterval?: number;
1612
+ defaultSearchPlatform?: SearchPlatform;
1613
+ allowCustomSources?: boolean;
1614
+ applyVolumeAsFilter?: boolean;
1615
+ requesterTransformer?: (requester: unknown) => unknown;
1616
+ onDisconnect?: {
1617
+ autoReconnect?: boolean;
1618
+ autoReconnectOnlyWithTracks?: boolean;
1619
+ destroyPlayer?: boolean;
1620
+ };
1621
+ minAutoPlayMs?: number;
1622
+ maxErrorsPerTime?: {
1623
+ threshold: number;
1624
+ maxAmount: number;
1625
+ };
1626
+ onEmptyQueue?: {
1627
+ autoPlayFunction?: (player: CustomPlayerT, lastPlayedTrack: Track) => Promise<void>;
1628
+ destroyAfterMs?: number;
1629
+ };
1630
+ autoplayConfig?: AutoplayConfig;
1631
+ useUnresolvedData?: boolean;
1632
+ enforceSponsorBlockRequestForEventEnablement?: boolean;
1633
+ }
1634
+ type PlayerConstructor<T extends Player = Player> = new (options: PlayerOptions, RyanlinkManager: RyanlinkManager, dontEmitPlayerCreateEvent?: boolean) => T;
1635
+ interface RyanConfiguration<CustomPlayerT extends Player = Player> {
1636
+ nodes: NodeConfiguration[];
1637
+ sendToShard: (guildId: string, payload: GuildShardPayload) => void;
1638
+ client?: BotClientOptions;
1639
+ queueOptions?: ManagerQueueOptions;
1640
+ playerOptions?: ManagerPlayerOptions<CustomPlayerT>;
1641
+ playerClass?: PlayerConstructor<CustomPlayerT>;
1642
+ autoSkip?: boolean;
1643
+ autoMove?: boolean;
1644
+ autoSkipOnResolveError?: boolean;
1645
+ emitNewSongsOnly?: boolean;
1646
+ linksWhitelist?: (RegExp | string)[];
1647
+ linksBlacklist?: (RegExp | string)[];
1648
+ linksAllowed?: boolean;
1649
+ advancedOptions?: {
1650
+ maxFilterFixDuration?: number;
1651
+ enableDebugEvents?: boolean;
1652
+ debugOptions?: {
1653
+ logCustomSearches?: boolean;
1654
+ noAudio?: boolean;
1655
+ playerDestroy?: {
1656
+ debugLog?: boolean;
1657
+ dontThrowError?: boolean;
1658
+ };
1659
+ };
1660
+ };
1661
+ }
1662
+
1663
+ declare class RyanlinkManager<CustomPlayerT extends Player = Player> extends EventEmitter {
1664
+ emit<Event extends keyof ManagerEvents<CustomPlayerT>>(event: Event, ...args: Parameters<ManagerEvents<CustomPlayerT>[Event]>): boolean;
1665
+ on<Event extends keyof ManagerEvents<CustomPlayerT>>(event: Event, listener: ManagerEvents<CustomPlayerT>[Event]): this;
1666
+ once<Event extends keyof ManagerEvents<CustomPlayerT>>(event: Event, listener: ManagerEvents<CustomPlayerT>[Event]): this;
1667
+ off<Event extends keyof ManagerEvents<CustomPlayerT>>(event: Event, listener: ManagerEvents<CustomPlayerT>[Event]): this;
1668
+ removeListener<Event extends keyof ManagerEvents<CustomPlayerT>>(event: Event, listener: ManagerEvents<CustomPlayerT>[Event]): this;
1669
+ options: RyanConfiguration<CustomPlayerT>;
1670
+ nodeManager: NodeManager;
1671
+ utils: RyanlinkUtils;
1672
+ initiated: boolean;
1673
+ readonly players: MiniMap<string, CustomPlayerT>;
1674
+ private applyOptions;
1675
+ private validateOptions;
1676
+ private dispatchDebug;
1677
+ private static readonly _noAudioDebugPrefix;
1678
+ private _debugNoAudio;
1679
+ constructor(options: RyanConfiguration<CustomPlayerT>);
1680
+ getPlayer(guildId: string): CustomPlayerT | undefined;
1681
+ createPlayer(options: PlayerOptions): CustomPlayerT;
1682
+ destroyPlayer(guildId: string, destroyReason?: string): Promise<void | CustomPlayerT>;
1683
+ deletePlayer(guildId: string): boolean | void;
1684
+ get useable(): boolean;
1685
+ init(clientData: BotClientOptions): Promise<this>;
1686
+ provideVoiceUpdate(data: VoicePacket | VoiceServer | VoiceState | ChannelDeletePacket): Promise<void>;
1687
+ }
1688
+
1689
+ declare const SourceMappings: Record<SearchPlatform, RyanlinkSearchPlatform | ClientCustomSearchPlatformUtils>;
1690
+ declare const BuiltinSources: {
1691
+ DuncteBot_Plugin: string;
1692
+ LavaSrc: string;
1693
+ GoogleCloudTTS: string;
1694
+ LavaSearch: string;
1695
+ JioSaavn_Engine: string;
1696
+ Filter_Engine: string;
1697
+ TimedLyrics_Engine: string;
1698
+ };
1699
+ declare const LinkMatchers: Record<SourcesRegex, RegExp>;
1700
+
1701
+ declare const version: string;
1702
+
1703
+ export { type AudioClientSearchPlatform, type AudioClientSearchPlatformResolve, type AudioFilters, AudioNodeSymbol, type AudioOutputs, type AudioPlayerState, AudioQueueSymbol, type AudioSearchFilteredResponse, type AudioSearchQuery, type AudioSearchResponse, type AudioSearchType, type AudioSourceNames, type AudioTrack, type AudioTrackInfo, AudioTrackSymbol, Autoplay, type AutoplayConfig, type Awaitable, type Base64, type BaseNodeStats, type BasePlayOptions, BuiltinSources, type CPUStats, type ChannelDeletePacket, type ChannelMixFilter, type ClientCustomSearchPlatformUtils, type ClientSearchPlatform, type CoreSourceNames, DebugEvents, DefaultQueueStore, DestroyReasons, type DestroyReasonsType, DisconnectReasons, type DisconnectReasonsType, type DistortionFilter, type DuncteSearchPlatform, type EQBand, EQList, type Exception, type ExtendedSearchPlatform, type FailingAddress, type FilterData, FilterManager, type FloatNumber, type FrameStats, type GitObject, type GuildShardPayload, type IntegerNumber, type InvalidRestRequest, type JioSaavnSearchPlatform, type KaraokeFilter, LinkMatchers, type LoadTypes, type LowPassFilter, type LyricsEvent, type LyricsEventType, type LyricsFoundEvent, type LyricsLine, type LyricsLineEvent, type LyricsNotFoundEvent, type LyricsResult, type ManagerQueueOptions, type MemoryStats, MiniMap, type MiniMapConstructor, type ModifyRequest, type NodeConfiguration, type NodeInfo, type NodeLinkConnectionMetrics, NodeLinkExclusiveEvents, NodeLinkNode, type NodeLink_ChorusFilter, type NodeLink_CompressorFilter, type NodeLink_EchoFilter, type NodeLink_HighPassFilter, type NodeLink_PhaserFilter, type NodeLink_SpatialFilter, NodeManager, type NodeManagerEvents, type NodeMessage, type NodeStats, type NodeTypes, type Opaque, type PlayConfiguration, type PlayOptions, Player, type PlayerEvent, type PlayerEventType, type PlayerEvents, type PlayerFilters, type PlayerJson, type PlayerOptions, type PlayerUpdateInfo, type PlaylistInfo, type PluginInfo, type PluginObject, Queue, type QueueChangesWatcher, QueueSaver, type QueueStoreManager, RecommendationsStrings, ReconnectionState, type RepeatMode, type RotationFilter, type RoutePlanner, type RoutePlannerTypes, RyanlinkManager, RyanlinkNode, type RyanlinkNodeIdentifier, type RyanlinkSearchPlatform, RyanlinkUtils, type SearchPlatform, type SearchQuery, type SearchResult, type Session, type Severity, SourceMappings, type SourceSearchPlatform, type SourceSearchPlatformBase, type SourcesRegex, type SponsorBlockChapterStarted, type SponsorBlockChaptersLoaded, type SponsorBlockSegment, type SponsorBlockSegmentEventType, type SponsorBlockSegmentEvents, type SponsorBlockSegmentSkipped, type SponsorBlockSegmentsLoaded, type State, type StoredQueue, type TimescaleFilter, type Track, type TrackEndEvent, type TrackEndReason, type TrackExceptionEvent, type TrackInfo, type TrackRequester, type TrackStartEvent, type TrackStuckEvent, type TremoloFilter, UnresolvedAudioTrackSymbol, type UnresolvedQuery, type UnresolvedSearchResult, type UnresolvedTrack, type UnresolvedTrackInfo, type VersionObject, type VibratoFilter, type VoiceConnectionOptions, type VoiceConnectionState, type VoicePacket, type VoiceServer, type VoiceState, type WebSocketClosedEvent, type anyObject, audioOutputsData, parseConnectionUrl, queueTrackEnd, safeStringify, validSponsorBlocks, version };