discord-player 6.0.0-dev.3 → 6.0.0-dev.4

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,14 +1,22 @@
1
- import { User, VoiceChannel, StageChannel, Guild, VoiceState, VoiceBasedChannel, GuildVoiceChannelResolvable, Snowflake, Client, GuildResolvable, UserResolvable } from 'discord.js';
1
+ import { ListenerSignature, DefaultListener, EventEmitter, Collection, Queue, QueueStrategy } from '@discord-player/utils';
2
+ import * as discord_js from 'discord.js';
3
+ import { User, VoiceChannel, StageChannel, UserResolvable, Guild, VoiceState, VoiceBasedChannel, GuildVoiceChannelResolvable, Snowflake, Client, GuildResolvable } from 'discord.js';
2
4
  import * as _discordjs_voice from '@discordjs/voice';
3
- import { AudioPlayerError, AudioResource, VoiceConnection, AudioPlayer, AudioPlayerStatus, StreamType } from '@discordjs/voice';
5
+ import { AudioPlayerError, AudioResource, VoiceConnection, AudioPlayer, AudioPlayerStatus, StreamType, EndBehaviorType } from '@discordjs/voice';
6
+ import { Readable, Duplex } from 'stream';
4
7
  import * as _discord_player_equalizer from '@discord-player/equalizer';
5
8
  import { PCMFilters, EqualizerBand, BiquadFilters, FiltersChain } from '@discord-player/equalizer';
6
9
  export { AF_NIGHTCORE_RATE, AF_VAPORWAVE_RATE, BASS_EQ_BANDS, FilterType as BiquadFilterType, BiquadFilters, FiltersChain, AudioFilters as PCMAudioFilters, PCMFilters, Q_BUTTERWORTH, VolumeTransformer } from '@discord-player/equalizer';
7
- import { EventEmitter, Queue, QueueStrategy, Collection } from '@discord-player/utils';
8
- import { Readable, Duplex } from 'stream';
10
+ import { RequestOptions } from 'http';
9
11
  import Fuse from 'fuse.js';
10
12
  import { downloadOptions } from 'ytdl-core';
11
13
 
