discord-player 5.3.2 → 5.4.1-dev.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/dist/index.d.ts CHANGED
@@ -1,8 +1,10 @@
1
- /// <reference types="node" />
2
- import { User, VoiceChannel, StageChannel, Collection, Snowflake, Client, GuildResolvable, Guild, GuildChannelResolvable, UserResolvable } from 'discord.js';
1
+ import { User, VoiceChannel, StageChannel, Snowflake, Client, GuildResolvable, Guild, GuildChannelResolvable, VoiceState, UserResolvable } from 'discord.js';
3
2
  import { Readable, Duplex, TransformOptions, Transform } from 'stream';
3
+ import * as _discord_player_equalizer from '@discord-player/equalizer';
4
+ import { PCMFilters, EqualizerStream, BiquadStream, AudioFilter, EqualizerBand, BiquadFilters } from '@discord-player/equalizer';
4
5
  import { TypedEmitter } from 'tiny-typed-emitter';
5
- import { AudioPlayerError, AudioResource, VoiceConnection, AudioPlayer, StreamType, AudioPlayerStatus } from '@discordjs/voice';
6
+ import { AudioPlayerError, AudioResource, VoiceConnection, AudioPlayer, AudioPlayerStatus, StreamType } from '@discordjs/voice';
7
+ import { Collection } from '@discord-player/utils';
6
8
  import { downloadOptions } from 'ytdl-core';
7
9
 
