discord-player 7.0.0-dev.2 → 7.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/README.md CHANGED
@@ -8,26 +8,24 @@ Discord Player is a robust framework for developing Discord Music bots using Jav
8
8
 
9
9
  # Why Choose Discord Player?
10
10
 
11
- - Beginner-friendly with easy-to-understand features
12
- - TypeScript support
13
- - Offers hackable APIs.
14
- - Supports audio player sharing
15
- - Quick and easy setup process
16
- - Wide range of player management features
17
- - Offers 64+ built-in audio filter presets
18
- - Highly customizable according to your needs
19
- - Automatic queue management
20
- - Query caching support
21
- - Extensible sources through the Extractors API
22
- - Object-oriented design
23
- - Built-in stats tracker
24
- - Offers easy debugging methods
25
- - Out-of-the-box voice states handling
26
- - IP Rotation support
27
- - Easy serialization and deserialization
28
- - Limited support for [Eris](https://npmjs.com/eris)
29
-
30
- > Eris compat mode does not support `VoiceStateUpdate` handler. You need to handle it manually.
11
+ - Beginner-friendly with easy-to-understand features
12
+ - TypeScript support
13
+ - Offers hackable APIs.
14
+ - Supports audio player sharing
15
+ - Quick and easy setup process
16
+ - Wide range of player management features
17
+ - Offers 64+ built-in audio filter presets
18
+ - Highly customizable according to your needs
19
+ - Automatic queue management
20
+ - Query caching support
21
+ - Extensible sources through the Extractors API
22
+ - Object-oriented design
23
+ - Built-in stats tracker
24
+ - Offers easy debugging methods
25
+ - Out-of-the-box voice states handling
26
+ - IP Rotation support
27
+ - Easy serialization and deserialization
28
+ - Limited support for [Eris](https://npmjs.com/eris)
31
29
 
32
30
  ## Installation
33
31
 
@@ -42,30 +40,12 @@ $ npm install --save discord-player # main library
42
40
  $ npm install --save @discord-player/extractor # extractors provider
43
41
  ```
44
42
 
45
- > Discord Player recognizes `@discord-player/extractor` and loads it automatically by default. Just invoke `await player.extractors.loadDefault()`.
46
-
47
43
  #### Opus Library
48
44
 
49
- Since Discord only accepts opus packets, you need to install the opus library. Discord Player supports multiple opus libraries, such as:
50
-
51
- - [mediaplex](https://npmjs.com/mediaplex)
52
- - [@discordjs/opus](https://npmjs.com/@discordjs/opus)
53
- - [opusscript](https://npmjs.com/opusscript)
54
- - [@evan/opus](https://npmjs.com/@evan/opus)
55
- - [node-opus](https://npmjs.com/node-opus)
56
-
57
- Among these, mediaplex is the recommended library as it adds more functionalities to discord-player than just libopus interface. You can install opus libraries by running:
45
+ We recommend mediaplex for libopus. Mediaplex also helps with audio metadata extraction.
58
46
 
59
47
  ```bash
60
48
  $ npm install --save mediaplex
61
- # or
62
- $ npm install --save @discordjs/opus
63
- # or
64
- $ npm install --save opusscript
65
- # or
66
- $ npm install --save @evan/opus
67
- # or
68
- $ npm install --save node-opus
69
49
  ```
70
50
 
71
51
  #### FFmpeg or Avconv
@@ -92,17 +72,18 @@ Let's create a main player instance. This instance handles and keeps track of al
92
72
 
93
73
  ```js index.js
94
74
  const { Player } = require('discord-player');
75
+ const { DefaultExtractors } = require('@discord-player/extractor');
95
76
 
96
77
  const client = new Discord.Client({
97
- // Make sure you have 'GuildVoiceStates' intent enabled
98
- intents: ['GuildVoiceStates' /* Other intents */]
78
+ // Make sure you have 'GuildVoiceStates' intent enabled
79
+ intents: ['GuildVoiceStates' /* Other intents */],
99
80
  });
100
81
 
101
82
  // this is the entrypoint for discord-player based application
102
83
  const player = new Player(client);
103
84
 
104
85
  // Now, lets load all the default extractors, except 'YouTubeExtractor'. You can remove the filter if you want to include youtube.
105
- await player.extractors.loadDefault((ext) => ext !== 'YouTubeExtractor');
86
+ await player.extractors.loadMulti(DefaultExtractors);
106
87
  ```
107
88
 
108
89
  Discord Player is mostly events based. It emits different events based on the context and actions. Let's add a basic event listener to notify the user when a track starts to play:
@@ -110,8 +91,8 @@ Discord Player is mostly events based. It emits different events based on the co
110
91
  ```js index.js
111
92
  // this event is emitted whenever discord-player starts to play a track
112
93
  player.events.on('playerStart', (queue, track) => {
113
- // we will later define queue.metadata object while creating the queue
114
- queue.metadata.channel.send(`Started playing **${track.cleanTitle}**!`);
94
+ // we will later define queue.metadata object while creating the queue
95
+ queue.metadata.channel.send(`Started playing **${track.cleanTitle}**!`);
115
96
  });
116
97
  ```
117
98
 
@@ -149,27 +130,27 @@ Let's move on to the command part. You can define the command as per your requir
149
130
  const { useMainPlayer } = require('discord-player');
150
131
 
151
132
  export async function execute(interaction) {
152
- const player = useMainPlayer(); // get player instance
153
- const channel = interaction.member.voice.channel;
154
- if (!channel) return interaction.reply('You are not connected to a voice channel!'); // make sure we have a voice channel
155
- const query = interaction.options.getString('query', true); // we need input/query to play
156
-
157
- // let's defer the interaction as things can take time to process
158
- await interaction.deferReply();
159
-
160
- try {
161
- const { track } = await player.play(channel, query, {
162
- nodeOptions: {
163
- // nodeOptions are the options for guild node (aka your queue in simple word)
164
- metadata: interaction // we can access this metadata object using queue.metadata later on
165
- }
166
- });
167
-
168
- return interaction.followUp(`**${track.cleanTitle}** enqueued!`);
169
- } catch (e) {
170
- // let's return error if something failed
171
- return interaction.followUp(`Something went wrong: ${e}`);
172
- }
133
+ const player = useMainPlayer(); // get player instance
134
+ const channel = interaction.member.voice.channel;
135
+ if (!channel) return interaction.reply('You are not connected to a voice channel!'); // make sure we have a voice channel
136
+ const query = interaction.options.getString('query', true); // we need input/query to play
137
+
138
+ // let's defer the interaction as things can take time to process
139
+ await interaction.deferReply();
140
+
141
+ try {
142
+ const { track } = await player.play(channel, query, {
143
+ nodeOptions: {
144
+ // nodeOptions are the options for guild node (aka your queue in simple word)
145
+ metadata: interaction, // we can access this metadata object using queue.metadata later on
146
+ },
147
+ });
148
+
149
+ return interaction.followUp(`**${track.cleanTitle}** enqueued!`);
150
+ } catch (e) {
151
+ // let's return error if something failed
152
+ return interaction.followUp(`Something went wrong: ${e}`);
153
+ }
173
154
  }
174
155
  ```
175
156
 
package/dist/index.d.ts CHANGED
@@ -7,11 +7,10 @@ import { EqualizerBand, BiquadFilters, PCMFilters, FiltersChain } from '@discord
7
7
  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';
8
8
  import * as stream from 'stream';
9
9
  import { Readable, Duplex } from 'stream';
10
- import * as _discord_player_extractor from '@discord-player/extractor';
11
- import { BridgeProvider } from '@discord-player/extractor';
12
10
  import { RequestOptions } from 'http';
13
11
  import { StreamType, AudioPlayerError, AudioResource, VoiceConnection, AudioPlayer, AudioPlayerStatus } from 'discord-voip';
14
12
  export { AudioPlayer, CreateAudioPlayerOptions, JoinConfig, JoinVoiceChannelOptions, createAudioPlayer, getVoiceConnection, getVoiceConnections, joinVoiceChannel } from 'discord-voip';
13
+ import { BridgeProvider } from '@discord-player/extractor';
15
14
  import { FFmpegLib } from '@discord-player/ffmpeg';
16
15
  export * from '@discord-player/ffmpeg';
17
16
 
@@ -954,147 +953,118 @@ declare const GuildQueueEvent: {
954
953
  /**
955
954
  * Emitted when audio track is added to the queue
956
955
  */
957
- readonly audioTrackAdd: "audioTrackAdd";
958
956
  readonly AudioTrackAdd: "audioTrackAdd";
959
957
  /**
960
958
  * Emitted when audio tracks were added to the queue
961
959
  */
962
- readonly audioTracksAdd: "audioTracksAdd";
963
960
  readonly AudioTracksAdd: "audioTracksAdd";
964
961
  /**
965
962
  * Emitted when audio track is removed from the queue
966
963
  */
967
- readonly audioTrackRemove: "audioTrackRemove";
968
964
  readonly AudioTrackRemove: "audioTrackRemove";
969
965
  /**
970
966
  * Emitted when audio tracks are removed from the queue
971
967
  */
972
- readonly audioTracksRemove: "audioTracksRemove";
973
968
  readonly AudioTracksRemove: "audioTracksRemove";
974
969
  /**
975
970
  * Emitted when a connection is created
976
971
  */
977
- readonly connection: "connection";
978
972
  readonly Connection: "connection";
979
973
  /**
980
974
  * Emitted when a voice connection is destroyed
981
975
  */
982
- readonly connectionDestroyed: "connectionDestroyed";
983
976
  readonly ConnectionDestroyed: "connectionDestroyed";
984
977
  /**
985
978
  * Emitted when the bot is disconnected from the channel
986
979
  */
987
- readonly disconnect: "disconnect";
988
980
  readonly Disconnect: "disconnect";
989
981
  /**
990
982
  * Emitted when the queue sends a debug info
991
983
  */
992
- readonly debug: "debug";
993
984
  readonly Debug: "debug";
994
985
  /**
995
986
  * Emitted when the queue encounters error
996
987
  */
997
- readonly error: "error";
998
988
  readonly Error: "error";
999
989
  /**
1000
990
  * Emitted when the voice channel is empty
1001
991
  */
1002
- readonly emptyChannel: "emptyChannel";
1003
992
  readonly EmptyChannel: "emptyChannel";
1004
993
  /**
1005
994
  * Emitted when the queue is empty
1006
995
  */
1007
- readonly emptyQueue: "emptyQueue";
1008
996
  readonly EmptyQueue: "emptyQueue";
1009
997
  /**
1010
998
  * Emitted when the audio player starts streaming audio track
1011
999
  */
1012
- readonly playerStart: "playerStart";
1013
1000
  readonly PlayerStart: "playerStart";
1014
1001
  /**
1015
1002
  * Emitted when the audio player errors while streaming audio track
1016
1003
  */
1017
- readonly playerError: "playerError";
1018
1004
  readonly PlayerError: "playerError";
1019
1005
  /**
1020
1006
  * Emitted when the audio player finishes streaming audio track
1021
1007
  */
1022
- readonly playerFinish: "playerFinish";
1023
1008
  readonly PlayerFinish: "playerFinish";
1024
1009
  /**
1025
1010
  * Emitted when the audio player skips current track
1026
1011
  */
1027
- readonly playerSkip: "playerSkip";
1028
1012
  readonly PlayerSkip: "playerSkip";
1029
1013
  /**
1030
1014
  * Emitted when the audio player is triggered
1031
1015
  */
1032
- readonly playerTrigger: "playerTrigger";
1033
1016
  readonly PlayerTrigger: "playerTrigger";
1034
1017
  /**
1035
1018
  * Emitted when the voice state is updated. Consuming this event may disable default voice state update handler if `Player.isVoiceStateHandlerLocked()` returns `false`.
1036
1019
  */
1037
- readonly voiceStateUpdate: "voiceStateUpdate";
1038
1020
  readonly VoiceStateUpdate: "voiceStateUpdate";
1039
1021
  /**
1040
1022
  * Emitted when volume is updated
1041
1023
  */
1042
- readonly volumeChange: "volumeChange";
1043
1024
  readonly VolumeChange: "volumeChange";
1044
1025
  /**
1045
1026
  * Emitted when player is paused
1046
1027
  */
1047
- readonly playerPause: "playerPause";
1048
1028
  readonly PlayerPause: "playerPause";
1049
1029
  /**
1050
1030
  * Emitted when player is resumed
1051
1031
  */
1052
- readonly playerResume: "playerResume";
1053
1032
  readonly PlayerResume: "playerResume";
1054
1033
  /**
1055
1034
  * Biquad Filters Update
1056
1035
  */
1057
- readonly biquadFiltersUpdate: "biquadFiltersUpdate";
1058
1036
  readonly BiquadFiltersUpdate: "biquadFiltersUpdate";
1059
1037
  /**
1060
1038
  * Equalizer Update
1061
1039
  */
1062
- readonly equalizerUpdate: "equalizerUpdate";
1063
1040
  readonly EqualizerUpdate: "equalizerUpdate";
1064
1041
  /**
1065
1042
  * DSP update
1066
1043
  */
1067
- readonly dspUpdate: "dspUpdate";
1068
1044
  readonly DSPUpdate: "dspUpdate";
1069
1045
  /**
1070
1046
  * Audio Filters Update
1071
1047
  */
1072
- readonly audioFiltersUpdate: "audioFiltersUpdate";
1073
1048
  readonly AudioFiltersUpdate: "audioFiltersUpdate";
1074
1049
  /**
1075
1050
  * Audio player will play next track
1076
1051
  */
1077
- readonly willPlayTrack: "willPlayTrack";
1078
1052
  readonly WillPlayTrack: "willPlayTrack";
1079
1053
  /**
1080
1054
  * Emitted when a voice channel is repopulated
1081
1055
  */
1082
- readonly channelPopulate: "channelPopulate";
1083
1056
  readonly ChannelPopulate: "channelPopulate";
1084
1057
  /**
1085
1058
  * Emitted when a queue is successfully created
1086
1059
  */
1087
- readonly queueCreate: "queueCreate";
1088
1060
  readonly QueueCreate: "queueCreate";
1089
1061
  /**
1090
1062
  * Emitted when a queue is deleted
1091
1063
  */
1092
- readonly queueDelete: "queueDelete";
1093
1064
  readonly QueueDelete: "queueDelete";
1094
1065
  /**
1095
1066
  * Emitted when a queue is trying to add similar track for autoplay
1096
1067
  */
1097
- readonly willAutoPlay: "willAutoPlay";
1098
1068
  readonly WillAutoPlay: "willAutoPlay";
1099
1069
  };
1100
1070
  type GuildQueueEvent = (typeof GuildQueueEvent)[keyof typeof GuildQueueEvent];
@@ -1815,8 +1785,8 @@ declare function useHistory<Meta = unknown>(): GuildQueueHistory<Meta> | null;
1815
1785
  declare function usePlayer<Meta = unknown>(): GuildQueuePlayerNode<Meta> | null;
1816
1786
 
1817
1787
  /**
1818
- * Fetch guild queue
1819
- * @param node Guild queue node resolvable
1788
+ * Fetch guild queue.
1789
+ * @param node Guild queue node resolvable. Defaults to inferred guild from context.
1820
1790
  */
1821
1791
  declare function useQueue<Meta = unknown>(): GuildQueue<Meta> | null;
1822
1792
 
@@ -1835,13 +1805,9 @@ declare function useMetadata<T = unknown>(): MetadataDispatch<T>;
1835
1805
 
1836
1806
  interface TimelineDispatcherOptions {
1837
1807
  ignoreFilters: boolean;
1808
+ node: NodeResolvable;
1838
1809
  }
1839
- /**
1840
- * Fetch or manipulate current track
1841
- * @param node Guild queue node resolvable
1842
- * @param options Options for timeline dispatcher
1843
- */
1844
- declare function useTimeline(options?: Partial<TimelineDispatcherOptions>): {
1810
+ interface GuildQueueTimeline {
1845
1811
  readonly timestamp: PlayerTimestamp;
1846
1812
  readonly volume: number;
1847
1813
  readonly paused: boolean;
@@ -1850,7 +1816,12 @@ declare function useTimeline(options?: Partial<TimelineDispatcherOptions>): {
1850
1816
  resume(): boolean;
1851
1817
  setVolume(vol: number): boolean;
1852
1818
  setPosition(time: number): Promise<boolean>;
1853
- } | null;
1819
+ }
1820
+ /**
1821
+ * Fetch or manipulate current track
1822
+ * @param options Options for timeline dispatcher
1823
+ */
1824
+ declare function useTimeline(): GuildQueueTimeline | null;
1854
1825
 
1855
1826
  /**
1856
1827
  * Global onAfterCreateStream handler
@@ -1872,10 +1843,6 @@ type VolumeDispatch = readonly [() => number, (volume: number | SetterFN) => boo
1872
1843
  */
1873
1844
  declare function useVolume(): VolumeDispatch;
1874
1845
 
1875
- declare const knownExtractorKeys: readonly ["SpotifyExtractor", "AppleMusicExtractor", "SoundCloudExtractor", "VimeoExtractor", "ReverbnationExtractor", "AttachmentExtractor"];
1876
- type ExtractorLoaderOptionDict = {
1877
- [K in (typeof knownExtractorKeys)[number]]?: ConstructorParameters<typeof _discord_player_extractor[K]>[1];
1878
- };
1879
1846
  interface ExtractorSession {
1880
1847
  id: string;
1881
1848
  attemptedExtractors: Set<string>;
@@ -1929,13 +1896,14 @@ declare class ExtractorExecutionContext extends PlayerEventsEmitter<ExtractorExe
1929
1896
  * Get the current execution context
1930
1897
  */
1931
1898
  getContext(): ExtractorSession | null;
1899
+ loadDefault(): Promise<void>;
1932
1900
  /**
1933
- * Load default extractors from `@discord-player/extractor`
1901
+ * Load a bundle of extractors.
1902
+ * @example import { DefaultExtractors } from '@discord-player/extractor';
1903
+ *
1904
+ * await player.extractors.loadMulti(DefaultExtractors);
1934
1905
  */
1935
- loadDefault(filter?: (ext: (typeof knownExtractorKeys)[number]) => boolean | null, options?: ExtractorLoaderOptionDict): Promise<{
1936
- success: boolean;
1937
- error: Error;
1938
- } | {
1906
+ loadMulti<O extends object, T extends (typeof BaseExtractor<O>)[], R extends Record<T[number]['identifier'], ConstructorParameters<T[number]>[1]>>(bundle: T, options?: R): Promise<{
1939
1907
  success: boolean;
1940
1908
  error: null;
1941
1909
  }>;
@@ -2554,7 +2522,7 @@ declare class GuildNodeManager<Meta = unknown> {
2554
2522
  * Resolve queue
2555
2523
  * @param node Queue resolvable
2556
2524
  */
2557
- resolve<T = Meta>(node: NodeResolvable): GuildQueue<unknown> | undefined;
2525
+ resolve<T = Meta>(node: NodeResolvable): GuildQueue<T> | undefined;
2558
2526
  /**
2559
2527
  * Resolve queue id
2560
2528
  * @param node Queue resolvable
@@ -3053,6 +3021,10 @@ interface PlayerInitOptions {
3053
3021
  * Configure ffmpeg path
3054
3022
  */
3055
3023
  ffmpegPath?: string;
3024
+ /**
3025
+ * Whether to override the fallback context. Defaults to `true`.
3026
+ */
3027
+ overrideFallbackContext?: boolean;
3056
3028
  }
3057
3029
 
3058
3030
  declare class AudioFilters {
@@ -3254,6 +3226,7 @@ interface DependenciesReport {
3254
3226
  'libsodium-wrappers': MaybeNull<string>;
3255
3227
  'sodium-javascript': MaybeNull<string>;
3256
3228
  '@stablelib/xchacha20poly1305': MaybeNull<string>;
3229
+ '@nobel/ciphers': MaybeNull<string>;
3257
3230
  };
3258
3231
  ffmpeg: FFmpegReport;
3259
3232
  }
@@ -3294,4 +3267,4 @@ declare const DependencyReportGenerator: {
3294
3267
 
3295
3268
  declare const version: string;
3296
3269
 
3297
- export { AFilterGraph, AsyncQueue, AsyncQueueAcquisitionOptions, AsyncQueueEntry, AsyncQueueExceptionHandler, AudioFilters, BaseExtractor, Context, ContextReceiver, CreateStreamOps, DependenciesReport, DependencyReportGenerator, DiscordPlayerQueryResultCache, Encodable, EqualizerConfigurationPreset, ExtractorExecutionContext, ExtractorExecutionEvents, ExtractorExecutionFN, ExtractorExecutionResult, ExtractorInfo, ExtractorLoaderOptionDict, ExtractorResolvable, ExtractorSearchContext, ExtractorSession, ExtractorStreamable, FFMPEG_ARGS_PIPED, FFMPEG_ARGS_STRING, FFMPEG_SRATE_REGEX, FFmpegFilterer, FFmpegReport, FFmpegStreamOptions, FilterGraph, FiltersName, GuildNodeCreateOptions, GuildNodeInit, GuildNodeManager, GuildQueue, GuildQueueAFiltersCache, GuildQueueAudioFilters, GuildQueueEvent, GuildQueueEvents, GuildQueueHistory, GuildQueuePlayerNode, GuildQueueStatistics, GuildQueueStatisticsMetadata, LrcGetParams, LrcGetResult, LrcLib, LrcSearchParams, LrcSearchResult, MaybeNull, MetadataDispatch, NextFunction, NodeResolvable, OnAfterCreateStreamHandler, OnBeforeCreateStreamHandler, PackageJSON, PlayOptions, Player, PlayerEvent, PlayerEvents, PlayerEventsEmitter, PlayerInitOptions, PlayerNodeInitializationResult, PlayerNodeInitializerOptions, PlayerProgressbarOptions, PlayerSearchResult, PlayerTimestamp, PlayerTriggeredReason, Playlist, PlaylistInitData, PlaylistJSON, PostProcessedResult, QueryCache, QueryCacheOptions, QueryCacheProvider, QueryCacheResolverContext, QueryExtractorSearch, QueryResolver, QueryType, QueueFilters, QueueRepeatMode, RawTrackData, RequestEntity, ResolvedQuery, ResourcePlayOptions, Runtime, RuntimeType, SearchOptions, SearchQueryType, SearchResult, SearchResultData, SequentialBucket, SerializedPlaylist, SerializedTrack, SerializedType, SetterFN$1 as SetterFN, SkipOptions, StreamConfig, StreamDispatcher, TimeData, TimelineDispatcherOptions, Track, TrackJSON, TrackLike, TrackResolvable, TrackSkipReason, TrackSource, TypeUtil, Util, VALIDATE_QUEUE_CAP, VoiceConnectConfig, VoiceEvents, VoiceStateHandler, VoiceUtils, WithMetadata, createContext, createErisCompat, createFFmpegStream, decode, deserialize, encode, isErisProxy, onAfterCreateStream, onBeforeCreateStream, serialize, tryIntoThumbnailString, useContext, useHistory, useMainPlayer, useMetadata, usePlayer, useQueue, useTimeline, useVolume, version };
3270
+ export { AFilterGraph, AsyncQueue, AsyncQueueAcquisitionOptions, AsyncQueueEntry, AsyncQueueExceptionHandler, AudioFilters, BaseExtractor, Context, ContextReceiver, CreateStreamOps, DependenciesReport, DependencyReportGenerator, DiscordPlayerQueryResultCache, Encodable, EqualizerConfigurationPreset, ExtractorExecutionContext, ExtractorExecutionEvents, ExtractorExecutionFN, ExtractorExecutionResult, ExtractorInfo, ExtractorResolvable, ExtractorSearchContext, ExtractorSession, ExtractorStreamable, FFMPEG_ARGS_PIPED, FFMPEG_ARGS_STRING, FFMPEG_SRATE_REGEX, FFmpegFilterer, FFmpegReport, FFmpegStreamOptions, FilterGraph, FiltersName, GuildNodeCreateOptions, GuildNodeInit, GuildNodeManager, GuildQueue, GuildQueueAFiltersCache, GuildQueueAudioFilters, GuildQueueEvent, GuildQueueEvents, GuildQueueHistory, GuildQueuePlayerNode, GuildQueueStatistics, GuildQueueStatisticsMetadata, GuildQueueTimeline, LrcGetParams, LrcGetResult, LrcLib, LrcSearchParams, LrcSearchResult, MaybeNull, MetadataDispatch, NextFunction, NodeResolvable, OnAfterCreateStreamHandler, OnBeforeCreateStreamHandler, PackageJSON, PlayOptions, Player, PlayerEvent, PlayerEvents, PlayerEventsEmitter, PlayerInitOptions, PlayerNodeInitializationResult, PlayerNodeInitializerOptions, PlayerProgressbarOptions, PlayerSearchResult, PlayerTimestamp, PlayerTriggeredReason, Playlist, PlaylistInitData, PlaylistJSON, PostProcessedResult, QueryCache, QueryCacheOptions, QueryCacheProvider, QueryCacheResolverContext, QueryExtractorSearch, QueryResolver, QueryType, QueueFilters, QueueRepeatMode, RawTrackData, RequestEntity, ResolvedQuery, ResourcePlayOptions, Runtime, RuntimeType, SearchOptions, SearchQueryType, SearchResult, SearchResultData, SequentialBucket, SerializedPlaylist, SerializedTrack, SerializedType, SetterFN$1 as SetterFN, SkipOptions, StreamConfig, StreamDispatcher, TimeData, TimelineDispatcherOptions, Track, TrackJSON, TrackLike, TrackResolvable, TrackSkipReason, TrackSource, TypeUtil, Util, VALIDATE_QUEUE_CAP, VoiceConnectConfig, VoiceEvents, VoiceStateHandler, VoiceUtils, WithMetadata, createContext, createErisCompat, createFFmpegStream, decode, deserialize, encode, isErisProxy, onAfterCreateStream, onBeforeCreateStream, serialize, tryIntoThumbnailString, useContext, useHistory, useMainPlayer, useMetadata, usePlayer, useQueue, useTimeline, useVolume, version };