distube 4.0.2 → 4.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,17 +1,17 @@
1
1
  <div align="center">
2
2
  <p>
3
- <a href="https://nodei.co/npm/distube/"><img src="https://nodei.co/npm/distube.png?downloads=true&downloadRank=true&stars=true"></a>
3
+ <a href="https://www.npmjs.com/package/distube" target="_blank"><img src="https://nodei.co/npm/distube.png?downloads=true&downloadRank=true&stars=true"></a>
4
4
  </p>
5
5
  <p>
6
- <img alt="GitHub Workflow Status" src="https://img.shields.io/github/workflow/status/skick1234/DisTube/Testing?label=Tests&logo=github&style=flat-square">
7
- <img alt="node-current" src="https://img.shields.io/node/v/distube?logo=node.js&logoColor=white&style=flat-square">
8
- <img alt="npm peer dependency version" src="https://img.shields.io/npm/dependency-version/distube/peer/discord.js?label=discord.js&logo=discord&logoColor=white&style=flat-square">
9
- <img alt="Depfu" src="https://img.shields.io/depfu/skick1234/DisTube?style=flat-square">
10
- <img alt="Codecov branch" src="https://img.shields.io/codecov/c/github/skick1234/DisTube/main?logo=codecov&logoColor=white&style=flat-square&token=WWDYRRSEQW">
6
+ <a href="https://github.com/skick1234/DisTube/actions" target="_blank"><img alt="GitHub Workflow Status" src="https://img.shields.io/github/workflow/status/skick1234/DisTube/Testing?label=Tests&logo=github&style=flat-square"></a>
7
+ <a href="https://nodejs.org/" target="_blank"><img alt="node-current" src="https://img.shields.io/node/v/distube?logo=node.js&logoColor=white&style=flat-square"></a>
8
+ <a href="https://discord.js.org/" target="_blank"><img alt="npm peer dependency version" src="https://img.shields.io/npm/dependency-version/distube/peer/discord.js?label=discord.js&logo=discord&logoColor=white&style=flat-square"></a>
9
+ <a href="https://depfu.com/github/skick1234/DisTube?project_id=36112" target="_blank"><img alt="Depfu" src="https://img.shields.io/depfu/dependencies/github/skick1234/DisTube?style=flat-square"></a>
10
+ <a href="https://app.codecov.io/gh/skick1234/DisTube" target="_blank"><img alt="Codecov branch" src="https://img.shields.io/codecov/c/github/skick1234/DisTube/main?logo=codecov&logoColor=white&style=flat-square&token=WWDYRRSEQW"></a>
11
11
  <br>
12
- <img alt="npm" src="https://img.shields.io/npm/dt/distube?logo=npm&style=flat-square">
13
- <img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/skick1234/DisTube?logo=github&logoColor=white&style=flat-square">
14
- <img alt="Discord" src="https://img.shields.io/discord/732254550689316914?logo=discord&logoColor=white&style=flat-square">
12
+ <a href="https://www.npmjs.com/package/distube" target="_blank"><img alt="npm" src="https://img.shields.io/npm/dt/distube?logo=npm&style=flat-square"></a>
13
+ <a href="https://github.com/skick1234/DisTube/stargazers" target="_blank"><img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/skick1234/DisTube?logo=github&logoColor=white&style=flat-square"></a>
14
+ <a href="https://discord.gg/feaDd9h" target="_blank"><img alt="Discord" src="https://img.shields.io/discord/732254550689316914?logo=discord&logoColor=white&style=flat-square"></a>
15
15
  </p>
16
16
  </div>
17
17
 
package/dist/index.d.ts CHANGED
@@ -13,23 +13,44 @@ declare type DisTubeVoiceEvents = {
13
13
  error: (error: Error) => Awaitable;
14
14
  finish: () => Awaitable;
15
15
  };
