discord-player 6.0.0-dev.4 → 6.0.0-dev.5
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 +114 -5
- package/dist/index.js +167 -39
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +164 -40
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -7
package/dist/index.d.ts
CHANGED
|
@@ -8,7 +8,6 @@ import * as _discord_player_equalizer from '@discord-player/equalizer';
|
|
|
8
8
|
import { PCMFilters, EqualizerBand, BiquadFilters, FiltersChain } from '@discord-player/equalizer';
|
|
9
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';
|
|
10
10
|
import { RequestOptions } from 'http';
|
|
11
|
-
import Fuse from 'fuse.js';
|
|
12
11
|
import { downloadOptions } from 'ytdl-core';
|
|
13
12
|
|
|
14
13
|
declare class PlayerEventsEmitter<L extends ListenerSignature<L> = DefaultListener> extends EventEmitter<L> {
|
|
@@ -39,6 +38,14 @@ declare class Playlist {
|
|
|
39
38
|
*/
|
|
40
39
|
constructor(player: Player, data: PlaylistInitData);
|
|
41
40
|
[Symbol.iterator](): Generator<Track, void, undefined>;
|
|
41
|
+
/**
|
|
42
|
+
* Estimated duration of this playlist
|
|
43
|
+
*/
|
|
44
|
+
get estimatedDuration(): number;
|
|
45
|
+
/**
|
|
46
|
+
* Formatted estimated duration of this playlist
|
|
47
|
+
*/
|
|
48
|
+
get durationFormatted(): string;
|
|
42
49
|
/**
|
|
43
50
|
* JSON representation of this playlist
|
|
44
51
|
* @param {boolean} [withTracks=true] If it should build json with tracks
|
|
@@ -258,6 +265,26 @@ declare class StreamDispatcher extends EventEmitter<VoiceEvents> {
|
|
|
258
265
|
* Whether or not the player is currently idle
|
|
259
266
|
*/
|
|
260
267
|
isIdle(): boolean;
|
|
268
|
+
/**
|
|
269
|
+
* Whether or not the voice connection has been destroyed
|
|
270
|
+
*/
|
|
271
|
+
isDestroyed(): boolean;
|
|
272
|
+
/**
|
|
273
|
+
* Whether or not the voice connection has been destroyed
|
|
274
|
+
*/
|
|
275
|
+
isDisconnected(): boolean;
|
|
276
|
+
/**
|
|
277
|
+
* Whether or not the voice connection is ready to play
|
|
278
|
+
*/
|
|
279
|
+
isReady(): boolean;
|
|
280
|
+
/**
|
|
281
|
+
* Whether or not the voice connection is signalling
|
|
282
|
+
*/
|
|
283
|
+
isSignalling(): boolean;
|
|
284
|
+
/**
|
|
285
|
+
* Whether or not the voice connection is connecting
|
|
286
|
+
*/
|
|
287
|
+
isConnecting(): boolean;
|
|
261
288
|
/**
|
|
262
289
|
* Creates stream
|
|
263
290
|
* @param {Readable} src The stream source
|
|
@@ -363,6 +390,11 @@ declare class GuildQueueHistory<Meta = unknown> {
|
|
|
363
390
|
* If history is disabled
|
|
364
391
|
*/
|
|
365
392
|
get disabled(): boolean;
|
|
393
|
+
/**
|
|
394
|
+
* Gets the size of the queue
|
|
395
|
+
*/
|
|
396
|
+
get size(): number;
|
|
397
|
+
getSize(): number;
|
|
366
398
|
/**
|
|
367
399
|
* If history is empty
|
|
368
400
|
*/
|
|
@@ -383,7 +415,7 @@ declare class GuildQueueHistory<Meta = unknown> {
|
|
|
383
415
|
/**
|
|
384
416
|
* Play the previous track in the queue
|
|
385
417
|
*/
|
|
386
|
-
previous(): Promise<void>;
|
|
418
|
+
previous(preserveCurrent?: boolean): Promise<void>;
|
|
387
419
|
/**
|
|
388
420
|
* Alias to [GuildQueueHistory].previous()
|
|
389
421
|
*/
|
|
@@ -772,6 +804,18 @@ interface GuildQueueEvents<Meta = unknown> {
|
|
|
772
804
|
* @param tracks The tracks array
|
|
773
805
|
*/
|
|
774
806
|
audioTracksAdd: (queue: GuildQueue<Meta>, track: Track[]) => unknown;
|
|
807
|
+
/**
|
|
808
|
+
* Emitted when audio track is removed from the queue
|
|
809
|
+
* @param queue The queue where this event occurred
|
|
810
|
+
* @param track The track
|
|
811
|
+
*/
|
|
812
|
+
audioTrackRemove: (queue: GuildQueue<Meta>, track: Track) => unknown;
|
|
813
|
+
/**
|
|
814
|
+
* Emitted when audio tracks are removed from the queue
|
|
815
|
+
* @param queue The queue where this event occurred
|
|
816
|
+
* @param track The track
|
|
817
|
+
*/
|
|
818
|
+
audioTracksRemove: (queue: GuildQueue<Meta>, track: Track[]) => unknown;
|
|
775
819
|
/**
|
|
776
820
|
* Emitted when a connection is created
|
|
777
821
|
* @param queue The queue where this event occurred
|
|
@@ -859,6 +903,14 @@ declare class GuildQueue<Meta = unknown> {
|
|
|
859
903
|
timeouts: Collection<string, NodeJS.Timeout>;
|
|
860
904
|
stats: GuildQueueStatistics<Meta>;
|
|
861
905
|
constructor(player: Player, options: GuildNodeInit<Meta>);
|
|
906
|
+
/**
|
|
907
|
+
* Estimated duration of this queue in ms
|
|
908
|
+
*/
|
|
909
|
+
get estimatedDuration(): number;
|
|
910
|
+
/**
|
|
911
|
+
* Formatted duration of this queue
|
|
912
|
+
*/
|
|
913
|
+
get durationFormatted(): string;
|
|
862
914
|
/**
|
|
863
915
|
* The voice receiver for this queue
|
|
864
916
|
*/
|
|
@@ -922,6 +974,18 @@ declare class GuildQueue<Meta = unknown> {
|
|
|
922
974
|
* @param mode The repeat mode to apply
|
|
923
975
|
*/
|
|
924
976
|
setRepeatMode(mode: QueueRepeatMode): void;
|
|
977
|
+
/**
|
|
978
|
+
* Gets the size of the queue
|
|
979
|
+
*/
|
|
980
|
+
get size(): number;
|
|
981
|
+
/**
|
|
982
|
+
* The size of this queue
|
|
983
|
+
*/
|
|
984
|
+
getSize(): number;
|
|
985
|
+
/**
|
|
986
|
+
* Clear this queue
|
|
987
|
+
*/
|
|
988
|
+
clear(): void;
|
|
925
989
|
/**
|
|
926
990
|
* Check if this queue has no tracks left in it
|
|
927
991
|
*/
|
|
@@ -931,7 +995,7 @@ declare class GuildQueue<Meta = unknown> {
|
|
|
931
995
|
*/
|
|
932
996
|
isPlaying(): boolean;
|
|
933
997
|
/**
|
|
934
|
-
* Add track to the queue
|
|
998
|
+
* Add track to the queue. This will emit `audioTracksAdd` when multiple tracks are added, otherwise `audioTrackAdd`.
|
|
935
999
|
* @param track Track or playlist or array of tracks to add
|
|
936
1000
|
*/
|
|
937
1001
|
addTrack(track: Track | Track[] | Playlist): void;
|
|
@@ -1067,6 +1131,12 @@ declare class SearchResult {
|
|
|
1067
1131
|
player: Player;
|
|
1068
1132
|
private _data;
|
|
1069
1133
|
constructor(player: Player, _data: SearchResultData);
|
|
1134
|
+
setQueryType(type: SearchQueryType | QueryExtractorSearch): this;
|
|
1135
|
+
setRequestedBy(user: User): this;
|
|
1136
|
+
setExtractor(extractor: BaseExtractor): this;
|
|
1137
|
+
setTracks(tracks: Track[]): this;
|
|
1138
|
+
setQuery(query: string): this;
|
|
1139
|
+
setPlaylist(playlist: Playlist): this;
|
|
1070
1140
|
/**
|
|
1071
1141
|
* The search query
|
|
1072
1142
|
*/
|
|
@@ -1128,7 +1198,6 @@ declare class QueryCache {
|
|
|
1128
1198
|
player: Player;
|
|
1129
1199
|
options: QueryCacheOptions;
|
|
1130
1200
|
timer: NodeJS.Timer;
|
|
1131
|
-
fuse: Fuse<Track>;
|
|
1132
1201
|
constructor(player: Player, options?: QueryCacheOptions);
|
|
1133
1202
|
get checkInterval(): number;
|
|
1134
1203
|
cleanup(): Promise<void>;
|
|
@@ -1663,6 +1732,7 @@ interface PlaylistJSON {
|
|
|
1663
1732
|
* @property {string[]} [blockExtractors] List of extractors to disable querying metadata from
|
|
1664
1733
|
* @property {string[]} [blockStreamFrom] List of extractors to disable streaming from
|
|
1665
1734
|
* @property {QueryCache | null} [queryCache] Query cache provider
|
|
1735
|
+
* @property {boolean} [ignoreInstance] Ignore player instance
|
|
1666
1736
|
*/
|
|
1667
1737
|
interface PlayerInitOptions {
|
|
1668
1738
|
autoRegisterExtractor?: boolean;
|
|
@@ -1674,6 +1744,7 @@ interface PlayerInitOptions {
|
|
|
1674
1744
|
blockExtractors?: string[];
|
|
1675
1745
|
blockStreamFrom?: string[];
|
|
1676
1746
|
queryCache?: QueryCache | null;
|
|
1747
|
+
ignoreInstance?: boolean;
|
|
1677
1748
|
}
|
|
1678
1749
|
|
|
1679
1750
|
declare class AudioFilters {
|
|
@@ -1775,6 +1846,44 @@ declare class Util {
|
|
|
1775
1846
|
static warn(message: string, code?: string, detail?: string): void;
|
|
1776
1847
|
}
|
|
1777
1848
|
|
|
1849
|
+
declare class QueryResolver {
|
|
1850
|
+
/**
|
|
1851
|
+
* Query resolver
|
|
1852
|
+
*/
|
|
1853
|
+
private constructor();
|
|
1854
|
+
static get regex(): {
|
|
1855
|
+
spotifyAlbumRegex: RegExp;
|
|
1856
|
+
spotifyPlaylistRegex: RegExp;
|
|
1857
|
+
spotifySongRegex: RegExp;
|
|
1858
|
+
vimeoRegex: RegExp;
|
|
1859
|
+
reverbnationRegex: RegExp;
|
|
1860
|
+
attachmentRegex: RegExp;
|
|
1861
|
+
appleMusicAlbumRegex: RegExp;
|
|
1862
|
+
appleMusicPlaylistRegex: RegExp;
|
|
1863
|
+
appleMusicSongRegex: RegExp;
|
|
1864
|
+
};
|
|
1865
|
+
/**
|
|
1866
|
+
* Resolves the given search query
|
|
1867
|
+
* @param {string} query The query
|
|
1868
|
+
* @returns {QueryType}
|
|
1869
|
+
*/
|
|
1870
|
+
static resolve(query: string): (typeof QueryType)[keyof typeof QueryType];
|
|
1871
|
+
/**
|
|
1872
|
+
* Parses vimeo id from url
|
|
1873
|
+
* @param {string} query The query
|
|
1874
|
+
* @returns {string}
|
|
1875
|
+
*/
|
|
1876
|
+
static getVimeoID(query: string): string | null | undefined;
|
|
1877
|
+
static validateId(q: string): boolean;
|
|
1878
|
+
static validateURL(q: string): boolean;
|
|
1879
|
+
}
|
|
1880
|
+
|
|
1881
|
+
declare function useHistory<Meta = unknown>(node: NodeResolvable): GuildQueueHistory<Meta> | null;
|
|
1882
|
+
|
|
1883
|
+
declare function usePlayer<Meta = unknown>(node: NodeResolvable): GuildQueuePlayerNode<Meta> | null;
|
|
1884
|
+
|
|
1885
|
+
declare function useQueue<Meta = unknown>(node: NodeResolvable): GuildQueue<Meta> | null;
|
|
1886
|
+
|
|
1778
1887
|
declare const version: string;
|
|
1779
1888
|
|
|
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 };
|
|
1889
|
+
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, QueryResolver, QueryType, QueueFilters, QueueRepeatMode, RawTrackData, RawTrackInit, ResourcePlayOptions, SearchOptions, SearchQueryType, SearchResult, SearchResultData, StreamDispatcher, TimeData, Track, TrackJSON, TrackResolvable, TrackSource, Util, VoiceConnectConfig, VoiceEvents, VoiceReceiverNode, VoiceReceiverOptions, VoiceUtils, createFFmpegStream, useHistory, usePlayer, useQueue, version };
|
package/dist/index.js
CHANGED
|
@@ -77,6 +77,7 @@ __export(src_exports, {
|
|
|
77
77
|
Playlist: () => Playlist,
|
|
78
78
|
Q_BUTTERWORTH: () => import_equalizer3.Q_BUTTERWORTH,
|
|
79
79
|
QueryCache: () => QueryCache,
|
|
80
|
+
QueryResolver: () => QueryResolver,
|
|
80
81
|
QueryType: () => QueryType,
|
|
81
82
|
QueueRepeatMode: () => QueueRepeatMode,
|
|
82
83
|
SearchResult: () => SearchResult,
|
|
@@ -87,6 +88,9 @@ __export(src_exports, {
|
|
|
87
88
|
VoiceUtils: () => VoiceUtils,
|
|
88
89
|
VolumeTransformer: () => import_equalizer3.VolumeTransformer,
|
|
89
90
|
createFFmpegStream: () => createFFmpegStream,
|
|
91
|
+
useHistory: () => useHistory,
|
|
92
|
+
usePlayer: () => usePlayer,
|
|
93
|
+
useQueue: () => useQueue,
|
|
90
94
|
version: () => version
|
|
91
95
|
});
|
|
92
96
|
module.exports = __toCommonJS(src_exports);
|
|
@@ -487,6 +491,12 @@ var Playlist = class {
|
|
|
487
491
|
*[Symbol.iterator]() {
|
|
488
492
|
yield* this.tracks;
|
|
489
493
|
}
|
|
494
|
+
get estimatedDuration() {
|
|
495
|
+
return this.tracks.reduce((p, c) => p + c.durationMS, 0);
|
|
496
|
+
}
|
|
497
|
+
get durationFormatted() {
|
|
498
|
+
return Util.buildTimeCode(Util.parseMS(this.estimatedDuration));
|
|
499
|
+
}
|
|
490
500
|
toJSON(withTracks = true) {
|
|
491
501
|
const payload = {
|
|
492
502
|
id: this.id,
|
|
@@ -525,6 +535,12 @@ var GuildQueueHistory = class {
|
|
|
525
535
|
get disabled() {
|
|
526
536
|
return this.queue.options.disableHistory;
|
|
527
537
|
}
|
|
538
|
+
get size() {
|
|
539
|
+
return this.tracks.size;
|
|
540
|
+
}
|
|
541
|
+
getSize() {
|
|
542
|
+
return this.size;
|
|
543
|
+
}
|
|
528
544
|
isEmpty() {
|
|
529
545
|
return this.tracks.size < 1;
|
|
530
546
|
}
|
|
@@ -544,14 +560,14 @@ var GuildQueueHistory = class {
|
|
|
544
560
|
}
|
|
545
561
|
this.queue.node.skip();
|
|
546
562
|
}
|
|
547
|
-
async previous() {
|
|
563
|
+
async previous(preserveCurrent = true) {
|
|
548
564
|
const track = this.tracks.dispatch();
|
|
549
565
|
if (!track) {
|
|
550
566
|
throw new Error("No previous track in the queue");
|
|
551
567
|
}
|
|
552
568
|
const current = this.currentTrack;
|
|
553
569
|
await this.queue.node.play(track, { queue: false });
|
|
554
|
-
if (current)
|
|
570
|
+
if (current && preserveCurrent)
|
|
555
571
|
this.queue.node.insert(current, 0);
|
|
556
572
|
}
|
|
557
573
|
back() {
|
|
@@ -809,6 +825,7 @@ var GuildQueuePlayerNode = class {
|
|
|
809
825
|
if (!foundTrack)
|
|
810
826
|
return null;
|
|
811
827
|
this.queue.tracks.removeOne((t) => t.id === foundTrack.id);
|
|
828
|
+
this.queue.player.events.emit("audioTrackRemove", this.queue, foundTrack);
|
|
812
829
|
return foundTrack;
|
|
813
830
|
}
|
|
814
831
|
jump(track) {
|
|
@@ -835,15 +852,20 @@ var GuildQueuePlayerNode = class {
|
|
|
835
852
|
const removed = this.remove(idx);
|
|
836
853
|
if (!removed)
|
|
837
854
|
return false;
|
|
855
|
+
const toRemove = this.queue.tracks.store.filter((_, i) => i <= idx);
|
|
838
856
|
this.queue.tracks.store.splice(0, idx, removed);
|
|
857
|
+
this.queue.player.events.emit("audioTracksRemove", this.queue, toRemove);
|
|
839
858
|
return this.skip();
|
|
840
859
|
}
|
|
841
860
|
insert(track, index = 0) {
|
|
842
861
|
if (!(track instanceof Track))
|
|
843
862
|
throw new Error("invalid track");
|
|
844
863
|
this.queue.tracks.store.splice(index, 0, track);
|
|
864
|
+
this.queue.player.events.emit("audioTrackAdd", this.queue, track);
|
|
845
865
|
}
|
|
846
866
|
stop(force = false) {
|
|
867
|
+
this.queue.tracks.clear();
|
|
868
|
+
this.queue.history.clear();
|
|
847
869
|
if (!this.queue.dispatcher)
|
|
848
870
|
return false;
|
|
849
871
|
this.queue.dispatcher.end();
|
|
@@ -879,7 +901,7 @@ var GuildQueuePlayerNode = class {
|
|
|
879
901
|
);
|
|
880
902
|
if (res && options.queue) {
|
|
881
903
|
this.queue.debug("Requested option requires to queue the track, adding the given track to queue instead...");
|
|
882
|
-
return this.queue.
|
|
904
|
+
return this.queue.addTrack(res);
|
|
883
905
|
}
|
|
884
906
|
const track = res || this.queue.tracks.dispatch();
|
|
885
907
|
if (!track) {
|
|
@@ -908,7 +930,7 @@ var GuildQueuePlayerNode = class {
|
|
|
908
930
|
this.queue.player.events.emit("playerSkip", this.queue, track);
|
|
909
931
|
this.queue.player.events.emit("playerError", this.queue, error, track);
|
|
910
932
|
this.queue.initializing = false;
|
|
911
|
-
this.play(this.queue.tracks.dispatch());
|
|
933
|
+
this.play(this.queue.tracks.dispatch(), { queue: false });
|
|
912
934
|
return;
|
|
913
935
|
}
|
|
914
936
|
throw error;
|
|
@@ -1303,7 +1325,7 @@ var GuildQueueStatistics = class {
|
|
|
1303
1325
|
memoryUsage: process.memoryUsage(),
|
|
1304
1326
|
versions: {
|
|
1305
1327
|
node: process.version,
|
|
1306
|
-
player: "6.0.0-dev.
|
|
1328
|
+
player: "6.0.0-dev.5"
|
|
1307
1329
|
}
|
|
1308
1330
|
};
|
|
1309
1331
|
}
|
|
@@ -1365,6 +1387,12 @@ var GuildQueue = class {
|
|
|
1365
1387
|
}
|
|
1366
1388
|
this.debug(`GuildQueue initialized for guild ${this.options.guild.name} (ID: ${this.options.guild.id})`);
|
|
1367
1389
|
}
|
|
1390
|
+
get estimatedDuration() {
|
|
1391
|
+
return this.tracks.store.reduce((a, c) => a + c.durationMS, 0);
|
|
1392
|
+
}
|
|
1393
|
+
get durationFormatted() {
|
|
1394
|
+
return Util.buildTimeCode(Util.parseMS(this.estimatedDuration));
|
|
1395
|
+
}
|
|
1368
1396
|
get voiceReceiver() {
|
|
1369
1397
|
return this.dispatcher?.receiver ?? null;
|
|
1370
1398
|
}
|
|
@@ -1424,6 +1452,16 @@ var GuildQueue = class {
|
|
|
1424
1452
|
setRepeatMode(mode) {
|
|
1425
1453
|
this.repeatMode = mode;
|
|
1426
1454
|
}
|
|
1455
|
+
get size() {
|
|
1456
|
+
return this.tracks.size;
|
|
1457
|
+
}
|
|
1458
|
+
getSize() {
|
|
1459
|
+
return this.size;
|
|
1460
|
+
}
|
|
1461
|
+
clear() {
|
|
1462
|
+
this.tracks.clear();
|
|
1463
|
+
this.history.clear();
|
|
1464
|
+
}
|
|
1427
1465
|
isEmpty() {
|
|
1428
1466
|
return this.tracks.size < 1;
|
|
1429
1467
|
}
|
|
@@ -1435,7 +1473,6 @@ var GuildQueue = class {
|
|
|
1435
1473
|
this.tracks.add(toAdd);
|
|
1436
1474
|
const isMulti = Array.isArray(toAdd);
|
|
1437
1475
|
if (isMulti) {
|
|
1438
|
-
this.player.events.emit("audioTrackAdd", this, toAdd[0]);
|
|
1439
1476
|
this.player.events.emit("audioTracksAdd", this, toAdd);
|
|
1440
1477
|
} else {
|
|
1441
1478
|
this.player.events.emit("audioTrackAdd", this, toAdd);
|
|
@@ -1784,6 +1821,30 @@ var SearchResult = class {
|
|
|
1784
1821
|
track.extractor = this._data.extractor || null;
|
|
1785
1822
|
});
|
|
1786
1823
|
}
|
|
1824
|
+
setQueryType(type) {
|
|
1825
|
+
this._data.queryType = type;
|
|
1826
|
+
return this;
|
|
1827
|
+
}
|
|
1828
|
+
setRequestedBy(user) {
|
|
1829
|
+
this._data.requestedBy = user;
|
|
1830
|
+
return this;
|
|
1831
|
+
}
|
|
1832
|
+
setExtractor(extractor) {
|
|
1833
|
+
this._data.extractor = extractor;
|
|
1834
|
+
return this;
|
|
1835
|
+
}
|
|
1836
|
+
setTracks(tracks) {
|
|
1837
|
+
this._data.tracks = tracks;
|
|
1838
|
+
return this;
|
|
1839
|
+
}
|
|
1840
|
+
setQuery(query) {
|
|
1841
|
+
this._data.query = query;
|
|
1842
|
+
return this;
|
|
1843
|
+
}
|
|
1844
|
+
setPlaylist(playlist) {
|
|
1845
|
+
this._data.playlist = playlist;
|
|
1846
|
+
return this;
|
|
1847
|
+
}
|
|
1787
1848
|
get query() {
|
|
1788
1849
|
return this._data.query;
|
|
1789
1850
|
}
|
|
@@ -1917,7 +1978,8 @@ var StreamDispatcher = class extends import_utils6.EventEmitter {
|
|
|
1917
1978
|
await (0, import_voice4.entersState)(this.voiceConnection, import_voice4.VoiceConnectionStatus.Connecting, this.connectionTimeout);
|
|
1918
1979
|
} catch {
|
|
1919
1980
|
try {
|
|
1920
|
-
this.voiceConnection.
|
|
1981
|
+
if (this.voiceConnection.state.status !== import_voice4.VoiceConnectionStatus.Destroyed)
|
|
1982
|
+
this.voiceConnection.destroy();
|
|
1921
1983
|
} catch (err) {
|
|
1922
1984
|
this.emit("error", err);
|
|
1923
1985
|
}
|
|
@@ -1927,7 +1989,8 @@ var StreamDispatcher = class extends import_utils6.EventEmitter {
|
|
|
1927
1989
|
this.voiceConnection.rejoin();
|
|
1928
1990
|
} else {
|
|
1929
1991
|
try {
|
|
1930
|
-
this.voiceConnection.
|
|
1992
|
+
if (this.voiceConnection.state.status !== import_voice4.VoiceConnectionStatus.Destroyed)
|
|
1993
|
+
this.voiceConnection.destroy();
|
|
1931
1994
|
} catch (err) {
|
|
1932
1995
|
this.emit("error", err);
|
|
1933
1996
|
}
|
|
@@ -1964,6 +2027,8 @@ var StreamDispatcher = class extends import_utils6.EventEmitter {
|
|
|
1964
2027
|
});
|
|
1965
2028
|
this.audioPlayer.on("debug", (m) => void this.emit("debug", m));
|
|
1966
2029
|
this.audioPlayer.on("error", (error) => void this.emit("error", error));
|
|
2030
|
+
this.voiceConnection.on("debug", (m) => void this.emit("debug", m));
|
|
2031
|
+
this.voiceConnection.on("error", (error) => void this.emit("error", error));
|
|
1967
2032
|
this.voiceConnection.subscribe(this.audioPlayer);
|
|
1968
2033
|
}
|
|
1969
2034
|
get paused() {
|
|
@@ -1984,6 +2049,21 @@ var StreamDispatcher = class extends import_utils6.EventEmitter {
|
|
|
1984
2049
|
isIdle() {
|
|
1985
2050
|
return this.audioPlayer.state.status === import_voice4.AudioPlayerStatus.Idle;
|
|
1986
2051
|
}
|
|
2052
|
+
isDestroyed() {
|
|
2053
|
+
return this.voiceConnection.state.status === import_voice4.VoiceConnectionStatus.Destroyed;
|
|
2054
|
+
}
|
|
2055
|
+
isDisconnected() {
|
|
2056
|
+
return this.voiceConnection.state.status === import_voice4.VoiceConnectionStatus.Disconnected;
|
|
2057
|
+
}
|
|
2058
|
+
isReady() {
|
|
2059
|
+
return this.voiceConnection.state.status === import_voice4.VoiceConnectionStatus.Ready;
|
|
2060
|
+
}
|
|
2061
|
+
isSignalling() {
|
|
2062
|
+
return this.voiceConnection.state.status === import_voice4.VoiceConnectionStatus.Signalling;
|
|
2063
|
+
}
|
|
2064
|
+
isConnecting() {
|
|
2065
|
+
return this.voiceConnection.state.status === import_voice4.VoiceConnectionStatus.Connecting;
|
|
2066
|
+
}
|
|
1987
2067
|
async createStream(src, ops) {
|
|
1988
2068
|
if (!ops?.disableFilters)
|
|
1989
2069
|
this.queue.debug("Initiating DSP filters pipeline...");
|
|
@@ -2043,12 +2123,16 @@ var StreamDispatcher = class extends import_utils6.EventEmitter {
|
|
|
2043
2123
|
try {
|
|
2044
2124
|
if (this.audioPlayer)
|
|
2045
2125
|
this.audioPlayer.stop(true);
|
|
2046
|
-
this.voiceConnection.
|
|
2126
|
+
if (this.voiceConnection.state.status !== import_voice4.VoiceConnectionStatus.Destroyed)
|
|
2127
|
+
this.voiceConnection.destroy();
|
|
2047
2128
|
} catch {
|
|
2048
2129
|
}
|
|
2049
2130
|
}
|
|
2050
2131
|
end() {
|
|
2051
|
-
|
|
2132
|
+
try {
|
|
2133
|
+
this.audioPlayer.stop();
|
|
2134
|
+
} catch {
|
|
2135
|
+
}
|
|
2052
2136
|
}
|
|
2053
2137
|
pause(interpolateSilence) {
|
|
2054
2138
|
const success = this.audioPlayer.pause(interpolateSilence);
|
|
@@ -2123,8 +2207,12 @@ var VoiceUtils = class {
|
|
|
2123
2207
|
}
|
|
2124
2208
|
disconnect(connection) {
|
|
2125
2209
|
if (connection instanceof StreamDispatcher)
|
|
2126
|
-
|
|
2127
|
-
|
|
2210
|
+
connection = connection.voiceConnection;
|
|
2211
|
+
try {
|
|
2212
|
+
if (connection.state.status !== import_voice5.VoiceConnectionStatus.Destroyed)
|
|
2213
|
+
return connection.destroy();
|
|
2214
|
+
} catch {
|
|
2215
|
+
}
|
|
2128
2216
|
}
|
|
2129
2217
|
getConnection(guild) {
|
|
2130
2218
|
return this.cache.get(guild) || (0, import_voice5.getVoiceConnection)(guild);
|
|
@@ -2133,7 +2221,6 @@ var VoiceUtils = class {
|
|
|
2133
2221
|
__name(VoiceUtils, "VoiceUtils");
|
|
2134
2222
|
|
|
2135
2223
|
// src/utils/QueryCache.ts
|
|
2136
|
-
var import_fuse = __toESM(require("fuse.js"));
|
|
2137
2224
|
var DEFAULT_EXPIRY_TIMEOUT = 18e6;
|
|
2138
2225
|
var _defaultCache;
|
|
2139
2226
|
var QueryCache = class {
|
|
@@ -2143,11 +2230,6 @@ var QueryCache = class {
|
|
|
2143
2230
|
this.player = player;
|
|
2144
2231
|
this.options = options;
|
|
2145
2232
|
__privateAdd(this, _defaultCache, /* @__PURE__ */ new Map());
|
|
2146
|
-
this.fuse = new import_fuse.default([], {
|
|
2147
|
-
keys: [
|
|
2148
|
-
"url"
|
|
2149
|
-
]
|
|
2150
|
-
});
|
|
2151
2233
|
this.timer = setInterval(this.cleanup.bind(this), this.checkInterval).unref();
|
|
2152
2234
|
}
|
|
2153
2235
|
get checkInterval() {
|
|
@@ -2174,10 +2256,8 @@ var QueryCache = class {
|
|
|
2174
2256
|
});
|
|
2175
2257
|
}
|
|
2176
2258
|
async resolve(context) {
|
|
2177
|
-
const
|
|
2178
|
-
|
|
2179
|
-
const result = this.fuse.search(context.query);
|
|
2180
|
-
if (!result.length)
|
|
2259
|
+
const result = __privateGet(this, _defaultCache).get(context.query);
|
|
2260
|
+
if (!result)
|
|
2181
2261
|
return new SearchResult(this.player, {
|
|
2182
2262
|
query: context.query,
|
|
2183
2263
|
requestedBy: context.requestedBy,
|
|
@@ -2185,7 +2265,7 @@ var QueryCache = class {
|
|
|
2185
2265
|
});
|
|
2186
2266
|
return new SearchResult(this.player, {
|
|
2187
2267
|
query: context.query,
|
|
2188
|
-
tracks: result.
|
|
2268
|
+
tracks: [result.data],
|
|
2189
2269
|
playlist: null,
|
|
2190
2270
|
queryType: context.queryType,
|
|
2191
2271
|
requestedBy: context.requestedBy
|
|
@@ -2243,6 +2323,8 @@ var kSingleton = Symbol("InstanceDiscordPlayerSingleton");
|
|
|
2243
2323
|
var _lastLatency, _voiceStateUpdateListener, _lagMonitorTimeout, _lagMonitorInterval;
|
|
2244
2324
|
var _Player = class extends PlayerEventsEmitter {
|
|
2245
2325
|
constructor(client, options = {}) {
|
|
2326
|
+
if (!options.ignoreInstance && kSingleton in _Player)
|
|
2327
|
+
return _Player[kSingleton];
|
|
2246
2328
|
super(["error"]);
|
|
2247
2329
|
__privateAdd(this, _lastLatency, -1);
|
|
2248
2330
|
__privateAdd(this, _voiceStateUpdateListener, this.handleVoiceState.bind(this));
|
|
@@ -2294,20 +2376,23 @@ ${this.scanDeps()}`);
|
|
|
2294
2376
|
}, this.options.lagMonitor).unref());
|
|
2295
2377
|
}
|
|
2296
2378
|
addPlayer(this);
|
|
2297
|
-
}
|
|
2298
|
-
debug(m) {
|
|
2299
|
-
return this.emit("debug", m);
|
|
2300
|
-
}
|
|
2301
|
-
static singleton(client, options = {}) {
|
|
2302
2379
|
if (!(kSingleton in _Player)) {
|
|
2303
2380
|
Object.defineProperty(_Player, kSingleton, {
|
|
2304
|
-
value:
|
|
2381
|
+
value: this,
|
|
2305
2382
|
writable: true,
|
|
2306
2383
|
configurable: true,
|
|
2307
2384
|
enumerable: false
|
|
2308
2385
|
});
|
|
2309
2386
|
}
|
|
2310
|
-
|
|
2387
|
+
}
|
|
2388
|
+
debug(m) {
|
|
2389
|
+
return this.emit("debug", m);
|
|
2390
|
+
}
|
|
2391
|
+
static singleton(client, options = {}) {
|
|
2392
|
+
return new _Player(client, {
|
|
2393
|
+
...options,
|
|
2394
|
+
ignoreInstance: false
|
|
2395
|
+
});
|
|
2311
2396
|
}
|
|
2312
2397
|
static getAllPlayers() {
|
|
2313
2398
|
return getPlayers();
|
|
@@ -2351,20 +2436,20 @@ ${this.scanDeps()}`);
|
|
|
2351
2436
|
const wasHandled = this.events.emit("voiceStateUpdate", queue, oldState, newState);
|
|
2352
2437
|
if (wasHandled && !this.options.lockVoiceStateHandler)
|
|
2353
2438
|
return;
|
|
2354
|
-
if (oldState.channelId && !newState.channelId && newState.member
|
|
2439
|
+
if (oldState.channelId && !newState.channelId && newState.member?.id === newState.guild.members.me?.id) {
|
|
2355
2440
|
try {
|
|
2356
2441
|
queue.delete();
|
|
2357
2442
|
} catch {
|
|
2358
2443
|
}
|
|
2359
2444
|
return void this.events.emit("disconnect", queue);
|
|
2360
2445
|
}
|
|
2361
|
-
if (!oldState.channelId && newState.channelId && newState.member
|
|
2446
|
+
if (!oldState.channelId && newState.channelId && newState.member?.id === newState.guild.members.me?.id) {
|
|
2362
2447
|
if (newState.serverMute != null && oldState.serverMute !== newState.serverMute) {
|
|
2363
2448
|
queue.node.setPaused(newState.serverMute);
|
|
2364
2449
|
} else if (newState.channel?.type === import_discord3.ChannelType.GuildStageVoice && newState.suppress != null && oldState.suppress !== newState.suppress) {
|
|
2365
2450
|
queue.node.setPaused(newState.suppress);
|
|
2366
2451
|
if (newState.suppress) {
|
|
2367
|
-
newState.guild.members.me
|
|
2452
|
+
newState.guild.members.me?.voice.setRequestToSpeak(true).catch(Util.noop);
|
|
2368
2453
|
}
|
|
2369
2454
|
}
|
|
2370
2455
|
}
|
|
@@ -2391,8 +2476,8 @@ ${this.scanDeps()}`);
|
|
|
2391
2476
|
}
|
|
2392
2477
|
}
|
|
2393
2478
|
if (oldState.channelId && newState.channelId && oldState.channelId !== newState.channelId) {
|
|
2394
|
-
if (newState.member
|
|
2395
|
-
if (queue.connection && newState.member
|
|
2479
|
+
if (newState.member?.id === newState.guild.members.me?.id) {
|
|
2480
|
+
if (queue.connection && newState.member?.id === newState.guild.members.me?.id)
|
|
2396
2481
|
queue.channel = newState.channel;
|
|
2397
2482
|
const emptyTimeout = queue.timeouts.get(`empty_${oldState.guild.id}`);
|
|
2398
2483
|
const channelEmpty = Util.isVoiceEmpty(queue.channel);
|
|
@@ -2461,12 +2546,13 @@ ${this.scanDeps()}`);
|
|
|
2461
2546
|
const queue = this.nodes.create(vc.guild, options.nodeOptions);
|
|
2462
2547
|
if (!queue.channel)
|
|
2463
2548
|
await queue.connect(vc, options.connectionOptions);
|
|
2464
|
-
if (!result.
|
|
2465
|
-
|
|
2549
|
+
if (!result.playlist) {
|
|
2550
|
+
queue.addTrack(result.tracks[0]);
|
|
2466
2551
|
} else {
|
|
2467
2552
|
queue.addTrack(result.playlist);
|
|
2468
|
-
await queue.node.play();
|
|
2469
2553
|
}
|
|
2554
|
+
if (!queue.node.isPlaying())
|
|
2555
|
+
await queue.node.play();
|
|
2470
2556
|
return {
|
|
2471
2557
|
track: result.tracks[0],
|
|
2472
2558
|
extractor: result.extractor,
|
|
@@ -2596,9 +2682,47 @@ _lagMonitorTimeout = new WeakMap();
|
|
|
2596
2682
|
_lagMonitorInterval = new WeakMap();
|
|
2597
2683
|
Player._singletonKey = kSingleton;
|
|
2598
2684
|
|
|
2685
|
+
// src/hooks/common.ts
|
|
2686
|
+
var getPlayer = /* @__PURE__ */ __name(() => {
|
|
2687
|
+
return getPlayers()[0];
|
|
2688
|
+
}, "getPlayer");
|
|
2689
|
+
var getQueue = /* @__PURE__ */ __name((node) => {
|
|
2690
|
+
const player = getPlayer();
|
|
2691
|
+
if (!player)
|
|
2692
|
+
return null;
|
|
2693
|
+
return player.nodes.resolve(node) || null;
|
|
2694
|
+
}, "getQueue");
|
|
2695
|
+
|
|
2696
|
+
// src/hooks/useHistory.ts
|
|
2697
|
+
function useHistory(node) {
|
|
2698
|
+
const queue = getQueue(node);
|
|
2699
|
+
if (!queue)
|
|
2700
|
+
return null;
|
|
2701
|
+
return queue.history;
|
|
2702
|
+
}
|
|
2703
|
+
__name(useHistory, "useHistory");
|
|
2704
|
+
|
|
2705
|
+
// src/hooks/usePlayer.ts
|
|
2706
|
+
function usePlayer(node) {
|
|
2707
|
+
const queue = getQueue(node);
|
|
2708
|
+
if (!queue)
|
|
2709
|
+
return null;
|
|
2710
|
+
return queue.node;
|
|
2711
|
+
}
|
|
2712
|
+
__name(usePlayer, "usePlayer");
|
|
2713
|
+
|
|
2714
|
+
// src/hooks/useQueue.ts
|
|
2715
|
+
function useQueue(node) {
|
|
2716
|
+
const queue = getQueue(node);
|
|
2717
|
+
if (!queue)
|
|
2718
|
+
return null;
|
|
2719
|
+
return queue;
|
|
2720
|
+
}
|
|
2721
|
+
__name(useQueue, "useQueue");
|
|
2722
|
+
|
|
2599
2723
|
// src/index.ts
|
|
2600
2724
|
var import_equalizer3 = require("@discord-player/equalizer");
|
|
2601
|
-
var version = "6.0.0-dev.
|
|
2725
|
+
var version = "6.0.0-dev.5";
|
|
2602
2726
|
if (!import_discord4.version.startsWith("14")) {
|
|
2603
2727
|
process.emitWarning(`Discord.js v${import_discord4.version} is incompatible with Discord Player v${version}! Please use >=v14.x of Discord.js`);
|
|
2604
2728
|
}
|
|
@@ -2632,6 +2756,7 @@ if (!import_discord4.version.startsWith("14")) {
|
|
|
2632
2756
|
Playlist,
|
|
2633
2757
|
Q_BUTTERWORTH,
|
|
2634
2758
|
QueryCache,
|
|
2759
|
+
QueryResolver,
|
|
2635
2760
|
QueryType,
|
|
2636
2761
|
QueueRepeatMode,
|
|
2637
2762
|
SearchResult,
|
|
@@ -2642,6 +2767,9 @@ if (!import_discord4.version.startsWith("14")) {
|
|
|
2642
2767
|
VoiceUtils,
|
|
2643
2768
|
VolumeTransformer,
|
|
2644
2769
|
createFFmpegStream,
|
|
2770
|
+
useHistory,
|
|
2771
|
+
usePlayer,
|
|
2772
|
+
useQueue,
|
|
2645
2773
|
version
|
|
2646
2774
|
});
|
|
2647
2775
|
//# sourceMappingURL=index.js.map
|