@kattowo/distube 6.0.1 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -4
- package/dist/index.d.mts +194 -12
- package/dist/index.d.ts +194 -12
- package/dist/index.js +260 -30
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +259 -30
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -88,14 +88,17 @@ DisTube ships no music source. Every source is a plugin, so a bot loads the ones
|
|
|
88
88
|
|
|
89
89
|
```javascript
|
|
90
90
|
const { DisTube } = require("@kattowo/distube");
|
|
91
|
-
const {
|
|
92
|
-
const { SpotifyPlugin } = require("@distube/spotify");
|
|
91
|
+
const { MyPlugin } = require("./my-plugin.js");
|
|
93
92
|
|
|
94
93
|
const distube = new DisTube(client, {
|
|
95
|
-
plugins: [new
|
|
94
|
+
plugins: [new MyPlugin()],
|
|
96
95
|
});
|
|
97
96
|
```
|
|
98
97
|
|
|
98
|
+
This fork does not maintain the plugins of the upstream repository. They may not work with it, and
|
|
99
|
+
they are not covered by the tests of this fork. Write your own extractor, or use a plugin that you
|
|
100
|
+
trust and that you can keep up to date.
|
|
101
|
+
|
|
99
102
|
A plugin that cannot hand out a static URL to FFmpeg registers a handler on the shared stream server
|
|
100
103
|
of DisTube, so the bot runs one HTTP server instead of one per plugin.
|
|
101
104
|
|
|
@@ -103,7 +106,7 @@ of DisTube, so the bot runs one HTTP server instead of one per plugin.
|
|
|
103
106
|
play options routes a query to a single source:
|
|
104
107
|
|
|
105
108
|
```javascript
|
|
106
|
-
const result = await distube.search("never gonna give you up", { source: "
|
|
109
|
+
const result = await distube.search("never gonna give you up", { source: "my-source" });
|
|
107
110
|
```
|
|
108
111
|
|
|
109
112
|
## Documentation
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as discord_js from 'discord.js';
|
|
2
|
-
import { Snowflake, Message, GuildTextBasedChannel,
|
|
2
|
+
import { VoiceBasedChannel, Snowflake, Message, GuildTextBasedChannel, VoiceState, Guild, GuildMember, Interaction, Collection, Client, ClientOptions } from 'discord.js';
|
|
3
3
|
import { AudioResource, AudioPlayer, VoiceConnection } from '@discordjs/voice';
|
|
4
4
|
import { TypedEmitter } from 'tiny-typed-emitter';
|
|
5
5
|
import { ChildProcess } from 'node:child_process';
|
|
@@ -83,7 +83,51 @@ declare enum Events {
|
|
|
83
83
|
/**
|
|
84
84
|
* Emitted to provide debug information from DisTube's operation.
|
|
85
85
|
*/
|
|
86
|
-
DEBUG = "debug"
|
|
86
|
+
DEBUG = "debug",
|
|
87
|
+
/**
|
|
88
|
+
* Emitted when a guild stream is paused.
|
|
89
|
+
*/
|
|
90
|
+
PAUSE_SONG = "pauseSong",
|
|
91
|
+
/**
|
|
92
|
+
* Emitted when a paused guild stream is resumed.
|
|
93
|
+
*/
|
|
94
|
+
RESUME_SONG = "resumeSong",
|
|
95
|
+
/**
|
|
96
|
+
* Emitted when a guild stream is seeked to a new position.
|
|
97
|
+
*/
|
|
98
|
+
SEEK_SONG = "seekSong",
|
|
99
|
+
/**
|
|
100
|
+
* Emitted when the volume of a guild stream is changed.
|
|
101
|
+
*/
|
|
102
|
+
SET_VOLUME = "setVolume",
|
|
103
|
+
/**
|
|
104
|
+
* Emitted after the songs of a {@link Queue} have been shuffled.
|
|
105
|
+
*/
|
|
106
|
+
SHUFFLE_QUEUE = "shuffleQueue",
|
|
107
|
+
/**
|
|
108
|
+
* Emitted when a song is skipped.
|
|
109
|
+
*/
|
|
110
|
+
SKIP_SONG = "skipSong",
|
|
111
|
+
/**
|
|
112
|
+
* Emitted when the audio filters of a {@link Queue} are changed.
|
|
113
|
+
*/
|
|
114
|
+
CHANGE_FILTER = "changeFilter",
|
|
115
|
+
/**
|
|
116
|
+
* Emitted when the bot is moved to another voice channel.
|
|
117
|
+
*/
|
|
118
|
+
VOICE_CHANNEL_CHANGE = "voiceChannelChange",
|
|
119
|
+
/**
|
|
120
|
+
* Emitted when DisTube starts pre-buffering / pre-fetching the next song in a {@link Queue}.
|
|
121
|
+
*/
|
|
122
|
+
PRELOAD_SONG = "preloadSong",
|
|
123
|
+
/**
|
|
124
|
+
* Emitted when the next song in a {@link Queue} has been pre-buffered and is ready.
|
|
125
|
+
*/
|
|
126
|
+
PRELOADED_SONG = "preloadedSong",
|
|
127
|
+
/**
|
|
128
|
+
* Emitted when pre-buffering the next song in a {@link Queue} fails.
|
|
129
|
+
*/
|
|
130
|
+
PRELOAD_ERROR = "preloadError"
|
|
87
131
|
}
|
|
88
132
|
/**
|
|
89
133
|
* The arguments of every {@link Events} event.
|
|
@@ -146,6 +190,50 @@ type DisTubeEvents = {
|
|
|
146
190
|
* Emitted when a song starts playing.
|
|
147
191
|
*/
|
|
148
192
|
[Events.PLAY_SONG]: [queue: Queue, song: Song];
|
|
193
|
+
/**
|
|
194
|
+
* Emitted when a guild stream is paused.
|
|
195
|
+
*/
|
|
196
|
+
[Events.PAUSE_SONG]: [queue: Queue, song: Song];
|
|
197
|
+
/**
|
|
198
|
+
* Emitted when a paused guild stream is resumed.
|
|
199
|
+
*/
|
|
200
|
+
[Events.RESUME_SONG]: [queue: Queue, song: Song];
|
|
201
|
+
/**
|
|
202
|
+
* Emitted when a guild stream is seeked to a new position.
|
|
203
|
+
*/
|
|
204
|
+
[Events.SEEK_SONG]: [queue: Queue, song: Song, position: number];
|
|
205
|
+
/**
|
|
206
|
+
* Emitted when the volume of a guild stream is changed.
|
|
207
|
+
*/
|
|
208
|
+
[Events.SET_VOLUME]: [queue: Queue, volume: number, oldVolume: number];
|
|
209
|
+
/**
|
|
210
|
+
* Emitted after the songs of a {@link Queue} have been shuffled.
|
|
211
|
+
*/
|
|
212
|
+
[Events.SHUFFLE_QUEUE]: [queue: Queue, songs: Song[]];
|
|
213
|
+
/**
|
|
214
|
+
* Emitted when a song is skipped.
|
|
215
|
+
*/
|
|
216
|
+
[Events.SKIP_SONG]: [queue: Queue, song: Song];
|
|
217
|
+
/**
|
|
218
|
+
* Emitted when the audio filters of a {@link Queue} are changed.
|
|
219
|
+
*/
|
|
220
|
+
[Events.CHANGE_FILTER]: [queue: Queue, newFilters: string[], oldFilters: string[]];
|
|
221
|
+
/**
|
|
222
|
+
* Emitted when the bot is moved to another voice channel.
|
|
223
|
+
*/
|
|
224
|
+
[Events.VOICE_CHANNEL_CHANGE]: [queue: Queue, oldChannel: VoiceBasedChannel, newChannel: VoiceBasedChannel];
|
|
225
|
+
/**
|
|
226
|
+
* Emitted when DisTube starts pre-buffering / pre-fetching the next song in a {@link Queue}.
|
|
227
|
+
*/
|
|
228
|
+
[Events.PRELOAD_SONG]: [queue: Queue, song: Song];
|
|
229
|
+
/**
|
|
230
|
+
* Emitted when the next song in a {@link Queue} has been pre-buffered and is ready.
|
|
231
|
+
*/
|
|
232
|
+
[Events.PRELOADED_SONG]: [queue: Queue, song: Song];
|
|
233
|
+
/**
|
|
234
|
+
* Emitted when pre-buffering the next song in a {@link Queue} fails.
|
|
235
|
+
*/
|
|
236
|
+
[Events.PRELOAD_ERROR]: [queue: Queue, song: Song, error: Error];
|
|
149
237
|
};
|
|
150
238
|
/**
|
|
151
239
|
* The typed event listeners of a {@link DisTube} instance.
|
|
@@ -174,6 +262,12 @@ type DisTubeVoiceEvents = {
|
|
|
174
262
|
* Emitted when the audio player becomes idle, i.e. the song is finished.
|
|
175
263
|
*/
|
|
176
264
|
finish: () => Awaitable;
|
|
265
|
+
/**
|
|
266
|
+
* Emitted when the connection moves to another voice channel.
|
|
267
|
+
* @param oldChannel - The previous voice channel
|
|
268
|
+
* @param newChannel - The new voice channel
|
|
269
|
+
*/
|
|
270
|
+
channelChange: (oldChannel: VoiceBasedChannel, newChannel: VoiceBasedChannel) => Awaitable;
|
|
177
271
|
};
|
|
178
272
|
/**
|
|
179
273
|
* An FFmpeg audio filter object
|
|
@@ -213,6 +307,20 @@ type FilterResolvable = string | Filter;
|
|
|
213
307
|
* @see {@link defaultFilters}
|
|
214
308
|
*/
|
|
215
309
|
type Filters = Record<string, string>;
|
|
310
|
+
/**
|
|
311
|
+
* The validated {@link DisTubeOptions.preload} options of a {@link DisTube} instance.
|
|
312
|
+
*/
|
|
313
|
+
type PreloadOptions = {
|
|
314
|
+
/**
|
|
315
|
+
* Whether or not preloading is enabled.
|
|
316
|
+
*/
|
|
317
|
+
enabled: boolean;
|
|
318
|
+
/**
|
|
319
|
+
* The number of seconds remaining in the currently playing song before
|
|
320
|
+
* preloading starts.
|
|
321
|
+
*/
|
|
322
|
+
threshold: number;
|
|
323
|
+
};
|
|
216
324
|
/**
|
|
217
325
|
* DisTube options
|
|
218
326
|
*/
|
|
@@ -276,6 +384,29 @@ type DisTubeOptions = {
|
|
|
276
384
|
* @default 10000
|
|
277
385
|
*/
|
|
278
386
|
stuckThreshold?: number;
|
|
387
|
+
/**
|
|
388
|
+
* Pre-fetch stream information and prepare the stream for the next song in
|
|
389
|
+
* the queue before the current song finishes playing, to reduce the delay
|
|
390
|
+
* between two songs.
|
|
391
|
+
*
|
|
392
|
+
* Can be a simple `boolean` to toggle it with the default threshold, or an
|
|
393
|
+
* object to configure it:
|
|
394
|
+
* - `enabled`: whether or not preloading is enabled (@default false)
|
|
395
|
+
* - `threshold`: the number of seconds remaining in the currently playing
|
|
396
|
+
* song before preloading starts (@default 15)
|
|
397
|
+
* @default false
|
|
398
|
+
*/
|
|
399
|
+
preload?: boolean | {
|
|
400
|
+
/**
|
|
401
|
+
* Whether or not preloading is enabled.
|
|
402
|
+
*/
|
|
403
|
+
enabled?: boolean;
|
|
404
|
+
/**
|
|
405
|
+
* The number of seconds remaining in the currently playing song before
|
|
406
|
+
* preloading starts.
|
|
407
|
+
*/
|
|
408
|
+
threshold?: number;
|
|
409
|
+
};
|
|
279
410
|
/**
|
|
280
411
|
* FFmpeg options
|
|
281
412
|
*/
|
|
@@ -321,7 +452,7 @@ interface SongInfo<T = unknown> {
|
|
|
321
452
|
*/
|
|
322
453
|
plugin: DisTubePlugin | null;
|
|
323
454
|
/**
|
|
324
|
-
* The identifier of the source of the song, e.g. `
|
|
455
|
+
* The identifier of the source of the song, e.g. `my-source`.
|
|
325
456
|
*/
|
|
326
457
|
source: string;
|
|
327
458
|
/**
|
|
@@ -405,7 +536,7 @@ interface SongInfo<T = unknown> {
|
|
|
405
536
|
*/
|
|
406
537
|
interface PlaylistInfo {
|
|
407
538
|
/**
|
|
408
|
-
* The identifier of the source of the playlist, e.g. `
|
|
539
|
+
* The identifier of the source of the playlist, e.g. `my-source`.
|
|
409
540
|
*/
|
|
410
541
|
source: string;
|
|
411
542
|
/**
|
|
@@ -714,6 +845,10 @@ declare const MAX_REDIRECT_DEPTH = 5;
|
|
|
714
845
|
* Default DisTube audio filters.
|
|
715
846
|
*/
|
|
716
847
|
declare const defaultFilters: Filters;
|
|
848
|
+
/**
|
|
849
|
+
* Default number of seconds remaining in the currently playing song before preloading starts.
|
|
850
|
+
*/
|
|
851
|
+
declare const DEFAULT_PRELOAD_THRESHOLD_SECS = 15;
|
|
717
852
|
/**
|
|
718
853
|
* The default options of a {@link DisTube} instance.
|
|
719
854
|
*
|
|
@@ -730,6 +865,7 @@ declare const defaultOptions: {
|
|
|
730
865
|
joinNewVoiceChannel: true;
|
|
731
866
|
unhandledError: "log";
|
|
732
867
|
stuckThreshold: number;
|
|
868
|
+
preload: false;
|
|
733
869
|
};
|
|
734
870
|
|
|
735
871
|
/**
|
|
@@ -1112,6 +1248,11 @@ declare class Options {
|
|
|
1112
1248
|
* @default 10000
|
|
1113
1249
|
*/
|
|
1114
1250
|
stuckThreshold: number;
|
|
1251
|
+
/**
|
|
1252
|
+
* The preload options of the DisTube instance.
|
|
1253
|
+
* @default { enabled: false, threshold: 15 }
|
|
1254
|
+
*/
|
|
1255
|
+
preload: PreloadOptions;
|
|
1115
1256
|
/**
|
|
1116
1257
|
* The FFmpeg options of the DisTube instance.
|
|
1117
1258
|
*/
|
|
@@ -1477,6 +1618,16 @@ declare class QueueManager extends GuildIdManager<Queue> {
|
|
|
1477
1618
|
playSong(queue: Queue, emitPlaySong?: boolean, options?: {
|
|
1478
1619
|
keepSongOnError?: boolean;
|
|
1479
1620
|
}): Promise<void>;
|
|
1621
|
+
/**
|
|
1622
|
+
* Schedule preloading the next song in the queue before the current song finishes.
|
|
1623
|
+
* @param queue - The guild queue
|
|
1624
|
+
*/
|
|
1625
|
+
schedulePreload(queue: Queue): void;
|
|
1626
|
+
/**
|
|
1627
|
+
* Preload the next song in the queue.
|
|
1628
|
+
* @param queue - The guild queue
|
|
1629
|
+
*/
|
|
1630
|
+
preloadNextSong(queue: Queue): Promise<void>;
|
|
1480
1631
|
}
|
|
1481
1632
|
|
|
1482
1633
|
/**
|
|
@@ -2224,6 +2375,37 @@ declare class Queue extends DisTubeBase {
|
|
|
2224
2375
|
* @internal
|
|
2225
2376
|
*/
|
|
2226
2377
|
_listeners?: DisTubeVoiceEvents;
|
|
2378
|
+
/**
|
|
2379
|
+
* Preload timer
|
|
2380
|
+
* @internal
|
|
2381
|
+
*/
|
|
2382
|
+
_preloadTimeout?: NodeJS.Timeout;
|
|
2383
|
+
/**
|
|
2384
|
+
* Preloaded song
|
|
2385
|
+
* @internal
|
|
2386
|
+
*/
|
|
2387
|
+
_preloadedSong?: Song;
|
|
2388
|
+
/**
|
|
2389
|
+
* Preloaded stream
|
|
2390
|
+
* @internal
|
|
2391
|
+
*/
|
|
2392
|
+
_preloadedStream?: DisTubeStream;
|
|
2393
|
+
/**
|
|
2394
|
+
* In-flight preload task
|
|
2395
|
+
* @internal
|
|
2396
|
+
*/
|
|
2397
|
+
_preloading?: Promise<void>;
|
|
2398
|
+
/**
|
|
2399
|
+
* Bumped whenever the preloaded state is invalidated, so an in-flight
|
|
2400
|
+
* preload task can detect that its result is no longer needed.
|
|
2401
|
+
* @internal
|
|
2402
|
+
*/
|
|
2403
|
+
_preloadGeneration: number;
|
|
2404
|
+
/**
|
|
2405
|
+
* Clear any preloaded song and cancel pending preload timer.
|
|
2406
|
+
* @internal
|
|
2407
|
+
*/
|
|
2408
|
+
_clearPreload(): void;
|
|
2227
2409
|
/**
|
|
2228
2410
|
* Create a queue for the guild
|
|
2229
2411
|
* @param distube - DisTube
|
|
@@ -2651,7 +2833,7 @@ declare class DisTube extends TypedEmitter<TypedDisTubeEvents> {
|
|
|
2651
2833
|
* @returns The DisTube instance
|
|
2652
2834
|
* @example
|
|
2653
2835
|
* ```ts
|
|
2654
|
-
* const distube = await DisTube.create(client, { plugins: [new
|
|
2836
|
+
* const distube = await DisTube.create(client, { plugins: [new MyPlugin()] });
|
|
2655
2837
|
* ```
|
|
2656
2838
|
*/
|
|
2657
2839
|
static create(client: Client, opts?: DisTubeOptions): Promise<DisTube>;
|
|
@@ -2716,12 +2898,12 @@ declare class DisTube extends TypedEmitter<TypedDisTubeEvents> {
|
|
|
2716
2898
|
*
|
|
2717
2899
|
* It matches the {@link Plugin.source} of the plugin, or one of its
|
|
2718
2900
|
* {@link Plugin.aliases}. The identifier of the class is used when the
|
|
2719
|
-
* plugin does not define a source (`
|
|
2901
|
+
* plugin does not define a source (`MyPlugin` -> `myplugin`).
|
|
2720
2902
|
* @param source - The identifier of the source
|
|
2721
2903
|
* @returns The plugin, or `undefined` when there is none
|
|
2722
2904
|
* @example
|
|
2723
2905
|
* ```ts
|
|
2724
|
-
* const plugin = distube.getPlugin("
|
|
2906
|
+
* const plugin = distube.getPlugin("myplugin");
|
|
2725
2907
|
* ```
|
|
2726
2908
|
*/
|
|
2727
2909
|
getPlugin(source: string): DisTubePlugin | undefined;
|
|
@@ -2844,7 +3026,7 @@ declare abstract class Plugin {
|
|
|
2844
3026
|
* The identifier of the source of the plugin.
|
|
2845
3027
|
*
|
|
2846
3028
|
* It defaults to the name of the class, lowercased, without the `Plugin`
|
|
2847
|
-
* suffix (`
|
|
3029
|
+
* suffix (`MyPlugin` -> `myplugin`).
|
|
2848
3030
|
*
|
|
2849
3031
|
* It is used to route a search to a plugin, and to find a plugin with
|
|
2850
3032
|
* {@link DisTube#getPlugin}.
|
|
@@ -2983,7 +3165,7 @@ declare abstract class ExtractorPlugin extends Plugin {
|
|
|
2983
3165
|
abstract resolve<T>(url: string, options: ResolveOptions<T>): Awaitable<Song<T> | Playlist<T>>;
|
|
2984
3166
|
/**
|
|
2985
3167
|
* Get the stream url from {@link Song#url}. Returns {@link Song#url} by default.
|
|
2986
|
-
* Not needed if the plugin plays song
|
|
3168
|
+
* Not needed if the plugin plays the song itself.
|
|
2987
3169
|
* @param song - Input song
|
|
2988
3170
|
* @returns The url of the audio stream
|
|
2989
3171
|
*/
|
|
@@ -3056,7 +3238,7 @@ declare abstract class PlayableExtractorPlugin extends ExtractorPlugin {
|
|
|
3056
3238
|
abstract resolve<T>(url: string, options: ResolveOptions<T>): Awaitable<Song<T> | Playlist<T>>;
|
|
3057
3239
|
/**
|
|
3058
3240
|
* Get the stream url from {@link Song#url}. Returns {@link Song#url} by default.
|
|
3059
|
-
* Not needed if the plugin plays song
|
|
3241
|
+
* Not needed if the plugin plays the song itself.
|
|
3060
3242
|
* @param song - Input song
|
|
3061
3243
|
* @returns The url of the audio stream
|
|
3062
3244
|
*/
|
|
@@ -3256,5 +3438,5 @@ declare function handleUnhandledError(error: Error, behavior?: UnhandledErrorBeh
|
|
|
3256
3438
|
*/
|
|
3257
3439
|
declare const checkEncryptionLibraries: () => Promise<boolean>;
|
|
3258
3440
|
|
|
3259
|
-
export { AUDIO_CHANNELS, AUDIO_SAMPLE_RATE, BaseManager, DEFAULT_VOLUME, DisTube, DisTubeBase, DisTubeError, DisTubeHandler, DisTubeStream, DisTubeVoice, DisTubeVoiceManager, Events, ExtractorPlugin, FilterManager, GuildIdManager, HTTP_REDIRECT_CODES, InfoExtractorPlugin, JOIN_TIMEOUT_MS, MAX_REDIRECT_DEPTH, Options, PlayableExtractorPlugin, Playlist, Plugin, PluginError, PluginErrorCode, PluginType, Queue, QueueManager, RECONNECT_MAX_ATTEMPTS, RECONNECT_TIMEOUT_MS, RepeatMode, STUCK_THRESHOLD_MS, SearchResult, SearchResultType, Song, StreamServer, TaskQueue, checkEncryptionLibraries, checkFFmpeg, checkIntents, checkInvalidKey, DisTube as default, defaultFilters, defaultOptions, formatDuration, handleUnhandledError, isClientInstance, isGuildInstance, isMemberInstance, isMessageInstance, isNsfwChannel, isObject, isSnowflake, isSupportedVoiceChannel, isTextChannelInstance, isTruthy, isURL, isVoiceChannelEmpty, objectKeys, resolveGuildId, version };
|
|
3260
|
-
export type { Awaitable, CustomPlaylistOptions, DisTubeEvents, DisTubeOptions, DisTubePlugin, DisTubeVoiceEvents, Disposable, FFmpegArg, FFmpegArgs, FFmpegOptions, Falsy, Filter, FilterResolvable, Filters, GuildIdResolvable, JumpOptions, KeyOf, PlayHandlerOptions, PlayOptions, PlaylistInfo, RelatedSong, ResolveOptions, ResolvePlaylistOptions, SearchOptions, SongInfo, StreamHandler, StreamOptions, StreamRequest, StreamResponse, StreamServerOptions, TypedDisTubeEvents, UnhandledErrorBehavior };
|
|
3441
|
+
export { AUDIO_CHANNELS, AUDIO_SAMPLE_RATE, BaseManager, DEFAULT_PRELOAD_THRESHOLD_SECS, DEFAULT_VOLUME, DisTube, DisTubeBase, DisTubeError, DisTubeHandler, DisTubeStream, DisTubeVoice, DisTubeVoiceManager, Events, ExtractorPlugin, FilterManager, GuildIdManager, HTTP_REDIRECT_CODES, InfoExtractorPlugin, JOIN_TIMEOUT_MS, MAX_REDIRECT_DEPTH, Options, PlayableExtractorPlugin, Playlist, Plugin, PluginError, PluginErrorCode, PluginType, Queue, QueueManager, RECONNECT_MAX_ATTEMPTS, RECONNECT_TIMEOUT_MS, RepeatMode, STUCK_THRESHOLD_MS, SearchResult, SearchResultType, Song, StreamServer, TaskQueue, checkEncryptionLibraries, checkFFmpeg, checkIntents, checkInvalidKey, DisTube as default, defaultFilters, defaultOptions, formatDuration, handleUnhandledError, isClientInstance, isGuildInstance, isMemberInstance, isMessageInstance, isNsfwChannel, isObject, isSnowflake, isSupportedVoiceChannel, isTextChannelInstance, isTruthy, isURL, isVoiceChannelEmpty, objectKeys, resolveGuildId, version };
|
|
3442
|
+
export type { Awaitable, CustomPlaylistOptions, DisTubeEvents, DisTubeOptions, DisTubePlugin, DisTubeVoiceEvents, Disposable, FFmpegArg, FFmpegArgs, FFmpegOptions, Falsy, Filter, FilterResolvable, Filters, GuildIdResolvable, JumpOptions, KeyOf, PlayHandlerOptions, PlayOptions, PlaylistInfo, PreloadOptions, RelatedSong, ResolveOptions, ResolvePlaylistOptions, SearchOptions, SongInfo, StreamHandler, StreamOptions, StreamRequest, StreamResponse, StreamServerOptions, TypedDisTubeEvents, UnhandledErrorBehavior };
|