16
+ declare enum Events {
17
+ ERROR = "error",
18
+ ADD_LIST = "addList",
19
+ ADD_SONG = "addSong",
20
+ PLAY_SONG = "playSong",
21
+ FINISH_SONG = "finishSong",
22
+ EMPTY = "empty",
23
+ FINISH = "finish",
24
+ INIT_QUEUE = "initQueue",
25
+ NO_RELATED = "noRelated",
26
+ DISCONNECT = "disconnect",
27
+ DELETE_QUEUE = "deleteQueue",
28
+ SEARCH_CANCEL = "searchCancel",
29
+ SEARCH_NO_RESULT = "searchNoResult",
30
+ SEARCH_DONE = "searchDone",
31
+ SEARCH_INVALID_ANSWER = "searchInvalidAnswer",
32
+ SEARCH_RESULT = "searchResult"
33
+ }
16
34
  declare type DisTubeEvents = {
17
- error: (channel: GuildTextBasedChannel | undefined, error: Error) => Awaitable;
18
- addList: (queue: Queue, playlist: Playlist) => Awaitable;
19
- addSong: (queue: Queue, song: Song) => Awaitable;
20
- playSong: (queue: Queue, song: Song) => Awaitable;
21
- finishSong: (queue: Queue, song: Song) => Awaitable;
22
- empty: (queue: Queue) => Awaitable;
23
- finish: (queue: Queue) => Awaitable;
24
- initQueue: (queue: Queue) => Awaitable;
25
- noRelated: (queue: Queue) => Awaitable;
26
- disconnect: (queue: Queue) => Awaitable;
27
- deleteQueue: (queue: Queue) => Awaitable;
28
- searchCancel: (message: Message<true>, query: string) => Awaitable;
29
- searchNoResult: (message: Message<true>, query: string) => Awaitable;
30
- searchDone: (message: Message<true>, answer: Message<true>, query: string) => Awaitable;
31
- searchInvalidAnswer: (message: Message<true>, answer: Message<true>, query: string) => Awaitable;
32
- searchResult: (message: Message<true>, results: SearchResult[], query: string) => Awaitable;
35
+ error: [channel: GuildTextBasedChannel | undefined, error: Error];
36
+ addList: [queue: Queue, playlist: Playlist];
37
+ addSong: [queue: Queue, song: Song];
38
+ playSong: [queue: Queue, song: Song];
39
+ finishSong: [queue: Queue, song: Song];
40
+ empty: [queue: Queue];
41
+ finish: [queue: Queue];
42
+ initQueue: [queue: Queue];
43
+ noRelated: [queue: Queue];
44
+ disconnect: [queue: Queue];
45
+ deleteQueue: [queue: Queue];
46
+ searchCancel: [message: Message<true>, query: string];
47
+ searchNoResult: [message: Message<true>, query: string];
48
+ searchDone: [message: Message<true>, answer: Message<true>, query: string];
49
+ searchInvalidAnswer: [message: Message<true>, answer: Message<true>, query: string];
50
+ searchResult: [message: Message<true>, results: SearchResult[], query: string];
51
+ };
52
+ declare type TypedDisTubeEvents = {
53
+ [K in keyof DisTubeEvents]: (...args: DisTubeEvents[K]) => Awaitable;
33
54
  };