8
10
  declare class Playlist {
@@ -11,7 +13,7 @@ declare class Playlist {
11
13
  title: string;
12
14
  description: string;
13
15
  thumbnail: string;
14
- type: "album" | "playlist";
16
+ type: 'album' | 'playlist';
15
17
  source: TrackSource;
16
18
  author: {
17
19
  name: string;
@@ -44,8 +46,9 @@ declare class Track {
44
46
  thumbnail: string;
45
47
  duration: string;
46
48
  views: number;
47
- requestedBy: User;
49
+ requestedBy: User | null;
48
50
  playlist?: Playlist;
51
+ queryType: SearchQueryType | null | undefined;
49
52
  readonly raw: RawTrackData;
50
53
  readonly id: string;
51
54
  /**
@@ -82,20 +85,34 @@ declare class Track {
82
85
  toJSON(hidePlaylist?: boolean): TrackJSON;
83
86
  }
84
87
 
88
+ interface CreateStreamOps {
89
+ type?: StreamType;
90
+ data?: any;
91
+ disableVolume?: boolean;
92
+ disableEqualizer?: boolean;
93
+ disableBiquad?: boolean;
94
+ eq?: EqualizerBand[];
95
+ biquadFilter?: BiquadFilters;
96
+ disableFilters?: boolean;
97
+ defaultFilters?: PCMFilters[];
98
+ }
85
99
  interface VoiceEvents {
86
100
  error: (error: AudioPlayerError) => any;
87
101
  debug: (message: string) => any;
88
102
  start: (resource: AudioResource<Track>) => any;
89
103
  finish: (resource: AudioResource<Track>) => any;
104
+ audioFilters: (filters: PCMFilters[]) => any;
90
105
  }
91
106
  declare class StreamDispatcher extends TypedEmitter<VoiceEvents> {
92
107
  readonly connectionTimeout: number;
93
108
  readonly voiceConnection: VoiceConnection;
94
109
  readonly audioPlayer: AudioPlayer;
95
110
  channel: VoiceChannel | StageChannel;
96
- audioResource?: AudioResource<Track>;
111
+ audioResource?: AudioResource<Track> | null;
97
112
  private readyLock;
98
- paused: boolean;
113
+ equalizer: EqualizerStream | null;
114
+ biquad: BiquadStream | null;
115
+ audioFilters: AudioFilter | null;
99
116
  /**
100
117
  * Creates new connection object
101
118
  * @param {VoiceConnection} connection The connection
@@ -103,17 +120,34 @@ declare class StreamDispatcher extends TypedEmitter<VoiceEvents> {
103
120
  * @private
104
121
  */
105
122
  constructor(connection: VoiceConnection, channel: VoiceChannel | StageChannel, connectionTimeout?: number);
123
+ /**
124
+ * Check if the player has been paused manually
125
+ */
126
+ get paused(): boolean;
127
+ set paused(val: boolean);
128
+ /**
129
+ * Whether or not the player is currently paused automatically or manually.
130
+ */
131
+ isPaused(): boolean;
132
+ /**
133
+ * Whether or not the player is currently buffering
134
+ */
135
+ isBuffering(): boolean;
136
+ /**
137
+ * Whether or not the player is currently playing
138
+ */
139
+ isPlaying(): boolean;
140
+ /**
141
+ * Whether or not the player is currently idle
142
+ */
143
+ isIdle(): boolean;
106
144
  /**
107
145
  * Creates stream
108
146
  * @param {Readable|Duplex|string} src The stream source
109
147
  * @param {object} [ops] Options
110
148
  * @returns {AudioResource}
111
149
  */
112
- createStream(src: Readable | Duplex | string, ops?: {
113
- type?: StreamType;
114
- data?: any;
115
- disableVolume?: boolean;
116
- }): AudioResource<Track>;
150
+ createStream(src: Readable | Duplex | string, ops?: CreateStreamOps): AudioResource<Track>;
117
151
  /**
118
152
  * The player status
119
153
  * @type {AudioPlayerStatus}
@@ -145,7 +179,7 @@ declare class StreamDispatcher extends TypedEmitter<VoiceEvents> {
145
179
  * @param {AudioResource<Track>} [resource=this.audioResource] The audio resource to play
146
180
  * @returns {Promise<StreamDispatcher>}
147
181
  */
148
- playStream(resource?: AudioResource<Track>): Promise<this>;
182
+ playStream(resource?: AudioResource<Track>): Promise<this | undefined>;
149
183
  /**
150
184
  * Sets playback volume
151
185
  * @param {number} value The volume amount
@@ -202,35 +236,118 @@ declare class VoiceUtils {
202
236
  * @param {Snowflake} guild The guild id
203
237
  * @returns {StreamDispatcher}
204
238
  */
205
- getConnection(guild: Snowflake): StreamDispatcher;
239
+ getConnection(guild: Snowflake): StreamDispatcher | undefined;
206
240
  }
207
241
 
208
- declare class ExtractorModel {
209
- name: string;
210
- private _raw;
242
+ declare class BaseExtractor {
243
+ context: ExtractorExecutionContext;
211
244
  /**
212
- * Model for raw Discord Player extractors
213
- * @param {string} extractorName Name of the extractor
214
- * @param {object} data Extractor object
245
+ * Identifier for this extractor
215
246
  */
216
- constructor(extractorName: string, data: any);
247
+ static identifier: string;
217
248
  /**
218
- * Method to handle requests from `Player.play()`
219
- * @param {string} query Query to handle
220
- * @returns {Promise<ExtractorModelData>}
249
+ * Extractor constructor
250
+ * @param context Context that instantiated this extractor
221
251
  */
222
- handle(query: string): Promise<ExtractorModelData>;
252
+ constructor(context: ExtractorExecutionContext);
223
253
  /**
224
- * Method used by Discord Player to validate query with this extractor
225
- * @param {string} query The query to validate
226
- * @returns {boolean}
254
+ * Identifier of this extractor
227
255
  */
228
- validate(query: string): boolean;
256
+ get identifier(): string;
229
257
  /**
230
- * The extractor version
231
- * @type {string}
258
+ * This method will be executed when this extractor is activated
232
259
  */
233
- get version(): string;
260
+ activate(): Promise<void>;
261
+ /**
262
+ * This method will be executed when this extractor is deactivated
263
+ */
264
+ deactivate(): Promise<void>;
265
+ /**
266
+ * Validate incoming query
267
+ * @param query The query to validate
268
+ */
269
+ validate(query: string, type?: SearchQueryType | null): Promise<boolean>;
270
+ /**
271
+ * Stream the given track
272
+ * @param info The track to stream
273
+ */
274
+ stream(info: Track): Promise<Readable | string>;
275
+ /**
276
+ * Handle the given query
277
+ * @param query The query to handle
278
+ */
279
+ handle(query: string, context: ExtractorSearchContext): Promise<ExtractorInfo>;
280
+ /**
281
+ * A stream middleware to handle streams before passing it to the player
282
+ * @param stream The incoming stream
283
+ * @param next The next function
284
+ */
285
+ handlePostStream(stream: Readable, next: NextFunction): void;
286
+ /**
287
+ * Dispatch an event to the player
288
+ * @param event The event to dispatch
289
+ * @param args The data to dispatch
290
+ */
291
+ emit<K extends keyof PlayerEvents>(event: K, ...args: Parameters<PlayerEvents[K]>): boolean;
292
+ }
293
+ type NextFunction = (error?: Error | null, stream?: Readable) => void;
294
+ interface ExtractorInfo {
295
+ playlist: Playlist | null;
296
+ tracks: Track[];
297
+ }
298
+ interface ExtractorSearchContext {
299
+ type?: SearchQueryType | null;
300
+ requestedBy?: User | null;
301
+ }
302
+
303
+ declare class ExtractorExecutionContext {
304
+ player: Player;
305
+ store: Collection<string, BaseExtractor>;
306
+ constructor(player: Player);
307
+ isRegistered(identifier: string): boolean;
308
+ get size(): number;
309
+ get(identifier: string): BaseExtractor | undefined;
310
+ register(_extractor: typeof BaseExtractor): Promise<void>;
311
+ unregister<K extends string | BaseExtractor>(_extractor: K): Promise<void>;
312
+ unregisterAll(): Promise<void>;
313
+ run<T = unknown>(fn: ExtractorExecutionFN<T>): Promise<ExtractorExecutionResult<T> | null>;
314
+ }
315
+ interface ExtractorExecutionResult<T = unknown> {
316
+ extractor: BaseExtractor;
317
+ result: T;
318
+ }
319
+ type ExtractorExecutionFN<T = unknown> = (extractor: BaseExtractor) => Promise<T | boolean>;
320
+
321
+ interface SearchResultData {
322
+ query: string;
323
+ queryType?: SearchQueryType | QueryExtractorSearch | null;
324
+ extractor?: BaseExtractor | null;
325
+ playlist?: Playlist | null;
326
+ tracks?: Track[];
327
+ requestedBy?: User | null;
328
+ }
329
+ declare class SearchResult {
330
+ player: Player;
331
+ private _data;
332
+ constructor(player: Player, _data: SearchResultData);
333
+ get query(): string;
334
+ get queryType(): SearchQueryType | `ext:${string}`;
335
+ get extractor(): BaseExtractor | null;
336
+ get playlist(): Playlist | null | undefined;
337
+ get tracks(): Track[];
338
+ get requestedBy(): User | null;
339
+ execute(): Promise<SearchResult>;
340
+ isEmpty(): boolean;
341
+ hasPlaylist(): boolean;
342
+ hasTracks(): boolean;
343
+ toJSON(): {
344
+ query: string;
345
+ queryType: SearchQueryType | `ext:${string}`;
346
+ playlist: PlaylistJSON | null;
347
+ tracks: TrackJSON[];
348
+ extractor: string | null;
349
+ requestedBy: {} | null;
350
+ };
234
351
  }
235
352
 
236
353
  declare class Player extends TypedEmitter<PlayerEvents> {
@@ -239,8 +356,8 @@ declare class Player extends TypedEmitter<PlayerEvents> {
239
356
  readonly options: PlayerInitOptions;
240
357
  readonly queues: Collection<string, Queue<unknown>>;
241
358
  readonly voiceUtils: VoiceUtils;
242
- readonly extractors: Collection<string, ExtractorModel>;
243
359
  requiredEvents: string[];
360
+ extractors: ExtractorExecutionContext;
244
361
  /**
245
362
  * Creates new Discord Player
246
363
  * @param {Client} client The Discord Client
@@ -268,8 +385,8 @@ declare class Player extends TypedEmitter<PlayerEvents> {
268
385
  isShard: boolean;
269
386
  latency: {
270
387
  client: number;
271
- udp: number;
272
- ws: number;
388
+ udp: number | undefined;
389
+ ws: number | undefined;
273
390
  eventLoop: number;
274
391
  };
275
392
  subscribers: number;
@@ -314,23 +431,9 @@ declare class Player extends TypedEmitter<PlayerEvents> {
314
431
  * Search tracks
315
432
  * @param {string|Track} query The search query
316
433
  * @param {SearchOptions} options The search options
317
- * @returns {Promise<PlayerSearchResult>}
434
+ * @returns {Promise<SearchResult>}
318
435
  */
319
- search(query: string | Track, options: SearchOptions): Promise<PlayerSearchResult>;
320
- /**
321
- * Registers extractor
322
- * @param {string} extractorName The extractor name
323
- * @param {ExtractorModel|any} extractor The extractor object
324
- * @param {boolean} [force=false] Overwrite existing extractor with this name (if available)
325
- * @returns {ExtractorModel}
326
- */
327
- use(extractorName: string, extractor: ExtractorModel | any, force?: boolean): ExtractorModel;
328
- /**
329
- * Removes registered extractor
330
- * @param {string} extractorName The extractor name
331
- * @returns {ExtractorModel}
332
- */
333
- unuse(extractorName: string): ExtractorModel;
436
+ search(query: string | Track, options: SearchOptions): Promise<SearchResult>;
334
437
  /**
335
438
  * Generates a report of the dependencies used by the `@discordjs/voice` module. Useful for debugging.
336
439
  * @returns {string}
@@ -360,14 +463,17 @@ declare class Queue<T = unknown> {
360
463
  previousTracks: Track[];
361
464
  options: PlayerOptions;
362
465
  playing: boolean;
363
- metadata?: T;
466
+ metadata?: T | null;
364
467
  repeatMode: QueueRepeatMode;
365
468
  readonly id: string;
366
469
  private _streamTime;
367
470
  _cooldownsTimeout: Collection<string, NodeJS.Timeout>;
368
471
  private _activeFilters;
369
472
  private _filtersUpdate;
370
- onBeforeCreateStream: (track: Track, source: TrackSource, queue: Queue) => Promise<Readable | undefined>;
473
+ private _lastEQBands;
474
+ private _lastAudioFilters;
475
+ private _lastBiquadFilter;
476
+ onBeforeCreateStream: (track: Track, source: SearchQueryType, queue: Queue) => Promise<Readable | undefined>;
371
477
  /**
372
478
  * Queue constructor
373
479
  * @param {Player} player The player that instantiated this queue
@@ -375,6 +481,106 @@ declare class Queue<T = unknown> {
375
481
  * @param {PlayerOptions} [options] Player options for the queue
376
482
  */
377
483
  constructor(player: Player, guild: Guild, options?: PlayerOptions);
484
+ /**
485
+ * Whether or not the PCM filterer is available
486
+ */
487
+ isFiltersAvailable(): boolean;
488
+ /**
489
+ * The PCM filterer
490
+ */
491
+ get filters(): _discord_player_equalizer.AudioFilter | null;
492
+ /**
493
+ * Check if biquad filter is available
494
+ */
495
+ isBiquadEnabled(): boolean;
496
+ /**
497
+ * Check if the equalizer is turned off
498
+ */
499
+ isBiquadOff(): boolean;
500
+ /**
501
+ * Toggles biquad on/off
502
+ */
503
+ toggleBiquad(): boolean;
504
+ /**
505
+ * Enables biquad
506
+ */
507
+ enableBiquad(): boolean;
508
+ /**
509
+ * Disables biquad
510
+ */
511
+ disableBiquad(): boolean;
512
+ /**
513
+ * Biquad filter setter
514
+ */
515
+ setBiquadFilter(filter: BiquadFilters): void;
516
+ /**
517
+ * Get active biquad filter name
518
+ */
519
+ getBiquadFilterName(): BiquadFilters | null | undefined;
520
+ /**
521
+ * Returns current biquad filter
522
+ */
523
+ getBiquadFilter(): BiquadFilters | undefined;
524
+ /**
525
+ * Set biquad filter gain value
526
+ * @param gain The gain to set
527
+ */
528
+ setBiquadGain(gain: number): void | undefined;
529
+ /**
530
+ * Set biquad cutoff frequency value
531
+ * @param val The value to set
532
+ */
533
+ setBiquadCutoff(val: number): void | undefined;
534
+ /**
535
+ * Set biquad sample rate value
536
+ * @param val The value to set
537
+ */
538
+ setBiquadSampleRate(val: number): void | undefined;
539
+ /**
540
+ * Set biquad Q value
541
+ * @param val The value to set
542
+ */
543
+ setBiquadQ(val: number): void | undefined;
544
+ /**
545
+ * Set equalizer bands
546
+ * @param bands Equalizer band multiplier array
547
+ */
548
+ setEqualizer(bands?: EqualizerBand[]): boolean;
549
+ /**
550
+ * Set particular equalizer band multiplier
551
+ * @param band The band to update
552
+ * @param gain The gain
553
+ */
554
+ setEqualizerBand(band: number, gain: number): true | null;
555
+ /**
556
+ * Returns gain value of specific equalizer band
557
+ * @param band The band to get value of
558
+ */
559
+ getEqualizerBand(band: number): number | null;
560
+ /**
561
+ * Returns entire equalizer bands
562
+ */
563
+ getEqualizer(): EqualizerBand[];
564
+ /**
565
+ * Check if equalizer is enabled
566
+ */
567
+ isEqualizerEnabled(): boolean;
568
+ /**
569
+ * Check if the equalizer is turned off
570
+ */
571
+ isEqualizerOff(): boolean;
572
+ /**
573
+ * Toggles equalizer on/off
574
+ */
575
+ toggleEqualizer(): boolean;
576
+ /**
577
+ * Enables equalizer
578
+ */
579
+ enableEqualizer(): boolean;
580
+ /**
581
+ * Disables equalizer
582
+ */
583
+ disableEqualizer(): boolean;
378
584
  /**
379
585
  * Forces next play
380
586
  * @returns {Promise<void>}
@@ -384,7 +590,7 @@ declare class Queue<T = unknown> {
384
590
  * Returns current track
385
591
  * @type {Track}
386
592
  */
387
- get current(): Track;
593
+ get current(): Track | undefined;
388
594
  /**
389
595
  * If this queue is destroyed
390
596
  * @type {boolean}
@@ -394,13 +600,13 @@ declare class Queue<T = unknown> {
394
600
  * Returns current track
395
601
  * @returns {Track}
396
602
  */
397
- nowPlaying(): Track;
603
+ nowPlaying(): Track | undefined;
398
604
  /**
399
605
  * Connects to a voice channel
400
606
  * @param {GuildChannelResolvable} channel The voice/stage channel
401
607
  * @returns {Promise<Queue>}
402
608
  */
403
- connect(channel: GuildChannelResolvable): Promise<this>;
609
+ connect(channel: GuildChannelResolvable): Promise<this | undefined>;
404
610
  private emitEnd;
405
611
  private refreshEndCooldown;
406
612
  /**
@@ -408,12 +614,12 @@ declare class Queue<T = unknown> {
408
614
  * @param {boolean} [disconnect=this.options.leaveOnStop] If it should leave on destroy
409
615
  * @returns {void}
410
616
  */
411
- destroy(disconnect?: boolean): void;
617
+ destroy(disconnect?: boolean | undefined): void;
412
618
  /**
413
619
  * Skips current track
414
620
  * @returns {boolean}
415
621
  */
416
- skip(): boolean;
622
+ skip(): boolean | undefined;
417
623
  /**
418
624
  * Adds single track to the queue
419
625
  * @param {Track} track The track to add
@@ -431,24 +637,37 @@ declare class Queue<T = unknown> {
431
637
  * @returns {boolean}
432
638
  */
433
639
  setPaused(paused?: boolean): boolean;
640
+ /**
641
+ * If the player is currently paused
642
+ */
643
+ get paused(): boolean;
644
+ set paused(val: boolean);
645
+ /**
646
+ * Pause the playback
647
+ */
648
+ pause(): boolean;
649
+ /**
650
+ * Resume the playback
651
+ */
652
+ resume(): boolean;
434
653
  /**
435
654
  * Sets bitrate
436
655
  * @param {number|auto} bitrate bitrate to set
437
656
  * @returns {void}
438
657
  */
439
- setBitrate(bitrate: number | "auto"): void;
658
+ setBitrate(bitrate: number | 'auto'): void;
440
659
  /**
441
660
  * Sets volume
442
661
  * @param {number} amount The volume amount
443
662
  * @returns {boolean}
444
663
  */
445
- setVolume(amount: number): boolean;
664
+ setVolume(amount: number): boolean | undefined;
446
665
  /**
447
666
  * Sets repeat mode
448
667
  * @param {QueueRepeatMode} mode The repeat mode
449
668
  * @returns {boolean}
450
669
  */
451
- setRepeatMode(mode: QueueRepeatMode): boolean;
670
+ setRepeatMode(mode: QueueRepeatMode): boolean | undefined;
452
671
  /**
453
672
  * The current volume amount
454
673
  * @type {number}
@@ -465,12 +684,12 @@ declare class Queue<T = unknown> {
465
684
  * Returns enabled filters
466
685
  * @returns {AudioFilters}
467
686
  */
468
- getFiltersEnabled(): (keyof QueueFilters)[];
687
+ getFiltersEnabled(): (keyof QueueFilters)[] | undefined;
469
688
  /**
470
689
  * Returns disabled filters
471
690
  * @returns {AudioFilters}
472
691
  */
473
- getFiltersDisabled(): (keyof QueueFilters)[];
692
+ getFiltersDisabled(): (keyof QueueFilters)[] | undefined;
474
693
  /**
475
694
  * Sets filters
476
695
  * @param {QueueFilters} filters Queue filters
@@ -482,7 +701,7 @@ declare class Queue<T = unknown> {
482
701
  * @param {number} position The position
483
702
  * @returns {boolean}
484
703
  */
485
- seek(position: number): Promise<boolean>;
704
+ seek(position: number): Promise<boolean | undefined>;
486
705
  /**
487
706
  * Plays previous track
488
707
  * @returns {Promise<void>}
@@ -501,19 +720,19 @@ declare class Queue<T = unknown> {
501
720
  * Shuffles this queue
502
721
  * @returns {boolean}
503
722
  */
504
- shuffle(): boolean;
723
+ shuffle(): boolean | undefined;
505
724
  /**
506
725
  * Removes a track from the queue
507
726
  * @param {Track|string|number} track The track to remove
508
727
  * @returns {Track}
509
728
  */
510
- remove(track: Track | string | number): Track;
729
+ remove(track: Track | string | number): Track | undefined;
511
730
  /**
512
731
  * Returns the index of the specified track. If found, returns the track index else returns -1.
513
732
  * @param {number|Track|string} track The track
514
733
  * @returns {number}
515
734
  */
516
- getTrackPosition(track: number | Track | string): number;
735
+ getTrackPosition(track: number | Track | string): number | undefined;
517
736
  /**
518
737
  * Jumps to particular track
519
738
  * @param {Track|number} track The track
@@ -546,13 +765,13 @@ declare class Queue<T = unknown> {
546
765
  current: string;
547
766
  end: string;
548
767
  progress: number;
549
- };
768
+ } | undefined;
550
769
  /**
551
770
  * Creates progress bar string
552
771
  * @param {PlayerProgressbarOptions} options The progress bar options
553
772
  * @returns {string}
554
773
  */
555
- createProgressBar(options?: PlayerProgressbarOptions): string;
774
+ createProgressBar(options?: PlayerProgressbarOptions): string | undefined;
556
775
  /**
557
776
  * Total duration
558
777
  * @type {Number}
@@ -574,8 +793,8 @@ declare class Queue<T = unknown> {
574
793
  isShard: boolean;
575
794
  latency: {
576
795
  client: number;
577
- udp: number;
578
- ws: number;
796
+ udp: number | undefined;
797
+ ws: number | undefined;
579
798
  eventLoop: number;
580
799
  };
581
800
  subscribers: number;
@@ -586,7 +805,7 @@ declare class Queue<T = unknown> {
586
805
  * Voice connection latency in ms
587
806
  * @type {number}
588
807
  */
589
- get ping(): number;
808
+ get ping(): number | undefined;
590
809
  /**
591
810
  * Play stream in a voice/stage channel
592
811
  * @param {Track} [src] The track to play (if empty, uses first track from the queue)
@@ -612,15 +831,15 @@ declare class Queue<T = unknown> {
612
831
  voiceChannel: string;
613
832
  options: PlayerOptions;
614
833
  tracks: TrackJSON[];
615
- };
834
+ } | undefined;
616
835
  /**
617
836
  * String representation of this queue
618
837
  * @returns {string}
619
838
  */
620
- toString(): string;
839
+ toString(): string | undefined;
621
840
  }
622
841
 
623
- declare type FiltersName = keyof QueueFilters;
842
+ type FiltersName = keyof QueueFilters;
624
843
  interface PlayerSearchResult {
625
844
  playlist: Playlist | null;
626
845
  tracks: Track[];
@@ -632,7 +851,7 @@ interface QueueFilters {
632
851
  bassboost_low?: boolean;
633
852
  bassboost?: boolean;
634
853
  bassboost_high?: boolean;
635
- "8D"?: boolean;
854
+ '8D'?: boolean;
636
855
  vaporwave?: boolean;
637
856
  nightcore?: boolean;
638
857
  phaser?: boolean;
@@ -668,10 +887,11 @@ interface QueueFilters {
668
887
  * - soundcloud
669
888
  * - youtube
670
889
  * - spotify
890
+ * - apple_music
671
891
  * - arbitrary
672
892
  * @typedef {string} TrackSource
673
893
  */
674
- declare type TrackSource = "soundcloud" | "youtube" | "spotify" | "arbitrary";
894
+ type TrackSource = 'soundcloud' | 'youtube' | 'spotify' | 'apple_music' | 'arbitrary';
675
895
  /**
676
896
  * @typedef {object} RawTrackData
677
897
  * @property {string} title The title
@@ -696,12 +916,13 @@ interface RawTrackData {
696
916
  thumbnail: string;
697
917
  duration: string;
698
918
  views: number;
699
- requestedBy: User;
919
+ requestedBy?: User | null;
700
920
  playlist?: Playlist;
701
921
  source?: TrackSource;
702
922
  engine?: any;
703
923
  live?: boolean;
704
924
  raw?: any;
925
+ queryType?: SearchQueryType;
705
926
  }
706
927
  /**
707
928
  * @typedef {object} TimeData
@@ -744,8 +965,14 @@ interface PlayerProgressbarOptions {
744
965
  * @property {number} [bufferingTimeout=3000] Buffering timeout for the stream
745
966
  * @property {boolean} [spotifyBridge=true] If player should bridge spotify source to youtube
746
967
  * @property {boolean} [disableVolume=false] If player should disable inline volume
968
+ * @property {boolean} [disableEqualizer=false] If player should disable equalizer
969
+ * @property {boolean} [disableBiquad=false] If player should disable biquad
747
970
  * @property {number} [volumeSmoothness=0] The volume transition smoothness between volume changes (lower the value to get better result)
748
971
  * Setting this or leaving this empty will disable this effect. Example: `volumeSmoothness: 0.1`
972
+ * @property {EqualizerBand[]} [equalizerBands] The equalizer bands array for 15 band equalizer.
973
+ * @property {BiquadFilters} [biquadFilter] The biquad filter initializer value
974
+ * @property {boolean} [disableFilters] Disable/enable PCM filter
975
+ * @property {PCMFilters[]} [defaultFilters] The PCM filters initializer
749
976
  * @property {Function} [onBeforeCreateStream] Runs before creating stream
750
977
  */
751
978
  interface PlayerOptions {
@@ -760,8 +987,14 @@ interface PlayerOptions {
760
987
  bufferingTimeout?: number;
761
988
  spotifyBridge?: boolean;
762
989
  disableVolume?: boolean;
990
+ disableEqualizer?: boolean;
991
+ disableBiquad?: boolean;
763
992
  volumeSmoothness?: number;
764
- onBeforeCreateStream?: (track: Track, source: TrackSource, queue: Queue) => Promise<Readable>;
993
+ equalizerBands?: EqualizerBand[];
994
+ biquadFilter?: BiquadFilters;
995
+ disableFilters?: boolean;
996
+ defaultFilters?: PCMFilters[];
997
+ onBeforeCreateStream?: (track: Track, source: SearchQueryType, queue: Queue) => Promise<Readable>;
765
998
  }
766
999
  /**
767
1000
  * @typedef {object} ExtractorModelData
@@ -797,7 +1030,7 @@ interface ExtractorModelData {
797
1030
  title: string;
798
1031
  description: string;
799
1032
  thumbnail: string;
800
- type: "album" | "playlist";
1033
+ type: 'album' | 'playlist';
801
1034
  source: TrackSource;
802
1035
  author: {
803
1036
  name: string;
@@ -839,26 +1072,35 @@ interface ExtractorModelData {
839
1072
  * - YOUTUBE_SEARCH
840
1073
  * - YOUTUBE_VIDEO
841
1074
  * - SOUNDCLOUD_SEARCH
1075
+ * - APPLE_MUSIC_SONG
1076
+ * - APPLE_MUSIC_ALBUM
1077
+ * - APPLE_MUSIC_PLAYLIST
1078
+ * - FILE
842
1079
  * @typedef {number} QueryType
843
1080
  */
844
- declare enum QueryType {
845
- AUTO = 0,
846
- YOUTUBE = 1,
847
- YOUTUBE_PLAYLIST = 2,
848
- SOUNDCLOUD_TRACK = 3,
849
- SOUNDCLOUD_PLAYLIST = 4,
850
- SOUNDCLOUD = 5,
851
- SPOTIFY_SONG = 6,
852
- SPOTIFY_ALBUM = 7,
853
- SPOTIFY_PLAYLIST = 8,
854
- FACEBOOK = 9,
855
- VIMEO = 10,
856
- ARBITRARY = 11,
857
- REVERBNATION = 12,
858
- YOUTUBE_SEARCH = 13,
859
- YOUTUBE_VIDEO = 14,
860
- SOUNDCLOUD_SEARCH = 15
861
- }
1081
+ declare const QueryType: {
1082
+ readonly AUTO: "auto";
1083
+ readonly YOUTUBE: "youtube";
1084
+ readonly YOUTUBE_PLAYLIST: "youtubePlaylist";
1085
+ readonly SOUNDCLOUD_TRACK: "soundcloudTrack";
1086
+ readonly SOUNDCLOUD_PLAYLIST: "soundcloudPlaylist";
1087
+ readonly SOUNDCLOUD: "soundcloud";
1088
+ readonly SPOTIFY_SONG: "spotifySong";
1089
+ readonly SPOTIFY_ALBUM: "spotifyAlbum";
1090
+ readonly SPOTIFY_PLAYLIST: "spotifyPlaylist";
1091
+ readonly FACEBOOK: "facebook";
1092
+ readonly VIMEO: "vimeo";
1093
+ readonly ARBITRARY: "arbitrary";
1094
+ readonly REVERBNATION: "reverbnation";
1095
+ readonly YOUTUBE_SEARCH: "youtubeSearch";
1096
+ readonly YOUTUBE_VIDEO: "youtubeVideo";
1097
+ readonly SOUNDCLOUD_SEARCH: "soundcloudSearch";
1098
+ readonly APPLE_MUSIC_SONG: "appleMusicSong";
1099
+ readonly APPLE_MUSIC_ALBUM: "appleMusicAlbum";
1100
+ readonly APPLE_MUSIC_PLAYLIST: "appleMusicPlaylist";
1101
+ readonly FILE: "file";
1102
+ };
1103
+ type SearchQueryType = keyof typeof QueryType | (typeof QueryType)[keyof typeof QueryType];
862
1104
  /**
863
1105
  * Emitted when bot gets disconnected from a voice channel
864
1106
  * @event Player#botDisconnect
@@ -923,6 +1165,13 @@ declare enum QueryType {
923
1165
  * @param {Queue} queue The queue
924
1166
  * @param {Track} track The track
925
1167
  */
1168
+ /**
1169
+ * Emitted when a track ends
1170
+ * @event Player#voiceStateUpdate
1171
+ * @param {Queue} queue The queue that this update belongs to
1172
+ * @param {VoiceState} oldState The old voice state
1173
+ * @param {VoiceState} newState The new voice state
1174
+ */
926
1175
  interface PlayerEvents {
927
1176
  botDisconnect: (queue: Queue) => any;
928
1177
  channelEmpty: (queue: Queue) => any;
@@ -935,6 +1184,7 @@ interface PlayerEvents {
935
1184
  tracksAdd: (queue: Queue, track: Track[]) => any;
936
1185
  trackStart: (queue: Queue, track: Track) => any;
937
1186
  trackEnd: (queue: Queue, track: Track) => any;
1187
+ voiceStateUpdate: (queue: Queue, oldState: VoiceState, newState: VoiceState) => any;
938
1188
  }
939
1189
  /**
940
1190
  * @typedef {object} PlayOptions
@@ -949,15 +1199,16 @@ interface PlayOptions {
949
1199
  seek?: number;
950
1200
  immediate?: boolean;
951
1201
  }
1202
+ type QueryExtractorSearch = `ext:${string}`;
952
1203
  /**
953
1204
  * @typedef {object} SearchOptions
954
1205
  * @property {UserResolvable} requestedBy The user who requested this search
955
- * @property {QueryType|string} [searchEngine=QueryType.AUTO] The query search engine, can be extractor name to target specific one (custom)
1206
+ * @property {typeof QueryType|string} [searchEngine=QueryType.AUTO] The query search engine, can be extractor name to target specific one (custom)
956
1207
  * @property {boolean} [blockExtractor=false] If it should block custom extractors
957
1208
  */
958
1209
  interface SearchOptions {
959
- requestedBy: UserResolvable;
960
- searchEngine?: QueryType | string;
1210
+ requestedBy?: UserResolvable;
1211
+ searchEngine?: SearchQueryType | QueryExtractorSearch;
961
1212
  blockExtractor?: boolean;
962
1213
  }
963
1214
  /**
@@ -994,7 +1245,7 @@ interface PlaylistInitData {
994
1245
  title: string;
995
1246
  description: string;
996
1247
  thumbnail: string;
997
- type: "album" | "playlist";
1248
+ type: 'album' | 'playlist';
998
1249
  source: TrackSource;
999
1250
  author: {
1000
1251
  name: string;
@@ -1050,7 +1301,7 @@ interface PlaylistJSON {
1050
1301
  title: string;
1051
1302
  description: string;
1052
1303
  thumbnail: string;
1053
- type: "album" | "playlist";
1304
+ type: 'album' | 'playlist';
1054
1305
  source: TrackSource;
1055
1306
  author: {
1056
1307
  name: string;
@@ -1132,12 +1383,12 @@ declare class PlayerError extends Error {
1132
1383
  get createdTimestamp(): number;
1133
1384
  valueOf(): ErrorStatusCode;
1134
1385
  toJSON(): {
1135
- stack: string;
1386
+ stack: string | undefined;
1136
1387
  code: ErrorStatusCode;
1137
1388
  message: string;
1138
1389
  created: number;
1139
1390
  };
1140
- toString(): string;
1391
+ toString(): string | undefined;
1141
1392
  }
1142
1393
 
1143
1394
  declare class QueryResolver {
@@ -1145,22 +1396,35 @@ declare class QueryResolver {
1145
1396
  * Query resolver
1146
1397
  */
1147
1398
  private constructor();
1399
+ static get regex(): {
1400
+ spotifyAlbumRegex: RegExp;
1401
+ spotifyPlaylistRegex: RegExp;
1402
+ spotifySongRegex: RegExp;
1403
+ vimeoRegex: RegExp;
1404
+ reverbnationRegex: RegExp;
1405
+ attachmentRegex: RegExp;
1406
+ appleMusicAlbumRegex: RegExp;
1407
+ appleMusicPlaylistRegex: RegExp;
1408
+ appleMusicSongRegex: RegExp;
1409
+ };
1148
1410
  /**
1149
1411
  * Resolves the given search query
1150
1412
  * @param {string} query The query
1151
1413
  * @returns {QueryType}
1152
1414
  */
1153
- static resolve(query: string): QueryType;
1415
+ static resolve(query: string): (typeof QueryType)[keyof typeof QueryType];
1154
1416
  /**
1155
1417
  * Parses vimeo id from url
1156
1418
  * @param {string} query The query
1157
1419
  * @returns {string}
1158
1420
  */
1159
- static getVimeoID(query: string): string;
1421
+ static getVimeoID(query: string): string | null | undefined;
1422
+ static validateId(q: string): boolean;
1423
+ static validateURL(q: string): boolean;
1160
1424
  }
1161
1425
 
1162
1426
  interface VolumeTransformerOptions extends TransformOptions {
1163
- type?: "s16le" | "s16be" | "s32le" | "s32be";
1427
+ type?: 's16le' | 's16be' | 's32le' | 's32be';
1164
1428
  smoothness?: number;
1165
1429
  volume?: number;
1166
1430
  }
@@ -1172,13 +1436,13 @@ declare class VolumeTransformer extends Transform {
1172
1436
  private _chunk;
1173
1437
  volume: number;
1174
1438
  private _targetVolume;
1175
- type: "s16le" | "s32le" | "s16be" | "s32be";
1439
+ type: 's16le' | 's32le' | 's16be' | 's32be';
1176
1440
  constructor(options?: VolumeTransformerOptions);
1177
1441
  _readInt(buffer: Buffer, index: number): number;
1178
1442
  _writeInt(buffer: Buffer, int: number, index: number): number;
1179
1443
  _applySmoothness(): void;
1180
1444
  _transform(chunk: Buffer, encoding: BufferEncoding, done: () => unknown): unknown;
1181
- _destroy(err: Error, cb: (error: Error) => void): void;
1445
+ _destroy(err: Error, cb: (error: Error | null) => void): void;
1182
1446
  setVolume(volume: number): void;
1183
1447
  setVolumeDecibels(db: number): void;
1184
1448
  setVolumeLogarithmic(value: number): void;
@@ -1237,7 +1501,7 @@ declare class Util {
1237
1501
  * @param {number} time The time in ms to wait
1238
1502
  * @returns {Promise<unknown>}
1239
1503
  */
1240
- static wait(time: number): Promise<any>;
1504
+ static wait(time: number): Promise<undefined>;
1241
1505
  static noop(): void;
1242
1506
  static getFetch(): Promise<any>;
1243
1507
  }
@@ -1255,8 +1519,8 @@ declare function FFMPEG_ARGS_PIPED(fmt?: string): string[];
1255
1519
  * @param stream The source stream
1256
1520
  * @param options FFmpeg stream options
1257
1521
  */
1258
- declare function createFFmpegStream(stream: Readable | Duplex | string, options?: FFmpegStreamOptions): Readable | Duplex;
1522
+ declare function createFFmpegStream(stream: Readable | Duplex | string, options?: FFmpegStreamOptions): Readable;
1259
1523
 
1260
1524
  declare const version: string;
1261
1525
 
1262
- export { AudioFilters, ErrorStatusCode, ExtractorModel, ExtractorModelData, FFMPEG_ARGS_PIPED, FFMPEG_ARGS_STRING, FFmpegStreamOptions, FiltersName, PlayOptions, Player, PlayerError, PlayerEvents, PlayerInitOptions, PlayerOptions, PlayerProgressbarOptions, PlayerSearchResult, Playlist, PlaylistInitData, PlaylistJSON, QueryResolver, QueryType, Queue, QueueFilters, QueueRepeatMode, RawTrackData, SearchOptions, StreamDispatcher, TimeData, Track, TrackJSON, TrackSource, Util, VoiceEvents, VoiceUtils, VolumeTransformer, VolumeTransformerOptions, createFFmpegStream, version };
1526
+ export { AudioFilters, BaseExtractor, ErrorStatusCode, ExtractorExecutionContext, ExtractorExecutionFN, ExtractorExecutionResult, ExtractorInfo, ExtractorModelData, ExtractorSearchContext, FFMPEG_ARGS_PIPED, FFMPEG_ARGS_STRING, FFmpegStreamOptions, FiltersName, NextFunction, PlayOptions, Player, PlayerError, PlayerEvents, PlayerInitOptions, PlayerOptions, PlayerProgressbarOptions, PlayerSearchResult, Playlist, PlaylistInitData, PlaylistJSON, QueryExtractorSearch, QueryResolver, QueryType, Queue, QueueFilters, QueueRepeatMode, RawTrackData, SearchOptions, SearchQueryType, StreamDispatcher, TimeData, Track, TrackJSON, TrackSource, Util, VoiceEvents, VoiceUtils, VolumeTransformer, VolumeTransformerOptions, createFFmpegStream, version };