14
+ declare class PlayerEventsEmitter<L extends ListenerSignature<L> = DefaultListener> extends EventEmitter<L> {
15
+ requiredEvents: Array<keyof L>;
16
+ constructor(requiredEvents?: Array<keyof L>);
17
+ emit<K extends keyof L>(name: K, ...args: Parameters<L[K]>): boolean;
18
+ }
19
+
12
20
  declare class Playlist {
13
21
  readonly player: Player;
14
22
  tracks: Track[];
@@ -39,6 +47,104 @@ declare class Playlist {
39
47
  toJSON(withTracks?: boolean): PlaylistJSON;
40
48
  }
41
49
 
50
+ declare class ExtractorExecutionContext {
51
+ player: Player;
52
+ store: Collection<string, BaseExtractor>;
53
+ constructor(player: Player);
54
+ loadDefault(): Promise<{
55
+ success: boolean;
56
+ error: Error;
57
+ } | {
58
+ success: boolean;
59
+ error: null;
60
+ }>;
61
+ isRegistered(identifier: string): boolean;
62
+ get size(): number;
63
+ get(identifier: string): BaseExtractor | undefined;
64
+ register(_extractor: typeof BaseExtractor): Promise<void>;
65
+ unregister<K extends string | BaseExtractor>(_extractor: K): Promise<void>;
66
+ unregisterAll(): Promise<void>;
67
+ run<T = unknown>(fn: ExtractorExecutionFN<T>, filterBlocked?: boolean): Promise<ExtractorExecutionResult<T> | null>;
68
+ }
69
+ interface ExtractorExecutionResult<T = unknown> {
70
+ extractor: BaseExtractor;
71
+ result: T;
72
+ }
73
+ type ExtractorExecutionFN<T = unknown> = (extractor: BaseExtractor) => Promise<T | boolean>;
74
+
75
+ declare class BaseExtractor {
76
+ context: ExtractorExecutionContext;
77
+ /**
78
+ * Identifier for this extractor
79
+ */
80
+ static identifier: string;
81
+ /**
82
+ * Extractor constructor
83
+ * @param context Context that instantiated this extractor
84
+ */
85
+ constructor(context: ExtractorExecutionContext);
86
+ /**
87
+ * Identifier of this extractor
88
+ */
89
+ get identifier(): string;
90
+ /**
91
+ * This method will be executed when this extractor is activated
92
+ */
93
+ activate(): Promise<void>;
94
+ /**
95
+ * This method will be executed when this extractor is deactivated
96
+ */
97
+ deactivate(): Promise<void>;
98
+ /**
99
+ * Validate incoming query
100
+ * @param query The query to validate
101
+ */
102
+ validate(query: string, type?: SearchQueryType | null): Promise<boolean>;
103
+ /**
104
+ * Stream the given track
105
+ * @param info The track to stream
106
+ */
107
+ stream(info: Track): Promise<Readable | string>;
108
+ /**
109
+ * Handle the given query
110
+ * @param query The query to handle
111
+ */
112
+ handle(query: string, context: ExtractorSearchContext): Promise<ExtractorInfo>;
113
+ /**
114
+ * A stream middleware to handle streams before passing it to the player
115
+ * @param stream The incoming stream
116
+ * @param next The next function
117
+ */
118
+ handlePostStream(stream: Readable, next: NextFunction): void;
119
+ /**
120
+ * Dispatch an event to the player
121
+ * @param event The event to dispatch
122
+ * @param args The data to dispatch
123
+ */
124
+ emit<K extends keyof PlayerEvents>(event: K, ...args: Parameters<PlayerEvents[K]>): boolean;
125
+ /**
126
+ * Create extractor response
127
+ * @param playlist The playlist
128
+ * @param tracks The track array
129
+ */
130
+ createResponse(playlist?: Playlist | null, tracks?: Track[]): ExtractorInfo;
131
+ /**
132
+ * Write debug message
133
+ * @param message The debug message
134
+ */
135
+ debug(message: string): boolean;
136
+ }
137
+ type NextFunction = (error?: Error | null, stream?: Readable) => void;
138
+ interface ExtractorInfo {
139
+ playlist: Playlist | null;
140
+ tracks: Track[];
141
+ }
142
+ interface ExtractorSearchContext {
143
+ type?: SearchQueryType | null;
144
+ requestedBy?: User | null;
145
+ requestOptions?: RequestOptions;
146
+ }
147
+
42
148
  type TrackResolvable = Track | string | number;
43
149
  declare class Track {
44
150
  player: Player;
@@ -52,7 +158,8 @@ declare class Track {
52
158
  requestedBy: User | null;
53
159
  playlist?: Playlist;
54
160
  queryType: SearchQueryType | null | undefined;
55
- readonly raw: RawTrackData;
161
+ raw: RawTrackData;
162
+ extractor: BaseExtractor | null;
56
163
  readonly id: string;
57
164
  /**
58
165
  * Track constructor
@@ -118,6 +225,7 @@ declare class StreamDispatcher extends EventEmitter<VoiceEvents> {
118
225
  readonly connectionTimeout: number;
119
226
  readonly voiceConnection: VoiceConnection;
120
227
  readonly audioPlayer: AudioPlayer;
228
+ receiver: VoiceReceiverNode;
121
229
  channel: VoiceChannel | StageChannel;
122
230
  audioResource?: AudioResource<Track> | null;
123
231
  private readyLock;
@@ -211,6 +319,30 @@ declare class StreamDispatcher extends EventEmitter<VoiceEvents> {
211
319
  get streamTime(): number;
212
320
  }
213
321
 
322
+ interface VoiceReceiverOptions {
323
+ mode?: 'opus' | 'pcm';
324
+ end?: EndBehaviorType;
325
+ silenceDuration?: number;
326
+ crc?: boolean;
327
+ }
328
+ type RawTrackInit = Partial<Omit<RawTrackData, 'author' | 'playlist' | 'source' | 'engine' | 'raw' | 'queryType' | 'description' | 'views'>>;
329
+ declare class VoiceReceiverNode {
330
+ dispatcher: StreamDispatcher;
331
+ constructor(dispatcher: StreamDispatcher);
332
+ createRawTrack(stream: Readable, data?: RawTrackInit): Track;
333
+ /**
334
+ * Merge multiple streams together
335
+ * @param streams The array of streams to merge
336
+ */
337
+ mergeRecordings(streams: Readable[]): void;
338
+ /**
339
+ * Record a user in voice channel
340
+ * @param user The user to record
341
+ * @param options Recording options
342
+ */
343
+ recordUser(user: UserResolvable, options?: VoiceReceiverOptions): Readable;
344
+ }
345
+
214
346
  declare class GuildQueueHistory<Meta = unknown> {
215
347
  queue: GuildQueue<Meta>;
216
348
  tracks: Queue<Track>;
@@ -247,11 +379,15 @@ declare class GuildQueueHistory<Meta = unknown> {
247
379
  /**
248
380
  * Play the next track in the queue
249
381
  */
250
- next(): void;
382
+ next(): Promise<void>;
251
383
  /**
252
384
  * Play the previous track in the queue
253
385
  */
254
- previous(): void;
386
+ previous(): Promise<void>;
387
+ /**
388
+ * Alias to [GuildQueueHistory].previous()
389
+ */
390
+ back(): Promise<void>;
255
391
  }
256
392
 
257
393
  declare const FFMPEG_SRATE_REGEX: RegExp;
@@ -392,6 +528,11 @@ declare class GuildQueuePlayerNode<Meta = unknown> {
392
528
  * @param force Whether or not to forcefully stop the playback
393
529
  */
394
530
  stop(force?: boolean): boolean;
531
+ /**
532
+ * Play raw audio resource
533
+ * @param resource The audio resource to play
534
+ */
535
+ playRaw(resource: AudioResource): Promise<void>;
395
536
  /**
396
537
  * Play the given track
397
538
  * @param res The track to play
@@ -718,6 +859,10 @@ declare class GuildQueue<Meta = unknown> {
718
859
  timeouts: Collection<string, NodeJS.Timeout>;
719
860
  stats: GuildQueueStatistics<Meta>;
720
861
  constructor(player: Player, options: GuildNodeInit<Meta>);
862
+ /**
863
+ * The voice receiver for this queue
864
+ */
865
+ get voiceReceiver(): VoiceReceiverNode | null;
721
866
  /**
722
867
  * Write a debug message to this queue
723
868
  * @param m The message to write
@@ -790,6 +935,17 @@ declare class GuildQueue<Meta = unknown> {
790
935
  * @param track Track or playlist or array of tracks to add
791
936
  */
792
937
  addTrack(track: Track | Track[] | Playlist): void;
938
+ /**
939
+ * Remove a track from queue
940
+ * @param track The track to remove
941
+ */
942
+ removeTrack(track: TrackResolvable): Track | null;
943
+ /**
944
+ * Inserts the track to the given index
945
+ * @param track The track to insert
946
+ * @param index The index to insert the track at (defaults to 0)
947
+ */
948
+ insertTrack(track: Track, index?: number): void;
793
949
  /**
794
950
  * Connect to a voice channel
795
951
  * @param channelResolvable The voice channel to connect to
@@ -804,10 +960,27 @@ declare class GuildQueue<Meta = unknown> {
804
960
  * Delete this queue
805
961
  */
806
962
  delete(): void;
963
+ /**
964
+ * Revives this queue
965
+ * @returns
966
+ */
967
+ revive(): void;
807
968
  /**
808
969
  * Wait for this queue to initialize
809
970
  */
810
971
  awaitInitialization(): Promise<boolean>;
972
+ /**
973
+ * Set self deaf
974
+ * @param mode On/Off state
975
+ * @param reason Reason
976
+ */
977
+ setSelfDeaf(mode?: boolean, reason?: string): Promise<discord_js.GuildMember>;
978
+ /**
979
+ * Set self mute
980
+ * @param mode On/Off state
981
+ * @param reason Reason
982
+ */
983
+ setSelfMute(mode?: boolean, reason?: string): Promise<discord_js.GuildMember>;
811
984
  }
812
985
 
813
986
  interface GuildQueueStatisticsMetadata {
@@ -882,91 +1055,6 @@ declare class VoiceUtils {
882
1055
  getConnection(guild: Snowflake): StreamDispatcher | VoiceConnection | undefined;
883
1056
  }
884
1057
 
885
- declare class BaseExtractor {
886
- context: ExtractorExecutionContext;
887
- /**
888
- * Identifier for this extractor
889
- */
890
- static identifier: string;
891
- /**
892
- * Extractor constructor
893
- * @param context Context that instantiated this extractor
894
- */
895
- constructor(context: ExtractorExecutionContext);
896
- /**
897
- * Identifier of this extractor
898
- */
899
- get identifier(): string;
900
- /**
901
- * This method will be executed when this extractor is activated
902
- */
903
- activate(): Promise<void>;
904
- /**
905
- * This method will be executed when this extractor is deactivated
906
- */
907
- deactivate(): Promise<void>;
908
- /**
909
- * Validate incoming query
910
- * @param query The query to validate
911
- */
912
- validate(query: string, type?: SearchQueryType | null): Promise<boolean>;
913
- /**
914
- * Stream the given track
915
- * @param info The track to stream
916
- */
917
- stream(info: Track): Promise<Readable | string>;
918
- /**
919
- * Handle the given query
920
- * @param query The query to handle
921
- */
922
- handle(query: string, context: ExtractorSearchContext): Promise<ExtractorInfo>;
923
- /**
924
- * A stream middleware to handle streams before passing it to the player
925
- * @param stream The incoming stream
926
- * @param next The next function
927
- */
928
- handlePostStream(stream: Readable, next: NextFunction): void;
929
- /**
930
- * Dispatch an event to the player
931
- * @param event The event to dispatch
932
- * @param args The data to dispatch
933
- */
934
- emit<K extends keyof PlayerEvents>(event: K, ...args: Parameters<PlayerEvents[K]>): boolean;
935
- /**
936
- * Create extractor response
937
- * @param playlist The playlist
938
- * @param tracks The track array
939
- */
940
- createResponse(playlist?: Playlist | null, tracks?: Track[]): ExtractorInfo;
941
- }
942
- type NextFunction = (error?: Error | null, stream?: Readable) => void;
943
- interface ExtractorInfo {
944
- playlist: Playlist | null;
945
- tracks: Track[];
946
- }
947
- interface ExtractorSearchContext {
948
- type?: SearchQueryType | null;
949
- requestedBy?: User | null;
950
- }
951
-
952
- declare class ExtractorExecutionContext {
953
- player: Player;
954
- store: Collection<string, BaseExtractor>;
955
- constructor(player: Player);
956
- isRegistered(identifier: string): boolean;
957
- get size(): number;
958
- get(identifier: string): BaseExtractor | undefined;
959
- register(_extractor: typeof BaseExtractor): Promise<void>;
960
- unregister<K extends string | BaseExtractor>(_extractor: K): Promise<void>;
961
- unregisterAll(): Promise<void>;
962
- run<T = unknown>(fn: ExtractorExecutionFN<T>, filterBlocked?: boolean): Promise<ExtractorExecutionResult<T> | null>;
963
- }
964
- interface ExtractorExecutionResult<T = unknown> {
965
- extractor: BaseExtractor;
966
- result: T;
967
- }
968
- type ExtractorExecutionFN<T = unknown> = (extractor: BaseExtractor) => Promise<T | boolean>;
969
-
970
1058
  interface SearchResultData {
971
1059
  query: string;
972
1060
  queryType?: SearchQueryType | QueryExtractorSearch | null;
@@ -1061,7 +1149,7 @@ interface QueryCacheResolverContext {
1061
1149
  queryType?: SearchQueryType | `ext:${string}`;
1062
1150
  }
1063
1151
 
1064
- declare class Player extends EventEmitter<PlayerEvents> {
1152
+ declare class Player extends PlayerEventsEmitter<PlayerEvents> {
1065
1153
  #private;
1066
1154
  static _singletonKey: symbol;
1067
1155
  readonly id: string;
@@ -1069,15 +1157,15 @@ declare class Player extends EventEmitter<PlayerEvents> {
1069
1157
  readonly options: PlayerInitOptions;
1070
1158
  nodes: GuildNodeManager<unknown>;
1071
1159
  readonly voiceUtils: VoiceUtils;
1072
- requiredEvents: string[];
1073
1160
  extractors: ExtractorExecutionContext;
1074
- events: EventEmitter<GuildQueueEvents<unknown>>;
1161
+ events: PlayerEventsEmitter<GuildQueueEvents<unknown>>;
1075
1162
  /**
1076
1163
  * Creates new Discord Player
1077
1164
  * @param {Client} client The Discord Client
1078
1165
  * @param {PlayerInitOptions} [options] The player init options
1079
1166
  */
1080
1167
  constructor(client: Client, options?: PlayerInitOptions);
1168
+ debug(m: string): boolean;
1081
1169
  /**
1082
1170
  * Creates discord-player singleton instance.
1083
1171
  * @param client The client that instantiated player
@@ -1170,7 +1258,6 @@ declare class Player extends EventEmitter<PlayerEvents> {
1170
1258
  * @returns {string}
1171
1259
  */
1172
1260
  scanDeps(): string;
1173
- emit<U extends keyof PlayerEvents>(eventName: U, ...args: Parameters<PlayerEvents[U]>): boolean;
1174
1261
  [Symbol.iterator](): Generator<GuildQueue<unknown>, void, undefined>;
1175
1262
  /**
1176
1263
  * Creates `Playlist` instance
@@ -1663,7 +1750,20 @@ declare class Util {
1663
1750
  * @param {string} id Node require id
1664
1751
  * @returns {any}
1665
1752
  */
1666
- static require(id: string): any;
1753
+ static require(id: string): {
1754
+ module: any;
1755
+ error: null;
1756
+ } | {
1757
+ module: null;
1758
+ error: unknown;
1759
+ };
1760
+ static import(id: string): Promise<{
1761
+ module: any;
1762
+ error: null;
1763
+ } | {
1764
+ module: null;
1765
+ error: unknown;
1766
+ }>;
1667
1767
  /**
1668
1768
  * Asynchronous timeout
1669
1769
  * @param {number} time The time in ms to wait
@@ -1677,4 +1777,4 @@ declare class Util {
1677
1777
 
1678
1778
  declare const version: string;
1679
1779
 
1680
- export { AFilterGraph, AudioFilters, BaseExtractor, DiscordPlayerQueryResultCache, EqualizerConfigurationPreset, ErrorStatusCode, ExtractorExecutionContext, ExtractorExecutionFN, ExtractorExecutionResult, ExtractorInfo, ExtractorSearchContext, FFMPEG_ARGS_PIPED, FFMPEG_ARGS_STRING, FFMPEG_SRATE_REGEX, FFmpegFilterer, FFmpegStreamOptions, FilterGraph, FiltersName, GuildNodeCreateOptions, GuildNodeInit, GuildNodeManager, GuildQueue, GuildQueueAFiltersCache, GuildQueueAudioFilters, GuildQueueEvents, GuildQueueHistory, GuildQueuePlayerNode, NextFunction, NodeResolvable, OnAfterCreateStreamHandler, OnBeforeCreateStreamHandler, PlayOptions, Player, PlayerError, PlayerEvents, PlayerInitOptions, PlayerProgressbarOptions, PlayerSearchResult, PlayerTimestamp, PlayerTriggeredReason, Playlist, PlaylistInitData, PlaylistJSON, PostProcessedResult, QueryCache, QueryCacheOptions, QueryCacheResolverContext, QueryExtractorSearch, QueryType, QueueFilters, QueueRepeatMode, RawTrackData, ResourcePlayOptions, SearchOptions, SearchQueryType, SearchResult, SearchResultData, StreamDispatcher, TimeData, Track, TrackJSON, TrackResolvable, TrackSource, Util, VoiceConnectConfig, VoiceEvents, VoiceUtils, createFFmpegStream, version };
1780
+ export { AFilterGraph, AudioFilters, BaseExtractor, DiscordPlayerQueryResultCache, EqualizerConfigurationPreset, ErrorStatusCode, ExtractorExecutionContext, ExtractorExecutionFN, ExtractorExecutionResult, ExtractorInfo, ExtractorSearchContext, FFMPEG_ARGS_PIPED, FFMPEG_ARGS_STRING, FFMPEG_SRATE_REGEX, FFmpegFilterer, FFmpegStreamOptions, FilterGraph, FiltersName, GuildNodeCreateOptions, GuildNodeInit, GuildNodeManager, GuildQueue, GuildQueueAFiltersCache, GuildQueueAudioFilters, GuildQueueEvents, GuildQueueHistory, GuildQueuePlayerNode, NextFunction, NodeResolvable, OnAfterCreateStreamHandler, OnBeforeCreateStreamHandler, PlayOptions, Player, PlayerError, PlayerEvents, PlayerEventsEmitter, PlayerInitOptions, PlayerProgressbarOptions, PlayerSearchResult, PlayerTimestamp, PlayerTriggeredReason, Playlist, PlaylistInitData, PlaylistJSON, PostProcessedResult, QueryCache, QueryCacheOptions, QueryCacheResolverContext, QueryExtractorSearch, QueryType, QueueFilters, QueueRepeatMode, RawTrackData, RawTrackInit, ResourcePlayOptions, SearchOptions, SearchQueryType, SearchResult, SearchResultData, StreamDispatcher, TimeData, Track, TrackJSON, TrackResolvable, TrackSource, Util, VoiceConnectConfig, VoiceEvents, VoiceReceiverNode, VoiceReceiverOptions, VoiceUtils, createFFmpegStream, version };