34
55
  interface Filter {
35
56
  name: string;
@@ -337,6 +358,7 @@ declare class DisTubeVoice extends TypedEmitter<DisTubeVoiceEvents> {
337
358
  emittedError: boolean;
338
359
  isDisconnected: boolean;
339
360
  constructor(voiceManager: DisTubeVoiceManager, channel: VoiceBasedChannel);
361
+ get channelId(): string | undefined;
340
362
  get channel(): VoiceBasedChannel;
341
363
  set channel(channel: VoiceBasedChannel);
342
364
  join(channel?: VoiceBasedChannel): Promise<DisTubeVoice>;
@@ -543,6 +565,8 @@ declare function isClientInstance(client: any): client is Client;
543
565
  declare function checkInvalidKey(target: Record<string, any>, source: Record<string, any> | string[], sourceName: string): void;
544
566
  declare function isObject(obj: any): obj is object;
545
567
  declare function isRecord<T = unknown>(obj: any): obj is Record<string, T>;
568
+ declare type KeyOf<T> = T extends object ? (keyof T)[] : [];
569
+ declare function objectKeys<T>(obj: T): KeyOf<T>;
546
570
 
547
571
  declare class DirectLinkPlugin extends ExtractorPlugin {
548
572
  validate(url: string): Promise<boolean>;
@@ -553,7 +577,7 @@ declare class DirectLinkPlugin extends ExtractorPlugin {
553
577
  }
554
578
 
555
579
  declare const version: string;
556
- declare class DisTube extends TypedEmitter<DisTubeEvents> {
580
+ declare class DisTube extends TypedEmitter<TypedDisTubeEvents> {
557
581
  readonly handler: DisTubeHandler;
558
582
  readonly options: Options;
559
583
  readonly client: Client;
@@ -601,4 +625,4 @@ declare class DisTube extends TypedEmitter<DisTubeEvents> {
601
625
  emitError(error: Error, channel?: GuildTextBasedChannel): void;
602
626
  }
603
627
 
604
- export { Awaitable, BaseManager, Chapter, CustomPlaylistOptions, CustomPlugin, DirectLinkPlugin, DisTube, DisTubeBase, DisTubeError, DisTubeEvents, DisTubeHandler, DisTubeOptions, DisTubeStream, DisTubeVoice, DisTubeVoiceEvents, DisTubeVoiceManager, ExtractorPlugin, Filter, FilterManager, FilterResolvable, Filters, GuildIdManager, GuildIdResolvable, Options, OtherSongInfo, PlayHandlerOptions, PlayOptions, Playlist, PlaylistInfo, Plugin, PluginType, Queue, QueueManager, RelatedSong, RepeatMode, ResolveOptions, ResolvePlaylistOptions, SearchResult, SearchResultPlaylist, SearchResultType, SearchResultVideo, Song, StreamType, TaskQueue, checkIntents, checkInvalidKey, chooseBestVideoFormat, DisTube as default, defaultFilters, defaultOptions, formatDuration, isClientInstance, isGuildInstance, isMemberInstance, isMessageInstance, isObject, isRecord, isSnowflake, isSupportedVoiceChannel, isTextChannelInstance, isURL, isVoiceChannelEmpty, parseNumber, resolveGuildId, toSecond, version };
628
+ export { Awaitable, BaseManager, Chapter, CustomPlaylistOptions, CustomPlugin, DirectLinkPlugin, DisTube, DisTubeBase, DisTubeError, DisTubeEvents, DisTubeHandler, DisTubeOptions, DisTubeStream, DisTubeVoice, DisTubeVoiceEvents, DisTubeVoiceManager, Events, ExtractorPlugin, Filter, FilterManager, FilterResolvable, Filters, GuildIdManager, GuildIdResolvable, Options, OtherSongInfo, PlayHandlerOptions, PlayOptions, Playlist, PlaylistInfo, Plugin, PluginType, Queue, QueueManager, RelatedSong, RepeatMode, ResolveOptions, ResolvePlaylistOptions, SearchResult, SearchResultPlaylist, SearchResultType, SearchResultVideo, Song, StreamType, TaskQueue, TypedDisTubeEvents, checkIntents, checkInvalidKey, chooseBestVideoFormat, DisTube as default, defaultFilters, defaultOptions, formatDuration, isClientInstance, isGuildInstance, isMemberInstance, isMessageInstance, isObject, isRecord, isSnowflake, isSupportedVoiceChannel, isTextChannelInstance, isURL, isVoiceChannelEmpty, objectKeys, parseNumber, resolveGuildId, toSecond, version };
package/dist/index.js CHANGED
@@ -56,15 +56,11 @@ var require_package = __commonJS({
56
56
  "package.json"(exports, module2) {
57
57
  module2.exports = {
58
58
  name: "distube",
59
- version: "4.0.2",
59
+ version: "4.0.3",
60
60
  description: "A Discord.js module to simplify your music commands and play songs with audio filters on Discord without any API key.",
61
61
  main: "./dist/index.js",
62
- module: "./dist/index.mjs",
63
62
  types: "./dist/index.d.ts",
64
- exports: {
65
- import: "./dist/index.mjs",
66
- require: "./dist/index.js"
67
- },
63
+ exports: "./dist/index.js",
68
64
  directories: {
69
65
  lib: "src",
70
66
  test: "tests"
@@ -139,11 +135,11 @@ var require_package = __commonJS({
139
135
  "@discordjs/voice": "^0.11.0",
140
136
  "@distube/docgen": "distubejs/docgen",
141
137
  "@types/jest": "^28.1.6",
142
- "@types/node": "^18.0.6",
138
+ "@types/node": "^18.6.0",
143
139
  "@typescript-eslint/eslint-plugin": "^5.30.7",
144
140
  "@typescript-eslint/parser": "^5.30.7",
145
141
  "babel-jest": "^28.1.3",
146
- "discord.js": "^14.0.2",
142
+ "discord.js": "^14.0.3",
147
143
  eslint: "^8.20.0",
148
144
  "eslint-config-distube": "^1.6.4",
149
145
  "eslint-config-prettier": "^8.5.0",
@@ -153,7 +149,7 @@ var require_package = __commonJS({
153
149
  jest: "^28.1.3",
154
150
  "jsdoc-babel": "^0.5.0",
155
151
  "nano-staged": "^0.8.0",
156
- "npm-check-updates": "^15.3.4",
152
+ "npm-check-updates": "^16.0.0",
157
153
  pinst: "^3.0.0",
158
154
  prettier: "^2.7.1",
159
155
  tsup: "^6.1.3",
@@ -199,6 +195,7 @@ __export(src_exports, {
199
195
  DisTubeStream: () => DisTubeStream,
200
196
  DisTubeVoice: () => DisTubeVoice,
201
197
  DisTubeVoiceManager: () => DisTubeVoiceManager,
198
+ Events: () => Events,
202
199
  ExtractorPlugin: () => ExtractorPlugin,
203
200
  FilterManager: () => FilterManager,
204
201
  GuildIdManager: () => GuildIdManager,
@@ -233,6 +230,7 @@ __export(src_exports, {
233
230
  isTextChannelInstance: () => isTextChannelInstance,
234
231
  isURL: () => isURL,
235
232
  isVoiceChannelEmpty: () => isVoiceChannelEmpty,
233
+ objectKeys: () => objectKeys,
236
234
  parseNumber: () => parseNumber,
237
235
  resolveGuildId: () => resolveGuildId,
238
236
  toSecond: () => toSecond,
@@ -241,6 +239,25 @@ __export(src_exports, {
241
239
  module.exports = __toCommonJS(src_exports);
242
240
 
243
241
  // src/type.ts
242
+ var Events = /* @__PURE__ */ ((Events2) => {
243
+ Events2["ERROR"] = "error";
244
+ Events2["ADD_LIST"] = "addList";
245
+ Events2["ADD_SONG"] = "addSong";
246
+ Events2["PLAY_SONG"] = "playSong";
247
+ Events2["FINISH_SONG"] = "finishSong";
248
+ Events2["EMPTY"] = "empty";
249
+ Events2["FINISH"] = "finish";
250
+ Events2["INIT_QUEUE"] = "initQueue";
251
+ Events2["NO_RELATED"] = "noRelated";
252
+ Events2["DISCONNECT"] = "disconnect";
253
+ Events2["DELETE_QUEUE"] = "deleteQueue";
254
+ Events2["SEARCH_CANCEL"] = "searchCancel";
255
+ Events2["SEARCH_NO_RESULT"] = "searchNoResult";
256
+ Events2["SEARCH_DONE"] = "searchDone";
257
+ Events2["SEARCH_INVALID_ANSWER"] = "searchInvalidAnswer";
258
+ Events2["SEARCH_RESULT"] = "searchResult";
259
+ return Events2;
260
+ })(Events || {});
244
261
  var RepeatMode = /* @__PURE__ */ ((RepeatMode2) => {
245
262
  RepeatMode2[RepeatMode2["DISABLED"] = 0] = "DISABLED";
246
263
  RepeatMode2[RepeatMode2["SONG"] = 1] = "SONG";
@@ -698,6 +715,7 @@ var DisTubeBase = class {
698
715
  __name(DisTubeBase, "DisTubeBase");
699
716
 
700
717
  // src/core/DisTubeVoice.ts
718
+ var import_discord = require("discord.js");
701
719
  var import_tiny_typed_emitter = require("tiny-typed-emitter");
702
720
  var import_voice = require("@discordjs/voice");
703
721
  var _channel, _volume, _br, br_fn, _join, join_fn;
@@ -751,7 +769,23 @@ var DisTubeVoice = class extends import_tiny_typed_emitter.TypedEmitter {
751
769
  }).on("error", () => void 0);
752
770
  this.connection.subscribe(this.audioPlayer);
753
771
  }
772
+ get channelId() {
773
+ return this.connection?.joinConfig?.channelId ?? void 0;
774
+ }
754
775
  get channel() {
776
+ if (!this.channelId)
777
+ return __privateGet(this, _channel);
778
+ if (__privateGet(this, _channel)?.id === this.channelId)
779
+ return __privateGet(this, _channel);
780
+ const channel = this.voices.client.channels.cache.get(this.channelId);
781
+ if (!channel)
782
+ return __privateGet(this, _channel);
783
+ for (const type of import_discord.Constants.VoiceBasedChannelTypes) {
784
+ if (channel.type === type) {
785
+ __privateSet(this, _channel, channel);
786
+ return channel;
787
+ }
788
+ }
755
789
  return __privateGet(this, _channel);
756
790
  }
757
791
  set channel(channel) {
@@ -762,7 +796,7 @@ var DisTubeVoice = class extends import_tiny_typed_emitter.TypedEmitter {
762
796
  throw new DisTubeError("VOICE_DIFFERENT_GUILD");
763
797
  if (channel.client.user?.id !== this.voices.client.user?.id)
764
798
  throw new DisTubeError("VOICE_DIFFERENT_CLIENT");
765
- if (channel.id === __privateGet(this, _channel)?.id)
799
+ if (channel.id === this.channelId)
766
800
  return;
767
801
  if (!channel.joinable) {
768
802
  if (channel.full)
@@ -887,11 +921,11 @@ join_fn = /* @__PURE__ */ __name(function(channel) {
887
921
  }, "#join");
888
922
 
889
923
  // src/core/manager/BaseManager.ts
890
- var import_discord = require("discord.js");
924
+ var import_discord2 = require("discord.js");
891
925
  var BaseManager = class extends DisTubeBase {
892
926
  constructor() {
893
927
  super(...arguments);
894
- __publicField(this, "collection", new import_discord.Collection());
928
+ __publicField(this, "collection", new import_discord2.Collection());
895
929
  }
896
930
  get size() {
897
931
  return this.collection.size;
@@ -1125,7 +1159,7 @@ voiceEventHandler_fn = /* @__PURE__ */ __name(function(queue) {
1125
1159
  error: (error) => __privateMethod(this, _handlePlayingError, handlePlayingError_fn).call(this, queue, error),
1126
1160
  finish: () => __privateMethod(this, _handleSongFinish, handleSongFinish_fn).call(this, queue)
1127
1161
  };
1128
- for (const event of Object.keys(queue._listeners)) {
1162
+ for (const event of objectKeys(queue._listeners)) {
1129
1163
  queue.voice.on(event, queue._listeners[event]);
1130
1164
  }
1131
1165
  }, "#voiceEventHandler");
@@ -1881,7 +1915,7 @@ var Queue = class extends DisTubeBase {
1881
1915
  this.songs = [];
1882
1916
  this.previousSongs = [];
1883
1917
  if (this._listeners) {
1884
- for (const event of Object.keys(this._listeners)) {
1918
+ for (const event of objectKeys(this._listeners)) {
1885
1919
  this.voice.removeListener(event, this._listeners[event]);
1886
1920
  }
1887
1921
  }
@@ -1957,7 +1991,7 @@ __name(ExtractorPlugin, "ExtractorPlugin");
1957
1991
 
1958
1992
  // src/util.ts
1959
1993
  var import_url = require("url");
1960
- var import_discord2 = require("discord.js");
1994
+ var import_discord3 = require("discord.js");
1961
1995
  var formatInt = /* @__PURE__ */ __name((int) => int < 10 ? `0${int}` : int, "formatInt");
1962
1996
  function formatDuration(sec) {
1963
1997
  if (!sec || !Number(sec))
@@ -2011,8 +2045,8 @@ function isURL(input) {
2011
2045
  }
2012
2046
  __name(isURL, "isURL");
2013
2047
  function checkIntents(options) {
2014
- const intents = new import_discord2.IntentsBitField(options.intents);
2015
- if (!intents.has(import_discord2.GatewayIntentBits.GuildVoiceStates))
2048
+ const intents = new import_discord3.IntentsBitField(options.intents);
2049
+ if (!intents.has(import_discord3.GatewayIntentBits.GuildVoiceStates))
2016
2050
  throw new DisTubeError("MISSING_INTENTS", "GuildVoiceStates");
2017
2051
  }
2018
2052
  __name(checkIntents, "checkIntents");
@@ -2030,7 +2064,7 @@ function isVoiceChannelEmpty(voiceState) {
2030
2064
  __name(isVoiceChannelEmpty, "isVoiceChannelEmpty");
2031
2065
  function isSnowflake(id) {
2032
2066
  try {
2033
- return import_discord2.SnowflakeUtil.deconstruct(id).timestamp > import_discord2.SnowflakeUtil.epoch;
2067
+ return import_discord3.SnowflakeUtil.deconstruct(id).timestamp > import_discord3.SnowflakeUtil.epoch;
2034
2068
  } catch {
2035
2069
  return false;
2036
2070
  }
@@ -2041,15 +2075,15 @@ function isMemberInstance(member) {
2041
2075
  }
2042
2076
  __name(isMemberInstance, "isMemberInstance");
2043
2077
  function isTextChannelInstance(channel) {
2044
- return !!channel && isSnowflake(channel.id) && isSnowflake(channel.guildId) && typeof channel.name === "string" && import_discord2.Constants.TextBasedChannelTypes.includes(channel.type) && typeof channel.nsfw === "boolean" && "messages" in channel && typeof channel.send === "function";
2078
+ return !!channel && isSnowflake(channel.id) && isSnowflake(channel.guildId) && typeof channel.name === "string" && import_discord3.Constants.TextBasedChannelTypes.includes(channel.type) && typeof channel.nsfw === "boolean" && "messages" in channel && typeof channel.send === "function";
2045
2079
  }
2046
2080
  __name(isTextChannelInstance, "isTextChannelInstance");
2047
2081
  function isMessageInstance(message) {
2048
- return !!message && isSnowflake(message.id) && isSnowflake(message.guildId) && isMemberInstance(message.member) && isTextChannelInstance(message.channel) && import_discord2.Constants.NonSystemMessageTypes.includes(message.type) && message.member.id === message.author?.id;
2082
+ return !!message && isSnowflake(message.id) && isSnowflake(message.guildId) && isMemberInstance(message.member) && isTextChannelInstance(message.channel) && import_discord3.Constants.NonSystemMessageTypes.includes(message.type) && message.member.id === message.author?.id;
2049
2083
  }
2050
2084
  __name(isMessageInstance, "isMessageInstance");
2051
2085
  function isSupportedVoiceChannel(channel) {
2052
- return !!channel && isSnowflake(channel.id) && isSnowflake(channel.guildId) && import_discord2.Constants.VoiceBasedChannelTypes.includes(channel.type);
2086
+ return !!channel && isSnowflake(channel.id) && isSnowflake(channel.guildId) && import_discord3.Constants.VoiceBasedChannelTypes.includes(channel.type);
2053
2087
  }
2054
2088
  __name(isSupportedVoiceChannel, "isSupportedVoiceChannel");
2055
2089
  function isGuildInstance(guild) {
@@ -2081,8 +2115,8 @@ __name(isClientInstance, "isClientInstance");
2081
2115
  function checkInvalidKey(target, source, sourceName) {
2082
2116
  if (!isObject(target))
2083
2117
  throw new DisTubeError("INVALID_TYPE", "object", target, sourceName);
2084
- const sourceKeys = Array.isArray(source) ? source : Object.keys(source);
2085
- const invalidKey = Object.keys(target).find((key) => !sourceKeys.includes(key));
2118
+ const sourceKeys = Array.isArray(source) ? source : objectKeys(source);
2119
+ const invalidKey = objectKeys(target).find((key) => !sourceKeys.includes(key));
2086
2120
  if (invalidKey)
2087
2121
  throw new DisTubeError("INVALID_KEY", sourceName, invalidKey);
2088
2122
  }
@@ -2095,6 +2129,12 @@ function isRecord(obj) {
2095
2129
  return isObject(obj);
2096
2130
  }
2097
2131
  __name(isRecord, "isRecord");
2132
+ function objectKeys(obj) {
2133
+ if (!isObject(obj))
2134
+ return [];
2135
+ return Object.keys(obj);
2136
+ }
2137
+ __name(objectKeys, "objectKeys");
2098
2138
 
2099
2139
  // src/plugin/DirectLink.ts
2100
2140
  var import_undici = require("undici");
@@ -2377,6 +2417,7 @@ __name(DisTube, "DisTube");
2377
2417
  DisTubeStream,
2378
2418
  DisTubeVoice,
2379
2419
  DisTubeVoiceManager,
2420
+ Events,
2380
2421
  ExtractorPlugin,
2381
2422
  FilterManager,
2382
2423
  GuildIdManager,
@@ -2410,6 +2451,7 @@ __name(DisTube, "DisTube");
2410
2451
  isTextChannelInstance,
2411
2452
  isURL,
2412
2453
  isVoiceChannelEmpty,
2454
+ objectKeys,
2413
2455
  parseNumber,
2414
2456
  resolveGuildId,
2415
2457
  toSecond,