discord-player 6.5.0 → 6.6.0-dev

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Discord Player
2
2
 
3
- Discord Player is a powerful framework for JavaScript and TypeScript, built on top of **[@discord.js/voice](https://npm.im/@discordjs/voice)** library.
3
+ Discord Player is a powerful framework for JavaScript and TypeScript, built on top of **[@discordjs/voice](https://npm.im/@discordjs/voice)** library.
4
4
  It provides easy set of customizable tools to develop Discord Music bots.
5
5
 
6
6
  [![downloadsBadge](https://img.shields.io/npm/dt/discord-player?style=for-the-badge)](https://npmjs.com/discord-player)
@@ -73,6 +73,8 @@ $ yarn add ytdl-core
73
73
  $ yarn add play-dl
74
74
  # or
75
75
  $ yarn add @distube/ytdl-core
76
+ # or
77
+ $ yarn add yt-stream
76
78
  ```
77
79
 
78
80
  Done with all these? Let's write a simple music bot then.
package/dist/index.d.ts CHANGED
@@ -1,8 +1,7 @@
1
1
  import { ListenerSignature, DefaultListener, EventEmitter, Collection, Queue, QueueStrategy } from '@discord-player/utils';
2
2
  import * as discord_js from 'discord.js';
3
3
  import { User, GuildVoiceChannelResolvable, VoiceChannel, StageChannel, UserResolvable, Guild, VoiceState, VoiceBasedChannel, Snowflake, Client, GuildResolvable } from 'discord.js';
4
- import * as stream from 'stream';
5
- import { Readable, Duplex, DuplexOptions } from 'stream';
4
+ import { Readable, Duplex } from 'stream';
6
5
  import { RequestOptions } from 'http';
7
6
  import * as _discord_player_equalizer from '@discord-player/equalizer';
8
7
  import { EqualizerBand, BiquadFilters, PCMFilters, FiltersChain } from '@discord-player/equalizer';
@@ -11,7 +10,7 @@ import * as _discordjs_voice from '@discordjs/voice';
11
10
  import { StreamType, AudioPlayerError, AudioResource, VoiceConnection, AudioPlayer, AudioPlayerStatus, EndBehaviorType } from '@discordjs/voice';
12
11
  export { AudioPlayer, CreateAudioPlayerOptions, createAudioPlayer } from '@discordjs/voice';
13
12
  import { downloadOptions } from 'ytdl-core';
14
- import childProcess from 'child_process';
13
+ export * from '@discord-player/ffmpeg';
15
14
 
16
15
  declare class PlayerEventsEmitter<L extends ListenerSignature<L> = DefaultListener> extends EventEmitter<L> {
17
16
  requiredEvents: Array<keyof L>;
@@ -340,12 +339,11 @@ interface VoiceEvents {
340
339
  declare class StreamDispatcher extends EventEmitter<VoiceEvents> {
341
340
  queue: GuildQueue;
342
341
  readonly connectionTimeout: number;
343
- readonly voiceConnection: VoiceConnection;
344
- readonly audioPlayer: AudioPlayer;
342
+ voiceConnection: VoiceConnection;
343
+ audioPlayer: AudioPlayer;
345
344
  receiver: VoiceReceiverNode;
346
345
  channel: VoiceChannel | StageChannel;
347
346
  audioResource?: AudioResource<Track> | null;
348
- private readyLock;
349
347
  dsp: FiltersChain;
350
348
  /**
351
349
  * Creates new connection object
@@ -827,6 +825,22 @@ declare class FFmpegFilterer<Meta = unknown> {
827
825
  #private;
828
826
  af: GuildQueueAudioFilters<Meta>;
829
827
  constructor(af: GuildQueueAudioFilters<Meta>);
828
+ /**
829
+ * Set input args for FFmpeg
830
+ */
831
+ setInputArgs(args: string[]): void;
832
+ /**
833
+ * Get input args
834
+ */
835
+ get inputArgs(): string[];
836
+ /**
837
+ * Get encoder args
838
+ */
839
+ get encoderArgs(): string[];
840
+ /**
841
+ * Get final ffmpeg args
842
+ */
843
+ get args(): string[];
830
844
  /**
831
845
  * Create ffmpeg stream
832
846
  * @param source The stream source
@@ -1013,7 +1027,7 @@ declare const GuildQueueEvent: {
1013
1027
  /**
1014
1028
  * Emitted when audio track is added to the queue
1015
1029
  */
1016
- readonly audioTrackAdd: "audioTrackadd";
1030
+ readonly audioTrackAdd: "audioTrackAdd";
1017
1031
  /**
1018
1032
  * Emitted when audio tracks were added to the queue
1019
1033
  */
@@ -1030,6 +1044,10 @@ declare const GuildQueueEvent: {
1030
1044
  * Emitted when a connection is created
1031
1045
  */
1032
1046
  readonly connection: "connection";
1047
+ /**
1048
+ * Emitted when a voice connection is destroyed
1049
+ */
1050
+ readonly connectionDestroyed: "connectionDestroyed";
1033
1051
  /**
1034
1052
  * Emitted when the bot is disconnected from the channel
1035
1053
  */
@@ -1106,6 +1124,18 @@ declare const GuildQueueEvent: {
1106
1124
  * Audio player will play next track
1107
1125
  */
1108
1126
  readonly willPlayTrack: "willPlayTrack";
1127
+ /**
1128
+ * Emitted when a voice channel is repopulated
1129
+ */
1130
+ readonly channelPopulate: "channelPopulate";
1131
+ /**
1132
+ * Emitted when a queue is successfully created
1133
+ */
1134
+ readonly queueCreate: "queueCreate";
1135
+ /**
1136
+ * Emitted when a queue is deleted
1137
+ */
1138
+ readonly queueDelete: "queueDelete";
1109
1139
  };
1110
1140
  interface GuildQueueEvents<Meta = unknown> {
1111
1141
  /**
@@ -1137,6 +1167,11 @@ interface GuildQueueEvents<Meta = unknown> {
1137
1167
  * @param queue The queue where this event occurred
1138
1168
  */
1139
1169
  connection: (queue: GuildQueue<Meta>) => unknown;
1170
+ /**
1171
+ * Emitted when a connection is destroyed
1172
+ * @param queue The queue where this event occurred
1173
+ */
1174
+ connectionDestroyed: (queue: GuildQueue<Meta>) => unknown;
1140
1175
  /**
1141
1176
  * Emitted when the bot is disconnected from the channel
1142
1177
  * @param queue The queue where this event occurred
@@ -1256,6 +1291,21 @@ interface GuildQueueEvents<Meta = unknown> {
1256
1291
  * @param done Done callback
1257
1292
  */
1258
1293
  willPlayTrack: (queue: GuildQueue<Meta>, track: Track<unknown>, config: StreamConfig, done: () => void) => unknown;
1294
+ /**
1295
+ * Emitted when a voice channel is populated
1296
+ * @param queue The queue where this event occurred
1297
+ */
1298
+ channelPopulate: (queue: GuildQueue<Meta>) => unknown;
1299
+ /**
1300
+ * Emitted when a queue is successfully created
1301
+ * @param queue The queue where this event occurred
1302
+ */
1303
+ queueCreate: (queue: GuildQueue<Meta>) => unknown;
1304
+ /**
1305
+ * Emitted when a queue is successfully deleted
1306
+ * @param queue The queue where this event occurred
1307
+ */
1308
+ queueDelete: (queue: GuildQueue<Meta>) => unknown;
1259
1309
  }
1260
1310
  declare class GuildQueue<Meta = unknown> {
1261
1311
  #private;
@@ -1465,6 +1515,12 @@ declare class GuildQueue<Meta = unknown> {
1465
1515
  * @param options Player node initialization options
1466
1516
  */
1467
1517
  play(track: TrackLike, options?: PlayerNodeInitializerOptions<Meta>): Promise<PlayerNodeInitializationResult<Meta>>;
1518
+ /**
1519
+ * Emit an event on this queue
1520
+ * @param event The event to emit
1521
+ * @param args The args for the event
1522
+ */
1523
+ emit<K extends keyof GuildQueueEvents<Meta>>(event: K, ...args: Parameters<GuildQueueEvents<Meta>[K]>): boolean;
1468
1524
  }
1469
1525
 
1470
1526
  interface GuildQueueStatisticsMetadata {
@@ -1653,6 +1709,7 @@ interface PlayerNodeInitializerOptions<T> extends SearchOptions {
1653
1709
  audioPlayerOptions?: ResourcePlayOptions;
1654
1710
  afterSearch?: (result: SearchResult) => Promise<SearchResult>;
1655
1711
  }
1712
+ type VoiceStateHandler = (player: Player, queue: GuildQueue, oldVoiceState: VoiceState, newVoiceState: VoiceState) => Awaited<void>;
1656
1713
  declare class Player extends PlayerEventsEmitter<PlayerEvents> {
1657
1714
  #private;
1658
1715
  static readonly version: string;
@@ -1670,6 +1727,11 @@ declare class Player extends PlayerEventsEmitter<PlayerEvents> {
1670
1727
  * @param {PlayerInitOptions} [options] The player init options
1671
1728
  */
1672
1729
  constructor(client: Client, options?: PlayerInitOptions);
1730
+ /**
1731
+ * Override default voice state update handler
1732
+ * @param handler The handler callback
1733
+ */
1734
+ onVoiceStateUpdate(handler: VoiceStateHandler): void;
1673
1735
  debug(m: string): boolean;
1674
1736
  /**
1675
1737
  * Creates discord-player singleton instance.
@@ -2351,93 +2413,49 @@ declare class QueryResolver {
2351
2413
  static validateURL(q: string): boolean;
2352
2414
  }
2353
2415
 
2354
- type Callback<Args extends Array<unknown>> = (...args: Args) => unknown;
2355
- interface FFmpegInfo {
2356
- command: string | null;
2357
- metadata: string | null;
2358
- version: string | null;
2359
- isStatic: boolean;
2360
- }
2361
- interface FFmpegOptions extends DuplexOptions {
2362
- args?: string[];
2363
- shell?: boolean;
2364
- }
2365
- declare class FFmpeg extends Duplex {
2366
- /**
2367
- * FFmpeg version regex
2368
- */
2369
- static VersionRegex: RegExp;
2370
- /**
2371
- * Spawns ffmpeg process
2372
- * @param options Spawn options
2373
- */
2374
- static spawn({ args, shell }?: {
2375
- args?: string[] | undefined;
2376
- shell?: boolean | undefined;
2377
- }): childProcess.ChildProcessWithoutNullStreams;
2378
- /**
2379
- * Check if ffmpeg is available
2380
- */
2381
- static isAvailable(): boolean;
2382
- /**
2383
- * Safe locate ffmpeg
2384
- * @param force if it should relocate the command
2385
- */
2386
- static locateSafe(force?: boolean): FFmpegInfo | null | undefined;
2387
- /**
2388
- * Locate ffmpeg command. Throws error if ffmpeg is not found.
2389
- * @param force Forcefully reload
2390
- */
2391
- static locate(force?: boolean): FFmpegInfo | undefined;
2392
- /**
2393
- * Current FFmpeg process
2394
- */
2395
- process: childProcess.ChildProcessWithoutNullStreams;
2396
- /**
2397
- * Create FFmpeg duplex stream
2398
- * @param options Options to initialize ffmpeg
2399
- * @example ```typescript
2400
- * const ffmpeg = new FFmpeg({
2401
- * args: [
2402
- * '-analyzeduration', '0',
2403
- * '-loglevel', '0',
2404
- * '-f', 's16le',
2405
- * '-ar', '48000',
2406
- * '-ac', '2',
2407
- * '-af', 'bass=g=10,acompressor'
2408
- * ]
2409
- * });
2410
- *
2411
- * const pcm = input.pipe(ffmpeg);
2412
- *
2413
- * pcm.pipe(fs.createWriteStream('./audio.pcm'));
2414
- * ```
2415
- */
2416
- constructor(options?: FFmpegOptions);
2417
- get _reader(): stream.Readable;
2418
- get _writer(): stream.Writable;
2419
- private _copy;
2420
- _destroy(err: Error | null, cb: Callback<[Error | null]>): unknown;
2421
- _final(cb: Callback<[]>): void;
2422
- private _cleanup;
2423
- toString(): string;
2424
- }
2425
- declare const findFFmpeg: typeof FFmpeg.locate;
2426
-
2416
+ /**
2417
+ * Fetch guild queue history
2418
+ * @param node guild queue node resolvable
2419
+ */
2427
2420
  declare function useHistory<Meta = unknown>(node: NodeResolvable): GuildQueueHistory<Meta> | null;
2428
2421
 
2422
+ /**
2423
+ * Fetch guild queue player node
2424
+ * @param node Guild queue node resolvable
2425
+ */
2429
2426
  declare function usePlayer<Meta = unknown>(node: NodeResolvable): GuildQueuePlayerNode<Meta> | null;
2430
2427
 
2428
+ /**
2429
+ * Fetch guild queue
2430
+ * @param node Guild queue node resolvable
2431
+ */
2431
2432
  declare function useQueue<Meta = unknown>(node: NodeResolvable): GuildQueue<Meta> | null;
2432
2433
 
2433
- declare function useMasterPlayer(): Player | null;
2434
+ /**
2435
+ * Fetch main player instance
2436
+ * @deprecated
2437
+ */
2438
+ declare function useMasterPlayer(): Player | null;
2439
+ /**
2440
+ * Fetch main player instance
2441
+ */
2442
+ declare function useMainPlayer(): Player | null;
2434
2443
 
2435
- type SetterFN<T, P> = (previous: P) => T;
2436
- declare function useMetadata<T = unknown>(node: NodeResolvable): readonly [() => T, (metadata: T | SetterFN<T, T>) => void];
2444
+ type SetterFN$1<T, P> = (previous: P) => T;
2445
+ /**
2446
+ * Fetch or manipulate guild queue metadata
2447
+ * @param node Guild queue node resolvable
2448
+ */
2449
+ declare function useMetadata<T = unknown>(node: NodeResolvable): readonly [() => T, (metadata: T | SetterFN$1<T, T>) => void];
2437
2450
 
2438
2451
  interface TimelineDispatcherOptions {
2439
2452
  ignoreFilters: boolean;
2440
2453
  }
2454
+ /**
2455
+ * Fetch or manipulate current track
2456
+ * @param node Guild queue node resolvable
2457
+ * @param options Options for timeline dispatcher
2458
+ */
2441
2459
  declare function useTimeline(node: NodeResolvable, options?: Partial<TimelineDispatcherOptions>): {
2442
2460
  readonly timestamp: PlayerTimestamp;
2443
2461
  readonly volume: number;
@@ -2449,10 +2467,37 @@ declare function useTimeline(node: NodeResolvable, options?: Partial<TimelineDis
2449
2467
  setPosition(time: number): Promise<boolean>;
2450
2468
  } | null;
2451
2469
 
2470
+ /**
2471
+ * Global onAfterCreateStream handler
2472
+ * @param handler The handler callback
2473
+ */
2452
2474
  declare function onAfterCreateStream(handler: OnAfterCreateStreamHandler): void;
2453
2475
 
2476
+ /**
2477
+ * Global onBeforeCreateStream handler
2478
+ * @param handler The handler callback
2479
+ */
2454
2480
  declare function onBeforeCreateStream(handler: OnBeforeCreateStreamHandler): void;
2455
2481
 
2482
+ type SetterFN = (previous: number) => number;
2483
+ /**
2484
+ * Fetch or manipulate player volume
2485
+ * @param node Guild queue node resolvable
2486
+ */
2487
+ declare function useVolume(node: NodeResolvable): readonly [() => number, (volume: number | SetterFN) => boolean | undefined];
2488
+
2489
+ declare const instances: Collection<string, Player>;
2490
+
2491
+ declare const getPlayer: () => Player | null;
2492
+ declare const getQueue: <T = unknown>(node: NodeResolvable) => GuildQueue<T> | null;
2493
+ interface HookDeclarationContext {
2494
+ getQueue: typeof getQueue;
2495
+ getPlayer: typeof getPlayer;
2496
+ instances: typeof instances;
2497
+ }
2498
+ type HookDeclaration<T extends (...args: any[]) => any> = (context: HookDeclarationContext) => T;
2499
+ declare function createHook<T extends HookDeclaration<(...args: any[]) => any>>(hook: T): ReturnType<T>;
2500
+
2456
2501
  declare const version: string;
2457
2502
 
2458
- export { AFilterGraph, AsyncQueue, AsyncQueueAcquisitionOptions, AsyncQueueEntry, AudioFilters, BaseExtractor, CreateStreamOps, DiscordPlayerQueryResultCache, EqualizerConfigurationPreset, ExtractorExecutionContext, ExtractorExecutionEvents, ExtractorExecutionFN, ExtractorExecutionResult, ExtractorInfo, ExtractorSearchContext, FFMPEG_ARGS_PIPED, FFMPEG_ARGS_STRING, FFMPEG_SRATE_REGEX, FFmpeg, FFmpegFilterer, FFmpegInfo, FFmpegOptions, FFmpegStreamOptions, FilterGraph, FiltersName, GuildNodeCreateOptions, GuildNodeInit, GuildNodeManager, GuildQueue, GuildQueueAFiltersCache, GuildQueueAudioFilters, GuildQueueEvent, GuildQueueEvents, GuildQueueHistory, GuildQueuePlayerNode, NextFunction, NodeResolvable, OnAfterCreateStreamHandler, OnBeforeCreateStreamHandler, PlayOptions, Player, PlayerEvent, PlayerEvents, PlayerEventsEmitter, PlayerInitOptions, PlayerNodeInitializationResult, PlayerNodeInitializerOptions, PlayerProgressbarOptions, PlayerSearchResult, PlayerTimestamp, PlayerTriggeredReason, Playlist, PlaylistInitData, PlaylistJSON, PostProcessedResult, QueryCache, QueryCacheOptions, QueryCacheResolverContext, QueryExtractorSearch, QueryResolver, QueryType, QueueFilters, QueueRepeatMode, RawTrackData, RawTrackInit, ResourcePlayOptions, SearchOptions, SearchQueryType, SearchResult, SearchResultData, StreamConfig, StreamDispatcher, TimeData, TimelineDispatcherOptions, Track, TrackJSON, TrackLike, TrackResolvable, TrackSource, TypeUtil, Util, VALIDATE_QUEUE_CAP, VoiceConnectConfig, VoiceEvents, VoiceReceiverNode, VoiceReceiverOptions, VoiceUtils, WithMetadata, createFFmpegStream, findFFmpeg, onAfterCreateStream, onBeforeCreateStream, useHistory, useMasterPlayer, useMetadata, usePlayer, useQueue, useTimeline, version };
2503
+ export { AFilterGraph, AsyncQueue, AsyncQueueAcquisitionOptions, AsyncQueueEntry, AudioFilters, BaseExtractor, CreateStreamOps, DiscordPlayerQueryResultCache, EqualizerConfigurationPreset, ExtractorExecutionContext, ExtractorExecutionEvents, ExtractorExecutionFN, ExtractorExecutionResult, ExtractorInfo, ExtractorSearchContext, FFMPEG_ARGS_PIPED, FFMPEG_ARGS_STRING, FFMPEG_SRATE_REGEX, FFmpegFilterer, FFmpegStreamOptions, FilterGraph, FiltersName, GuildNodeCreateOptions, GuildNodeInit, GuildNodeManager, GuildQueue, GuildQueueAFiltersCache, GuildQueueAudioFilters, GuildQueueEvent, GuildQueueEvents, GuildQueueHistory, GuildQueuePlayerNode, HookDeclaration, HookDeclarationContext, NextFunction, NodeResolvable, OnAfterCreateStreamHandler, OnBeforeCreateStreamHandler, PlayOptions, Player, PlayerEvent, PlayerEvents, PlayerEventsEmitter, PlayerInitOptions, PlayerNodeInitializationResult, PlayerNodeInitializerOptions, PlayerProgressbarOptions, PlayerSearchResult, PlayerTimestamp, PlayerTriggeredReason, Playlist, PlaylistInitData, PlaylistJSON, PostProcessedResult, QueryCache, QueryCacheOptions, QueryCacheResolverContext, QueryExtractorSearch, QueryResolver, QueryType, QueueFilters, QueueRepeatMode, RawTrackData, RawTrackInit, ResourcePlayOptions, SearchOptions, SearchQueryType, SearchResult, SearchResultData, StreamConfig, StreamDispatcher, TimeData, TimelineDispatcherOptions, Track, TrackJSON, TrackLike, TrackResolvable, TrackSource, TypeUtil, Util, VALIDATE_QUEUE_CAP, VoiceConnectConfig, VoiceEvents, VoiceReceiverNode, VoiceReceiverOptions, VoiceStateHandler, VoiceUtils, WithMetadata, createFFmpegStream, createHook, onAfterCreateStream, onBeforeCreateStream, useHistory, useMainPlayer, useMasterPlayer, useMetadata, usePlayer, useQueue, useTimeline, useVolume, version };