distube 3.0.6 → 3.2.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.
Files changed (107) hide show
  1. package/dist/DisTube.d.ts +133 -65
  2. package/dist/DisTube.d.ts.map +1 -1
  3. package/dist/DisTube.js +161 -103
  4. package/dist/DisTube.js.map +1 -1
  5. package/dist/constant.d.ts +13 -14
  6. package/dist/constant.d.ts.map +1 -1
  7. package/dist/constant.js +13 -14
  8. package/dist/constant.js.map +1 -1
  9. package/dist/core/DisTubeBase.d.ts +3 -4
  10. package/dist/core/DisTubeBase.d.ts.map +1 -1
  11. package/dist/core/DisTubeBase.js +1 -2
  12. package/dist/core/DisTubeBase.js.map +1 -1
  13. package/dist/core/DisTubeHandler.d.ts +37 -25
  14. package/dist/core/DisTubeHandler.d.ts.map +1 -1
  15. package/dist/core/DisTubeHandler.js +72 -68
  16. package/dist/core/DisTubeHandler.js.map +1 -1
  17. package/dist/core/DisTubeOptions.d.ts +1 -2
  18. package/dist/core/DisTubeOptions.d.ts.map +1 -1
  19. package/dist/core/DisTubeOptions.js +64 -58
  20. package/dist/core/DisTubeOptions.js.map +1 -1
  21. package/dist/core/DisTubeStream.d.ts +1 -1
  22. package/dist/core/DisTubeStream.d.ts.map +1 -1
  23. package/dist/core/DisTubeStream.js +0 -1
  24. package/dist/core/DisTubeStream.js.map +1 -1
  25. package/dist/core/index.d.ts +2 -2
  26. package/dist/core/index.d.ts.map +1 -1
  27. package/dist/core/index.js +2 -2
  28. package/dist/core/index.js.map +1 -1
  29. package/dist/core/manager/BaseManager.d.ts +11 -7
  30. package/dist/core/manager/BaseManager.d.ts.map +1 -1
  31. package/dist/core/manager/BaseManager.js +11 -13
  32. package/dist/core/manager/BaseManager.js.map +1 -1
  33. package/dist/core/manager/QueueManager.d.ts +11 -38
  34. package/dist/core/manager/QueueManager.d.ts.map +1 -1
  35. package/dist/core/manager/QueueManager.js +115 -129
  36. package/dist/core/manager/QueueManager.js.map +1 -1
  37. package/dist/core/voice/DJSAdapter.js +4 -7
  38. package/dist/core/voice/DJSAdapter.js.map +1 -1
  39. package/dist/core/voice/DisTubeVoice.d.ts +10 -13
  40. package/dist/core/voice/DisTubeVoice.d.ts.map +1 -1
  41. package/dist/core/voice/DisTubeVoice.js +39 -28
  42. package/dist/core/voice/DisTubeVoice.js.map +1 -1
  43. package/dist/core/voice/DisTubeVoiceManager.d.ts +10 -10
  44. package/dist/core/voice/DisTubeVoiceManager.d.ts.map +1 -1
  45. package/dist/core/voice/DisTubeVoiceManager.js +5 -5
  46. package/dist/core/voice/DisTubeVoiceManager.js.map +1 -1
  47. package/dist/index.d.ts +1 -1
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +2 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/plugin/http.d.ts +5 -3
  52. package/dist/plugin/http.d.ts.map +1 -1
  53. package/dist/plugin/http.js +3 -5
  54. package/dist/plugin/http.js.map +1 -1
  55. package/dist/plugin/https.d.ts +10 -5
  56. package/dist/plugin/https.d.ts.map +1 -1
  57. package/dist/plugin/https.js +6 -9
  58. package/dist/plugin/https.js.map +1 -1
  59. package/dist/plugin/youtube-dl.d.ts +5 -4
  60. package/dist/plugin/youtube-dl.d.ts.map +1 -1
  61. package/dist/plugin/youtube-dl.js +6 -11
  62. package/dist/plugin/youtube-dl.js.map +1 -1
  63. package/dist/struct/CustomPlugin.d.ts +37 -17
  64. package/dist/struct/CustomPlugin.d.ts.map +1 -1
  65. package/dist/struct/CustomPlugin.js +18 -19
  66. package/dist/struct/CustomPlugin.js.map +1 -1
  67. package/dist/struct/DisTubeError.d.ts +4 -3
  68. package/dist/struct/DisTubeError.d.ts.map +1 -1
  69. package/dist/struct/DisTubeError.js +5 -7
  70. package/dist/struct/DisTubeError.js.map +1 -1
  71. package/dist/struct/ExtractorPlugin.d.ts +25 -15
  72. package/dist/struct/ExtractorPlugin.d.ts.map +1 -1
  73. package/dist/struct/ExtractorPlugin.js +14 -16
  74. package/dist/struct/ExtractorPlugin.js.map +1 -1
  75. package/dist/struct/Playlist.d.ts +24 -8
  76. package/dist/struct/Playlist.d.ts.map +1 -1
  77. package/dist/struct/Playlist.js +27 -14
  78. package/dist/struct/Playlist.js.map +1 -1
  79. package/dist/struct/Plugin.d.ts +4 -12
  80. package/dist/struct/Plugin.d.ts.map +1 -1
  81. package/dist/struct/Plugin.js +1 -11
  82. package/dist/struct/Plugin.js.map +1 -1
  83. package/dist/struct/Queue.d.ts +5 -6
  84. package/dist/struct/Queue.d.ts.map +1 -1
  85. package/dist/struct/Queue.js +5 -9
  86. package/dist/struct/Queue.js.map +1 -1
  87. package/dist/struct/SearchResult.d.ts +0 -1
  88. package/dist/struct/SearchResult.d.ts.map +1 -1
  89. package/dist/struct/SearchResult.js +2 -4
  90. package/dist/struct/SearchResult.js.map +1 -1
  91. package/dist/struct/Song.d.ts +26 -10
  92. package/dist/struct/Song.d.ts.map +1 -1
  93. package/dist/struct/Song.js +37 -25
  94. package/dist/struct/Song.js.map +1 -1
  95. package/dist/struct/TaskQueue.d.ts +1 -6
  96. package/dist/struct/TaskQueue.d.ts.map +1 -1
  97. package/dist/struct/TaskQueue.js +13 -7
  98. package/dist/struct/TaskQueue.js.map +1 -1
  99. package/dist/tsconfig.tsbuildinfo +1 -1
  100. package/dist/type.d.ts +12 -12
  101. package/dist/type.d.ts.map +1 -1
  102. package/dist/type.js.map +1 -1
  103. package/dist/util.d.ts +6 -6
  104. package/dist/util.d.ts.map +1 -1
  105. package/dist/util.js +9 -15
  106. package/dist/util.js.map +1 -1
  107. package/package.json +5 -6
@@ -1 +1 @@
1
- {"version":3,"file":"DisTubeStream.js","sourceRoot":"","sources":["../../src/core/DisTubeStream.ts"],"names":[],"mappings":"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","sourcesContent":["import { isURL } from \"..\";\nimport { FFmpeg } from \"prism-media\";\nimport { DisTubeError } from \"../struct\";\nimport { StreamType } from \"@discordjs/voice\";\nimport type ytdl from \"@distube/ytdl-core\";\n\ninterface StreamOptions extends ytdl.downloadOptions {\n /**\n * Time to seek in seconds\n */\n seek?: number;\n /**\n * Additional FFmpeg arguments\n */\n ffmpegArgs?: string[];\n /**\n * If the stream url is live\n */\n isLive?: boolean;\n}\n\nexport const chooseBestVideoFormat = (formats: ytdl.videoFormat[], isLive = false) => {\n let filter = (format: ytdl.videoFormat) => format.hasAudio;\n if (isLive) filter = (format: ytdl.videoFormat) => format.hasAudio && format.isHLS;\n formats = formats\n .filter(filter)\n .sort((a, b) => Number(b.audioBitrate) - Number(a.audioBitrate) || Number(a.bitrate) - Number(b.bitrate));\n return formats.find(format => !format.hasVideo) || formats.sort((a, b) => Number(a.bitrate) - Number(b.bitrate))[0];\n};\n\n/**\n * Create a stream to play with {@link DisTubeVoice}\n * @private\n */\nexport class DisTubeStream {\n /**\n * Create a stream from ytdl video formats\n * @param {ytdl.videoFormat[]} formats ytdl video formats\n * @param {StreamOptions} options options\n * @returns {DisTubeStream}\n * @private\n */\n static YouTube(formats: ytdl.videoFormat[] | undefined, options: StreamOptions = {}): DisTubeStream {\n if (!formats || !formats.length) throw new DisTubeError(\"UNAVAILABLE_VIDEO\");\n if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"object\", options, \"options\");\n }\n const bestFormat = chooseBestVideoFormat(formats, options.isLive);\n if (!bestFormat) throw new DisTubeError(\"UNPLAYABLE_FORMATS\");\n return new DisTubeStream(bestFormat.url, options);\n }\n /**\n * Create a stream from a stream url\n * @param {string} url stream url\n * @param {StreamOptions} options options\n * @returns {DisTubeStream}\n * @private\n */\n static DirectLink(url: string, options: StreamOptions = {}): DisTubeStream {\n if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"object\", options, \"options\");\n }\n if (typeof url !== \"string\" || !isURL(url)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"an URL\", url);\n }\n return new DisTubeStream(url, options);\n }\n type: StreamType.Raw;\n stream: FFmpeg;\n url: string;\n /**\n * Create a DisTubeStream to play with {@link DisTubeVoice}\n * @param {string} url Stream URL\n * @param {StreamOptions} options Stream options\n * @private\n */\n constructor(url: string, options: StreamOptions) {\n /**\n * Stream URL\n * @type {string}\n */\n this.url = url;\n /**\n * Stream type\n * @type {DiscordVoice.StreamType.Raw}\n */\n this.type = StreamType.Raw;\n const args = [\n \"-reconnect\",\n \"1\",\n \"-reconnect_streamed\",\n \"1\",\n \"-reconnect_delay_max\",\n \"5\",\n \"-i\",\n url,\n \"-analyzeduration\",\n \"0\",\n \"-loglevel\",\n \"0\",\n \"-ar\",\n \"48000\",\n \"-ac\",\n \"2\",\n \"-f\",\n \"s16le\",\n ];\n if (typeof options.seek === \"number\" && options.seek > 0) {\n args.unshift(\"-ss\", options.seek.toString());\n }\n if (Array.isArray(options.ffmpegArgs)) {\n args.push(...options.ffmpegArgs);\n }\n /**\n * FFmpeg stream (Duplex)\n * @type {FFmpeg}\n */\n this.stream = new FFmpeg({ args, shell: false });\n }\n}\n\nexport default DisTubeStream;\n"]}
1
+ {"version":3,"file":"DisTubeStream.js","sourceRoot":"","sources":["../../src/core/DisTubeStream.ts"],"names":[],"mappings":"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","sourcesContent":["import { isURL } from \"..\";\nimport { FFmpeg } from \"prism-media\";\nimport { DisTubeError } from \"../struct\";\nimport { StreamType } from \"@discordjs/voice\";\nimport type ytdl from \"@distube/ytdl-core\";\n\ninterface StreamOptions extends ytdl.downloadOptions {\n /**\n * Time to seek in seconds\n */\n seek?: number;\n /**\n * Additional FFmpeg arguments\n */\n ffmpegArgs?: string[];\n /**\n * If the stream url is live\n */\n isLive?: boolean;\n}\n\nexport const chooseBestVideoFormat = (formats: ytdl.videoFormat[], isLive = false) => {\n let filter = (format: ytdl.videoFormat) => format.hasAudio;\n if (isLive) filter = (format: ytdl.videoFormat) => format.hasAudio && format.isHLS;\n formats = formats\n .filter(filter)\n .sort((a, b) => Number(b.audioBitrate) - Number(a.audioBitrate) || Number(a.bitrate) - Number(b.bitrate));\n return formats.find(format => !format.hasVideo) || formats.sort((a, b) => Number(a.bitrate) - Number(b.bitrate))[0];\n};\n\n/**\n * Create a stream to play with {@link DisTubeVoice}\n * @private\n */\nexport class DisTubeStream {\n /**\n * Create a stream from ytdl video formats\n * @param {ytdl.videoFormat[]} formats ytdl video formats\n * @param {StreamOptions} options options\n * @returns {DisTubeStream}\n * @private\n */\n static YouTube(formats: ytdl.videoFormat[] | undefined, options: StreamOptions = {}): DisTubeStream {\n if (!formats || !formats.length) throw new DisTubeError(\"UNAVAILABLE_VIDEO\");\n if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"object\", options, \"options\");\n }\n const bestFormat = chooseBestVideoFormat(formats, options.isLive);\n if (!bestFormat) throw new DisTubeError(\"UNPLAYABLE_FORMATS\");\n return new DisTubeStream(bestFormat.url, options);\n }\n /**\n * Create a stream from a stream url\n * @param {string} url stream url\n * @param {StreamOptions} options options\n * @returns {DisTubeStream}\n * @private\n */\n static DirectLink(url: string, options: StreamOptions = {}): DisTubeStream {\n if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"object\", options, \"options\");\n }\n if (typeof url !== \"string\" || !isURL(url)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"an URL\", url);\n }\n return new DisTubeStream(url, options);\n }\n type: StreamType.Raw;\n stream: FFmpeg;\n url: string;\n /**\n * Create a DisTubeStream to play with {@link DisTubeVoice}\n * @param {string} url Stream URL\n * @param {StreamOptions} options Stream options\n * @private\n */\n constructor(url: string, options: StreamOptions) {\n /**\n * Stream URL\n * @type {string}\n */\n this.url = url;\n /**\n * Stream type\n * @type {DiscordVoice.StreamType.Raw}\n */\n this.type = StreamType.Raw;\n const args = [\n \"-reconnect\",\n \"1\",\n \"-reconnect_streamed\",\n \"1\",\n \"-reconnect_delay_max\",\n \"5\",\n \"-i\",\n url,\n \"-analyzeduration\",\n \"0\",\n \"-loglevel\",\n \"0\",\n \"-ar\",\n \"48000\",\n \"-ac\",\n \"2\",\n \"-f\",\n \"s16le\",\n ];\n if (typeof options.seek === \"number\" && options.seek > 0) {\n args.unshift(\"-ss\", options.seek.toString());\n }\n if (Array.isArray(options.ffmpegArgs)) {\n args.push(...options.ffmpegArgs);\n }\n /**\n * FFmpeg stream (Duplex)\n * @type {FFmpeg}\n */\n this.stream = new FFmpeg({ args, shell: false });\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  export * from "./DisTubeOptions";
2
- export * from "./voice";
3
- export * from "./manager";
4
2
  export * from "./DisTubeBase";
5
3
  export * from "./DisTubeStream";
4
+ export * from "./manager";
5
+ export * from "./voice";
6
6
  export * from "./DisTubeHandler";
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC"}
@@ -11,9 +11,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./DisTubeOptions"), exports);
14
- __exportStar(require("./voice"), exports);
15
- __exportStar(require("./manager"), exports);
16
14
  __exportStar(require("./DisTubeBase"), exports);
17
15
  __exportStar(require("./DisTubeStream"), exports);
16
+ __exportStar(require("./manager"), exports);
17
+ __exportStar(require("./voice"), exports);
18
18
  __exportStar(require("./DisTubeHandler"), exports);
19
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAAiC;AACjC,0CAAwB;AACxB,4CAA0B;AAC1B,gDAA8B;AAC9B,kDAAgC;AAChC,mDAAiC","sourcesContent":["export * from \"./DisTubeOptions\";\nexport * from \"./voice\";\nexport * from \"./manager\";\nexport * from \"./DisTubeBase\";\nexport * from \"./DisTubeStream\";\nexport * from \"./DisTubeHandler\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAAiC;AACjC,gDAA8B;AAC9B,kDAAgC;AAChC,4CAA0B;AAC1B,0CAAwB;AACxB,mDAAiC","sourcesContent":["export * from \"./DisTubeOptions\";\nexport * from \"./DisTubeBase\";\nexport * from \"./DisTubeStream\";\nexport * from \"./manager\";\nexport * from \"./voice\";\nexport * from \"./DisTubeHandler\";\n"]}
@@ -1,18 +1,22 @@
1
- import DisTubeBase from "../DisTubeBase";
1
+ import { DisTubeBase } from "..";
2
2
  import { Collection } from "discord.js";
3
- import type { DisTube, GuildIDResolvable } from "../..";
3
+ import type { GuildIdResolvable } from "../..";
4
4
  /**
5
5
  * Manages the collection of a data model.
6
6
  * @abstract
7
7
  * @private
8
+ * @extends DisTubeBase
8
9
  */
9
10
  export declare abstract class BaseManager<V> extends DisTubeBase {
11
+ /**
12
+ * The collection of items for this manager.
13
+ * @type {Discord.Collection}
14
+ * @abstract
15
+ */
10
16
  collection: Collection<string, V>;
11
- constructor(distube: DisTube);
12
17
  add(id: string, data: V): V;
13
- get(idOrInstance: GuildIDResolvable): V | undefined;
14
- delete(idOrInstance: GuildIDResolvable): void;
15
- has(idOrInstance: GuildIDResolvable): boolean;
18
+ get(idOrInstance: GuildIdResolvable): V | undefined;
19
+ delete(idOrInstance: GuildIdResolvable): void;
20
+ has(idOrInstance: GuildIdResolvable): boolean;
16
21
  }
17
- export default BaseManager;
18
22
  //# sourceMappingURL=BaseManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseManager.d.ts","sourceRoot":"","sources":["../../../src/core/manager/BaseManager.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,gBAAgB,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAExD;;;;GAIG;AACH,8BAAsB,WAAW,CAAC,CAAC,CAAE,SAAQ,WAAW;IACtD,UAAU,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACtB,OAAO,EAAE,OAAO;IAQ5B,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAQvB,GAAG,CAAC,YAAY,EAAE,iBAAiB,GAAG,CAAC,GAAG,SAAS;IAGnD,MAAM,CAAC,YAAY,EAAE,iBAAiB,GAAG,IAAI;IAG7C,GAAG,CAAC,YAAY,EAAE,iBAAiB,GAAG,OAAO;CAG9C;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"BaseManager.d.ts","sourceRoot":"","sources":["../../../src/core/manager/BaseManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE/C;;;;;GAKG;AACH,8BAAsB,WAAW,CAAC,CAAC,CAAE,SAAQ,WAAW;IACtD;;;;OAIG;IACH,UAAU,wBAA+B;IACzC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAQvB,GAAG,CAAC,YAAY,EAAE,iBAAiB,GAAG,CAAC,GAAG,SAAS;IAGnD,MAAM,CAAC,YAAY,EAAE,iBAAiB,GAAG,IAAI;IAG7C,GAAG,CAAC,YAAY,EAAE,iBAAiB,GAAG,OAAO;CAG9C"}
@@ -1,23 +1,22 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.BaseManager = void 0;
7
- const DisTubeBase_1 = __importDefault(require("../DisTubeBase"));
8
- const __1 = require("../..");
4
+ const __1 = require("..");
5
+ const __2 = require("../..");
9
6
  const discord_js_1 = require("discord.js");
10
7
  /**
11
8
  * Manages the collection of a data model.
12
9
  * @abstract
13
10
  * @private
11
+ * @extends DisTubeBase
14
12
  */
15
- class BaseManager extends DisTubeBase_1.default {
16
- constructor(distube) {
17
- super(distube);
13
+ class BaseManager extends __1.DisTubeBase {
14
+ constructor() {
15
+ super(...arguments);
18
16
  /**
19
- * Collection of of a data model.
17
+ * The collection of items for this manager.
20
18
  * @type {Discord.Collection}
19
+ * @abstract
21
20
  */
22
21
  this.collection = new discord_js_1.Collection();
23
22
  }
@@ -30,15 +29,14 @@ class BaseManager extends DisTubeBase_1.default {
30
29
  return data;
31
30
  }
32
31
  get(idOrInstance) {
33
- return this.collection.get((0, __1.resolveGuildID)(idOrInstance));
32
+ return this.collection.get((0, __2.resolveGuildID)(idOrInstance));
34
33
  }
35
34
  delete(idOrInstance) {
36
- this.collection.delete((0, __1.resolveGuildID)(idOrInstance));
35
+ this.collection.delete((0, __2.resolveGuildID)(idOrInstance));
37
36
  }
38
37
  has(idOrInstance) {
39
- return this.collection.has((0, __1.resolveGuildID)(idOrInstance));
38
+ return this.collection.has((0, __2.resolveGuildID)(idOrInstance));
40
39
  }
41
40
  }
42
41
  exports.BaseManager = BaseManager;
43
- exports.default = BaseManager;
44
42
  //# sourceMappingURL=BaseManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseManager.js","sourceRoot":"","sources":["../../../src/core/manager/BaseManager.ts"],"names":[],"mappings":";;;;;;AAAA,iEAAyC;AACzC,6BAAuC;AACvC,2CAAwC;AAGxC;;;;GAIG;AACH,MAAsB,WAAe,SAAQ,qBAAW;IAEtD,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf;;;WAGG;QACH,IAAI,CAAC,UAAU,GAAG,IAAI,uBAAU,EAAE,CAAC;IACrC,CAAC;IACD,GAAG,CAAC,EAAU,EAAE,IAAO;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,QAAQ,EAAE;YACZ,OAAO,QAAQ,CAAC;SACjB;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,GAAG,CAAC,YAA+B;QACjC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAA,kBAAc,EAAC,YAAY,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,CAAC,YAA+B;QACpC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAA,kBAAc,EAAC,YAAY,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,GAAG,CAAC,YAA+B;QACjC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAA,kBAAc,EAAC,YAAY,CAAC,CAAC,CAAC;IAC3D,CAAC;CACF;AA3BD,kCA2BC;AAED,kBAAe,WAAW,CAAC","sourcesContent":["import DisTubeBase from \"../DisTubeBase\";\nimport { resolveGuildID } from \"../..\";\nimport { Collection } from \"discord.js\";\nimport type { DisTube, GuildIDResolvable } from \"../..\";\n\n/**\n * Manages the collection of a data model.\n * @abstract\n * @private\n */\nexport abstract class BaseManager<V> extends DisTubeBase {\n collection: Collection<string, V>;\n constructor(distube: DisTube) {\n super(distube);\n /**\n * Collection of of a data model.\n * @type {Discord.Collection}\n */\n this.collection = new Collection();\n }\n add(id: string, data: V) {\n const existing = this.get(id);\n if (existing) {\n return existing;\n }\n this.collection.set(id, data);\n return data;\n }\n get(idOrInstance: GuildIDResolvable): V | undefined {\n return this.collection.get(resolveGuildID(idOrInstance));\n }\n delete(idOrInstance: GuildIDResolvable): void {\n this.collection.delete(resolveGuildID(idOrInstance));\n }\n has(idOrInstance: GuildIDResolvable): boolean {\n return this.collection.has(resolveGuildID(idOrInstance));\n }\n}\n\nexport default BaseManager;\n"]}
1
+ {"version":3,"file":"BaseManager.js","sourceRoot":"","sources":["../../../src/core/manager/BaseManager.ts"],"names":[],"mappings":";;;AAAA,0BAAiC;AACjC,6BAAuC;AACvC,2CAAwC;AAGxC;;;;;GAKG;AACH,MAAsB,WAAe,SAAQ,eAAW;IAAxD;;QACE;;;;WAIG;QACH,eAAU,GAAG,IAAI,uBAAU,EAAa,CAAC;IAkB3C,CAAC;IAjBC,GAAG,CAAC,EAAU,EAAE,IAAO;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,QAAQ,EAAE;YACZ,OAAO,QAAQ,CAAC;SACjB;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,GAAG,CAAC,YAA+B;QACjC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAA,kBAAc,EAAC,YAAY,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,CAAC,YAA+B;QACpC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAA,kBAAc,EAAC,YAAY,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,GAAG,CAAC,YAA+B;QACjC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAA,kBAAc,EAAC,YAAY,CAAC,CAAC,CAAC;IAC3D,CAAC;CACF;AAxBD,kCAwBC","sourcesContent":["import { DisTubeBase } from \"..\";\nimport { resolveGuildID } from \"../..\";\nimport { Collection } from \"discord.js\";\nimport type { GuildIdResolvable } from \"../..\";\n\n/**\n * Manages the collection of a data model.\n * @abstract\n * @private\n * @extends DisTubeBase\n */\nexport abstract class BaseManager<V> extends DisTubeBase {\n /**\n * The collection of items for this manager.\n * @type {Discord.Collection}\n * @abstract\n */\n collection = new Collection<string, V>();\n add(id: string, data: V) {\n const existing = this.get(id);\n if (existing) {\n return existing;\n }\n this.collection.set(id, data);\n return data;\n }\n get(idOrInstance: GuildIdResolvable): V | undefined {\n return this.collection.get(resolveGuildID(idOrInstance));\n }\n delete(idOrInstance: GuildIdResolvable): void {\n this.collection.delete(resolveGuildID(idOrInstance));\n }\n has(idOrInstance: GuildIdResolvable): boolean {\n return this.collection.has(resolveGuildID(idOrInstance));\n }\n}\n"]}
@@ -1,47 +1,27 @@
1
1
  import { BaseManager } from ".";
2
2
  import { Queue } from "../..";
3
3
  import type { Song } from "../..";
4
- import type { StageChannel, TextChannel, VoiceChannel } from "discord.js";
4
+ import type { GuildTextBasedChannel, VoiceBasedChannel } from "discord.js";
5
5
  /**
6
6
  * Queue manager
7
+ * @extends BaseManager
7
8
  */
8
9
  export declare class QueueManager extends BaseManager<Queue> {
10
+ #private;
11
+ /**
12
+ * Collection of {@link Queue}.
13
+ * @name QueueManager#collection
14
+ * @type {Discord.Collection<string, Queue>}
15
+ */
9
16
  /**
10
17
  * Create a {@link Queue}
11
18
  * @private
12
- * @param {Discord.VoiceChannel|Discord.StageChannel} channel A voice channel
19
+ * @param {Discord.BaseGuildVoiceChannel} channel A voice channel
13
20
  * @param {Song|Song[]} song First song
14
- * @param {Discord.TextChannel} textChannel Default text channel
21
+ * @param {Discord.BaseGuildTextChannel} textChannel Default text channel
15
22
  * @returns {Promise<Queue|true>} Returns `true` if encounter an error
16
23
  */
17
- create(channel: VoiceChannel | StageChannel, song: Song[] | Song, textChannel?: TextChannel): Promise<Queue | true>;
18
- /**
19
- * Get a Queue from this QueueManager.
20
- * @method get
21
- * @memberof QueueManager#
22
- * @param {GuildIDResolvable} queue Resolvable thing from a guild
23
- * @returns {Queue?}
24
- */
25
- /**
26
- * Listen to DisTubeVoice events and handle the Queue
27
- * @private
28
- * @param {Queue} queue Queue
29
- */
30
- private _voiceEventHandler;
31
- /**
32
- * Handle the queue when a Song finish
33
- * @private
34
- * @param {Queue} queue queue
35
- * @returns {Promise<void>}
36
- */
37
- private _handleSongFinish;
38
- /**
39
- * Handle error while playing
40
- * @private
41
- * @param {Queue} queue queue
42
- * @param {Error} error error
43
- */
44
- private _handlePlayingError;
24
+ create(channel: VoiceBasedChannel, song: Song[] | Song, textChannel?: GuildTextBasedChannel): Promise<Queue | true>;
45
25
  /**
46
26
  * Play a song on voice connection
47
27
  * @private
@@ -49,12 +29,5 @@ export declare class QueueManager extends BaseManager<Queue> {
49
29
  * @returns {Promise<boolean>} error?
50
30
  */
51
31
  playSong(queue: Queue): Promise<boolean>;
52
- /**
53
- * Whether or not emit playSong event
54
- * @param {Queue} queue Queue
55
- * @private
56
- * @returns {boolean}
57
- */
58
- private _emitPlaySong;
59
32
  }
60
33
  //# sourceMappingURL=QueueManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"QueueManager.d.ts","sourceRoot":"","sources":["../../../src/core/manager/QueueManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC;AAChC,OAAO,EAAgB,KAAK,EAAc,MAAM,OAAO,CAAC;AACxD,OAAO,KAAK,EAAsB,IAAI,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1E;;GAEG;AACH,qBAAa,YAAa,SAAQ,WAAW,CAAC,KAAK,CAAC;IAClD;;;;;;;OAOG;IACG,MAAM,CACV,OAAO,EAAE,YAAY,GAAG,YAAY,EACpC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EACnB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAgBxB;;;;;;OAMG;IACH;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;;;;OAKG;YACW,iBAAiB;IAyC/B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;;;;OAKG;IACG,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IAiC9C;;;;;OAKG;IACH,OAAO,CAAC,aAAa;CAOtB"}
1
+ {"version":3,"file":"QueueManager.d.ts","sourceRoot":"","sources":["../../../src/core/manager/QueueManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC;AAChC,OAAO,EAAgB,KAAK,EAAc,MAAM,OAAO,CAAC;AACxD,OAAO,KAAK,EAAsB,IAAI,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE3E;;;GAGG;AACH,qBAAa,YAAa,SAAQ,WAAW,CAAC,KAAK,CAAC;;IAClD;;;;OAIG;IACH;;;;;;;OAOG;IACG,MAAM,CACV,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EACnB,WAAW,CAAC,EAAE,qBAAqB,GAClC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IA+GxB;;;;;OAKG;IACG,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;CA2C/C"}
@@ -1,18 +1,34 @@
1
1
  "use strict";
2
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
+ };
7
+ var _QueueManager_instances, _QueueManager_voiceEventHandler, _QueueManager_handleSongFinish, _QueueManager_handlePlayingError, _QueueManager_emitPlaySong;
2
8
  Object.defineProperty(exports, "__esModule", { value: true });
3
9
  exports.QueueManager = void 0;
4
10
  const _1 = require(".");
5
11
  const __1 = require("../..");
6
12
  /**
7
13
  * Queue manager
14
+ * @extends BaseManager
8
15
  */
9
16
  class QueueManager extends _1.BaseManager {
17
+ constructor() {
18
+ super(...arguments);
19
+ _QueueManager_instances.add(this);
20
+ }
21
+ /**
22
+ * Collection of {@link Queue}.
23
+ * @name QueueManager#collection
24
+ * @type {Discord.Collection<string, Queue>}
25
+ */
10
26
  /**
11
27
  * Create a {@link Queue}
12
28
  * @private
13
- * @param {Discord.VoiceChannel|Discord.StageChannel} channel A voice channel
29
+ * @param {Discord.BaseGuildVoiceChannel} channel A voice channel
14
30
  * @param {Song|Song[]} song First song
15
- * @param {Discord.TextChannel} textChannel Default text channel
31
+ * @param {Discord.BaseGuildTextChannel} textChannel Default text channel
16
32
  * @returns {Promise<Queue|true>} Returns `true` if encounter an error
17
33
  */
18
34
  async create(channel, song, textChannel) {
@@ -23,7 +39,7 @@ class QueueManager extends _1.BaseManager {
23
39
  await queue.taskQueue.queuing();
24
40
  try {
25
41
  await voice.join();
26
- this._voiceEventHandler(queue);
42
+ __classPrivateFieldGet(this, _QueueManager_instances, "m", _QueueManager_voiceEventHandler).call(this, queue);
27
43
  this.add(queue.id, queue);
28
44
  this.emit("initQueue", queue);
29
45
  const err = await this.playSong(queue);
@@ -33,115 +49,6 @@ class QueueManager extends _1.BaseManager {
33
49
  queue.taskQueue.resolve();
34
50
  }
35
51
  }
36
- /**
37
- * Get a Queue from this QueueManager.
38
- * @method get
39
- * @memberof QueueManager#
40
- * @param {GuildIDResolvable} queue Resolvable thing from a guild
41
- * @returns {Queue?}
42
- */
43
- /**
44
- * Listen to DisTubeVoice events and handle the Queue
45
- * @private
46
- * @param {Queue} queue Queue
47
- */
48
- _voiceEventHandler(queue) {
49
- queue.listeners = {
50
- disconnect: error => {
51
- queue.delete();
52
- this.emit("disconnect", queue);
53
- if (error)
54
- this.emitError(error, queue.textChannel);
55
- },
56
- error: error => this._handlePlayingError(queue, error),
57
- finish: () => this._handleSongFinish(queue),
58
- };
59
- for (const event of Object.keys(queue.listeners)) {
60
- queue.voice.on(event, queue.listeners[event]);
61
- }
62
- }
63
- /**
64
- * Handle the queue when a Song finish
65
- * @private
66
- * @param {Queue} queue queue
67
- * @returns {Promise<void>}
68
- */
69
- async _handleSongFinish(queue) {
70
- this.emit("finishSong", queue, queue.songs[0]);
71
- await queue.taskQueue.queuing();
72
- try {
73
- if (queue.stopped)
74
- return;
75
- if (queue.repeatMode === __1.RepeatMode.QUEUE && !queue.prev)
76
- queue.songs.push(queue.songs[0]);
77
- if (queue.prev) {
78
- if (queue.repeatMode === __1.RepeatMode.QUEUE)
79
- queue.songs.unshift(queue.songs.pop());
80
- else
81
- queue.songs.unshift(queue.previousSongs.pop());
82
- }
83
- if (queue.songs.length <= 1 && (queue.next || queue.repeatMode === __1.RepeatMode.DISABLED)) {
84
- if (queue.autoplay) {
85
- try {
86
- await queue.addRelatedSong();
87
- }
88
- catch {
89
- this.emit("noRelated", queue);
90
- }
91
- }
92
- if (queue.songs.length <= 1) {
93
- if (this.options.leaveOnFinish)
94
- queue.voice.leave();
95
- if (!queue.autoplay)
96
- this.emit("finish", queue);
97
- queue.delete();
98
- return;
99
- }
100
- }
101
- const emitPlaySong = this._emitPlaySong(queue);
102
- if (!queue.prev && (queue.repeatMode !== __1.RepeatMode.SONG || queue.next)) {
103
- const prev = queue.songs.shift();
104
- delete prev.formats;
105
- delete prev.streamURL;
106
- if (this.options.savePreviousSongs)
107
- queue.previousSongs.push(prev);
108
- else
109
- queue.previousSongs.push({ id: prev.id });
110
- }
111
- queue.next = queue.prev = false;
112
- queue.beginTime = 0;
113
- const err = await this.playSong(queue);
114
- if (!err && emitPlaySong)
115
- this.emit("playSong", queue, queue.songs[0]);
116
- }
117
- finally {
118
- queue.taskQueue.resolve();
119
- }
120
- }
121
- /**
122
- * Handle error while playing
123
- * @private
124
- * @param {Queue} queue queue
125
- * @param {Error} error error
126
- */
127
- _handlePlayingError(queue, error) {
128
- const song = queue.songs.shift();
129
- try {
130
- error.name = "PlayingError";
131
- error.message = `${error.message}\nID: ${song.id}\nName: ${song.name}`;
132
- }
133
- catch { }
134
- this.emitError(error, queue.textChannel);
135
- if (queue.songs.length > 0) {
136
- this.playSong(queue).then(e => {
137
- if (!e)
138
- this.emit("playSong", queue, queue.songs[0]);
139
- });
140
- }
141
- else {
142
- queue.stop();
143
- }
144
- }
145
52
  /**
146
53
  * Play a song on voice connection
147
54
  * @private
@@ -165,10 +72,7 @@ class QueueManager extends _1.BaseManager {
165
72
  if (source !== "youtube" && !streamURL) {
166
73
  for (const plugin of [...this.distube.extractorPlugins, ...this.distube.customPlugins]) {
167
74
  if (await plugin.validate(url)) {
168
- const info = [plugin.getStreamURL(url), plugin.getRelatedSongs(url)];
169
- const result = await Promise.all(info);
170
- song.streamURL = result[0];
171
- song.related = result[1];
75
+ song.streamURL = await plugin.getStreamURL(url);
172
76
  break;
173
77
  }
174
78
  }
@@ -183,22 +87,104 @@ class QueueManager extends _1.BaseManager {
183
87
  return false;
184
88
  }
185
89
  catch (e) {
186
- this._handlePlayingError(queue, e);
90
+ __classPrivateFieldGet(this, _QueueManager_instances, "m", _QueueManager_handlePlayingError).call(this, queue, e);
187
91
  return true;
188
92
  }
189
93
  }
190
- /**
191
- * Whether or not emit playSong event
192
- * @param {Queue} queue Queue
193
- * @private
194
- * @returns {boolean}
195
- */
196
- _emitPlaySong(queue) {
197
- var _a, _b;
198
- return (!this.options.emitNewSongOnly ||
199
- (queue.repeatMode === __1.RepeatMode.SONG && queue.next) ||
200
- (queue.repeatMode !== __1.RepeatMode.SONG && ((_a = queue.songs[0]) === null || _a === void 0 ? void 0 : _a.id) !== ((_b = queue.songs[1]) === null || _b === void 0 ? void 0 : _b.id)));
201
- }
202
94
  }
203
95
  exports.QueueManager = QueueManager;
96
+ _QueueManager_instances = new WeakSet(), _QueueManager_voiceEventHandler = function _QueueManager_voiceEventHandler(queue) {
97
+ queue.listeners = {
98
+ disconnect: error => {
99
+ queue.delete();
100
+ this.emit("disconnect", queue);
101
+ if (error)
102
+ this.emitError(error, queue.textChannel);
103
+ },
104
+ error: error => __classPrivateFieldGet(this, _QueueManager_instances, "m", _QueueManager_handlePlayingError).call(this, queue, error),
105
+ finish: () => __classPrivateFieldGet(this, _QueueManager_instances, "m", _QueueManager_handleSongFinish).call(this, queue),
106
+ };
107
+ for (const event of Object.keys(queue.listeners)) {
108
+ queue.voice.on(event, queue.listeners[event]);
109
+ }
110
+ }, _QueueManager_handleSongFinish =
111
+ /**
112
+ * Handle the queue when a Song finish
113
+ * @private
114
+ * @param {Queue} queue queue
115
+ * @returns {Promise<void>}
116
+ */
117
+ async function _QueueManager_handleSongFinish(queue) {
118
+ this.emit("finishSong", queue, queue.songs[0]);
119
+ await queue.taskQueue.queuing();
120
+ try {
121
+ if (queue.stopped)
122
+ return;
123
+ if (queue.repeatMode === __1.RepeatMode.QUEUE && !queue.prev)
124
+ queue.songs.push(queue.songs[0]);
125
+ if (queue.prev) {
126
+ if (queue.repeatMode === __1.RepeatMode.QUEUE)
127
+ queue.songs.unshift(queue.songs.pop());
128
+ else
129
+ queue.songs.unshift(queue.previousSongs.pop());
130
+ }
131
+ if (queue.songs.length <= 1 && (queue.next || queue.repeatMode === __1.RepeatMode.DISABLED)) {
132
+ if (queue.autoplay) {
133
+ try {
134
+ await queue.addRelatedSong();
135
+ }
136
+ catch {
137
+ this.emit("noRelated", queue);
138
+ }
139
+ }
140
+ if (queue.songs.length <= 1) {
141
+ if (this.options.leaveOnFinish)
142
+ queue.voice.leave();
143
+ if (!queue.autoplay)
144
+ this.emit("finish", queue);
145
+ queue.delete();
146
+ return;
147
+ }
148
+ }
149
+ const emitPlaySong = __classPrivateFieldGet(this, _QueueManager_instances, "m", _QueueManager_emitPlaySong).call(this, queue);
150
+ if (!queue.prev && (queue.repeatMode !== __1.RepeatMode.SONG || queue.next)) {
151
+ const prev = queue.songs.shift();
152
+ delete prev.formats;
153
+ delete prev.streamURL;
154
+ if (this.options.savePreviousSongs)
155
+ queue.previousSongs.push(prev);
156
+ else
157
+ queue.previousSongs.push({ id: prev.id });
158
+ }
159
+ queue.next = queue.prev = false;
160
+ queue.beginTime = 0;
161
+ const err = await this.playSong(queue);
162
+ if (!err && emitPlaySong)
163
+ this.emit("playSong", queue, queue.songs[0]);
164
+ }
165
+ finally {
166
+ queue.taskQueue.resolve();
167
+ }
168
+ }, _QueueManager_handlePlayingError = function _QueueManager_handlePlayingError(queue, error) {
169
+ const song = queue.songs.shift();
170
+ try {
171
+ error.name = "PlayingError";
172
+ error.message = `${error.message}\nID: ${song.id}\nName: ${song.name}`;
173
+ }
174
+ catch { }
175
+ this.emitError(error, queue.textChannel);
176
+ if (queue.songs.length > 0) {
177
+ this.playSong(queue).then(e => {
178
+ if (!e)
179
+ this.emit("playSong", queue, queue.songs[0]);
180
+ });
181
+ }
182
+ else {
183
+ queue.stop();
184
+ }
185
+ }, _QueueManager_emitPlaySong = function _QueueManager_emitPlaySong(queue) {
186
+ return (!this.options.emitNewSongOnly ||
187
+ (queue.repeatMode === __1.RepeatMode.SONG && queue.next) ||
188
+ (queue.repeatMode !== __1.RepeatMode.SONG && queue.songs[0]?.id !== queue.songs[1]?.id));
189
+ };
204
190
  //# sourceMappingURL=QueueManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"QueueManager.js","sourceRoot":"","sources":["../../../src/core/manager/QueueManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseManager } from \".\";\nimport { DisTubeError, Queue, RepeatMode } from \"../..\";\nimport type { DisTubeVoiceEvents, Song } from \"../..\";\nimport type { StageChannel, TextChannel, VoiceChannel } from \"discord.js\";\n\n/**\n * Queue manager\n */\nexport class QueueManager extends BaseManager<Queue> {\n /**\n * Create a {@link Queue}\n * @private\n * @param {Discord.VoiceChannel|Discord.StageChannel} channel A voice channel\n * @param {Song|Song[]} song First song\n * @param {Discord.TextChannel} textChannel Default text channel\n * @returns {Promise<Queue|true>} Returns `true` if encounter an error\n */\n async create(\n channel: VoiceChannel | StageChannel,\n song: Song[] | Song,\n textChannel?: TextChannel,\n ): Promise<Queue | true> {\n if (this.has(channel.guild.id)) throw new DisTubeError(\"QUEUE_EXIST\");\n const voice = this.voices.create(channel);\n const queue = new Queue(this.distube, voice, song, textChannel);\n await queue.taskQueue.queuing();\n try {\n await voice.join();\n this._voiceEventHandler(queue);\n this.add(queue.id, queue);\n this.emit(\"initQueue\", queue);\n const err = await this.playSong(queue);\n return err || queue;\n } finally {\n queue.taskQueue.resolve();\n }\n }\n /**\n * Get a Queue from this QueueManager.\n * @method get\n * @memberof QueueManager#\n * @param {GuildIDResolvable} queue Resolvable thing from a guild\n * @returns {Queue?}\n */\n /**\n * Listen to DisTubeVoice events and handle the Queue\n * @private\n * @param {Queue} queue Queue\n */\n private _voiceEventHandler(queue: Queue) {\n queue.listeners = {\n disconnect: error => {\n queue.delete();\n this.emit(\"disconnect\", queue);\n if (error) this.emitError(error, queue.textChannel);\n },\n error: error => this._handlePlayingError(queue, error),\n finish: () => this._handleSongFinish(queue),\n };\n for (const event of Object.keys(queue.listeners) as (keyof DisTubeVoiceEvents)[]) {\n queue.voice.on(event, queue.listeners[event]);\n }\n }\n /**\n * Handle the queue when a Song finish\n * @private\n * @param {Queue} queue queue\n * @returns {Promise<void>}\n */\n private async _handleSongFinish(queue: Queue): Promise<void> {\n this.emit(\"finishSong\", queue, queue.songs[0]);\n await queue.taskQueue.queuing();\n try {\n if (queue.stopped) return;\n if (queue.repeatMode === RepeatMode.QUEUE && !queue.prev) queue.songs.push(queue.songs[0]);\n if (queue.prev) {\n if (queue.repeatMode === RepeatMode.QUEUE) queue.songs.unshift(queue.songs.pop() as Song);\n else queue.songs.unshift(queue.previousSongs.pop() as Song);\n }\n if (queue.songs.length <= 1 && (queue.next || queue.repeatMode === RepeatMode.DISABLED)) {\n if (queue.autoplay) {\n try {\n await queue.addRelatedSong();\n } catch {\n this.emit(\"noRelated\", queue);\n }\n }\n if (queue.songs.length <= 1) {\n if (this.options.leaveOnFinish) queue.voice.leave();\n if (!queue.autoplay) this.emit(\"finish\", queue);\n queue.delete();\n return;\n }\n }\n const emitPlaySong = this._emitPlaySong(queue);\n if (!queue.prev && (queue.repeatMode !== RepeatMode.SONG || queue.next)) {\n const prev = queue.songs.shift() as Song;\n delete prev.formats;\n delete prev.streamURL;\n if (this.options.savePreviousSongs) queue.previousSongs.push(prev);\n else queue.previousSongs.push({ id: prev.id } as Song);\n }\n queue.next = queue.prev = false;\n queue.beginTime = 0;\n const err = await this.playSong(queue);\n if (!err && emitPlaySong) this.emit(\"playSong\", queue, queue.songs[0]);\n } finally {\n queue.taskQueue.resolve();\n }\n }\n /**\n * Handle error while playing\n * @private\n * @param {Queue} queue queue\n * @param {Error} error error\n */\n private _handlePlayingError(queue: Queue, error: Error) {\n const song = queue.songs.shift() as Song;\n try {\n error.name = \"PlayingError\";\n error.message = `${error.message}\\nID: ${song.id}\\nName: ${song.name}`;\n } catch {}\n this.emitError(error, queue.textChannel);\n if (queue.songs.length > 0) {\n this.playSong(queue).then(e => {\n if (!e) this.emit(\"playSong\", queue, queue.songs[0]);\n });\n } else {\n queue.stop();\n }\n }\n\n /**\n * Play a song on voice connection\n * @private\n * @param {Queue} queue The guild queue\n * @returns {Promise<boolean>} error?\n */\n async playSong(queue: Queue): Promise<boolean> {\n if (!queue) return true;\n if (!queue.songs.length) {\n queue.stop();\n return true;\n }\n if (queue.stopped) return false;\n const song = queue.songs[0];\n try {\n const { url, source, formats, streamURL } = song;\n if (source === \"youtube\" && !formats) song._patchYouTube(await this.handler.getYouTubeInfo(url));\n if (source !== \"youtube\" && !streamURL) {\n for (const plugin of [...this.distube.extractorPlugins, ...this.distube.customPlugins]) {\n if (await plugin.validate(url)) {\n const info = [plugin.getStreamURL(url), plugin.getRelatedSongs(url)] as const;\n const result = await Promise.all(info);\n song.streamURL = result[0];\n song.related = result[1];\n break;\n }\n }\n }\n const stream = this.handler.createStream(queue);\n queue.voice.play(stream);\n song.streamURL = stream.url;\n if (queue.stopped) queue.stop();\n else if (queue.paused) queue.voice.pause();\n return false;\n } catch (e: any) {\n this._handlePlayingError(queue, e);\n return true;\n }\n }\n /**\n * Whether or not emit playSong event\n * @param {Queue} queue Queue\n * @private\n * @returns {boolean}\n */\n private _emitPlaySong(queue: Queue): boolean {\n return (\n !this.options.emitNewSongOnly ||\n (queue.repeatMode === RepeatMode.SONG && queue.next) ||\n (queue.repeatMode !== RepeatMode.SONG && queue.songs[0]?.id !== queue.songs[1]?.id)\n );\n }\n}\n"]}
1
+ {"version":3,"file":"QueueManager.js","sourceRoot":"","sources":["../../../src/core/manager/QueueManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseManager } from \".\";\nimport { DisTubeError, Queue, RepeatMode } from \"../..\";\nimport type { DisTubeVoiceEvents, Song } from \"../..\";\nimport type { GuildTextBasedChannel, VoiceBasedChannel } from \"discord.js\";\n\n/**\n * Queue manager\n * @extends BaseManager\n */\nexport class QueueManager extends BaseManager<Queue> {\n /**\n * Collection of {@link Queue}.\n * @name QueueManager#collection\n * @type {Discord.Collection<string, Queue>}\n */\n /**\n * Create a {@link Queue}\n * @private\n * @param {Discord.BaseGuildVoiceChannel} channel A voice channel\n * @param {Song|Song[]} song First song\n * @param {Discord.BaseGuildTextChannel} textChannel Default text channel\n * @returns {Promise<Queue|true>} Returns `true` if encounter an error\n */\n async create(\n channel: VoiceBasedChannel,\n song: Song[] | Song,\n textChannel?: GuildTextBasedChannel,\n ): Promise<Queue | true> {\n if (this.has(channel.guild.id)) throw new DisTubeError(\"QUEUE_EXIST\");\n const voice = this.voices.create(channel);\n const queue = new Queue(this.distube, voice, song, textChannel);\n await queue.taskQueue.queuing();\n try {\n await voice.join();\n this.#voiceEventHandler(queue);\n this.add(queue.id, queue);\n this.emit(\"initQueue\", queue);\n const err = await this.playSong(queue);\n return err || queue;\n } finally {\n queue.taskQueue.resolve();\n }\n }\n /**\n * Get a Queue from this QueueManager.\n * @method get\n * @memberof QueueManager#\n * @param {GuildIdResolvable} queue Resolvable thing from a guild\n * @returns {Queue?}\n */\n /**\n * Listen to DisTubeVoice events and handle the Queue\n * @private\n * @param {Queue} queue Queue\n */\n #voiceEventHandler(queue: Queue) {\n queue.listeners = {\n disconnect: error => {\n queue.delete();\n this.emit(\"disconnect\", queue);\n if (error) this.emitError(error, queue.textChannel);\n },\n error: error => this.#handlePlayingError(queue, error),\n finish: () => this.#handleSongFinish(queue),\n };\n for (const event of Object.keys(queue.listeners) as (keyof DisTubeVoiceEvents)[]) {\n queue.voice.on(event, queue.listeners[event]);\n }\n }\n /**\n * Handle the queue when a Song finish\n * @private\n * @param {Queue} queue queue\n * @returns {Promise<void>}\n */\n async #handleSongFinish(queue: Queue): Promise<void> {\n this.emit(\"finishSong\", queue, queue.songs[0]);\n await queue.taskQueue.queuing();\n try {\n if (queue.stopped) return;\n if (queue.repeatMode === RepeatMode.QUEUE && !queue.prev) queue.songs.push(queue.songs[0]);\n if (queue.prev) {\n if (queue.repeatMode === RepeatMode.QUEUE) queue.songs.unshift(queue.songs.pop() as Song);\n else queue.songs.unshift(queue.previousSongs.pop() as Song);\n }\n if (queue.songs.length <= 1 && (queue.next || queue.repeatMode === RepeatMode.DISABLED)) {\n if (queue.autoplay) {\n try {\n await queue.addRelatedSong();\n } catch {\n this.emit(\"noRelated\", queue);\n }\n }\n if (queue.songs.length <= 1) {\n if (this.options.leaveOnFinish) queue.voice.leave();\n if (!queue.autoplay) this.emit(\"finish\", queue);\n queue.delete();\n return;\n }\n }\n const emitPlaySong = this.#emitPlaySong(queue);\n if (!queue.prev && (queue.repeatMode !== RepeatMode.SONG || queue.next)) {\n const prev = queue.songs.shift() as Song;\n delete prev.formats;\n delete prev.streamURL;\n if (this.options.savePreviousSongs) queue.previousSongs.push(prev);\n else queue.previousSongs.push({ id: prev.id } as Song);\n }\n queue.next = queue.prev = false;\n queue.beginTime = 0;\n const err = await this.playSong(queue);\n if (!err && emitPlaySong) this.emit(\"playSong\", queue, queue.songs[0]);\n } finally {\n queue.taskQueue.resolve();\n }\n }\n /**\n * Handle error while playing\n * @private\n * @param {Queue} queue queue\n * @param {Error} error error\n */\n #handlePlayingError(queue: Queue, error: Error) {\n const song = queue.songs.shift() as Song;\n try {\n error.name = \"PlayingError\";\n error.message = `${error.message}\\nID: ${song.id}\\nName: ${song.name}`;\n } catch {}\n this.emitError(error, queue.textChannel);\n if (queue.songs.length > 0) {\n this.playSong(queue).then(e => {\n if (!e) this.emit(\"playSong\", queue, queue.songs[0]);\n });\n } else {\n queue.stop();\n }\n }\n\n /**\n * Play a song on voice connection\n * @private\n * @param {Queue} queue The guild queue\n * @returns {Promise<boolean>} error?\n */\n async playSong(queue: Queue): Promise<boolean> {\n if (!queue) return true;\n if (!queue.songs.length) {\n queue.stop();\n return true;\n }\n if (queue.stopped) return false;\n const song = queue.songs[0];\n try {\n const { url, source, formats, streamURL } = song;\n if (source === \"youtube\" && !formats) song._patchYouTube(await this.handler.getYouTubeInfo(url));\n if (source !== \"youtube\" && !streamURL) {\n for (const plugin of [...this.distube.extractorPlugins, ...this.distube.customPlugins]) {\n if (await plugin.validate(url)) {\n song.streamURL = await plugin.getStreamURL(url);\n break;\n }\n }\n }\n const stream = this.handler.createStream(queue);\n queue.voice.play(stream);\n song.streamURL = stream.url;\n if (queue.stopped) queue.stop();\n else if (queue.paused) queue.voice.pause();\n return false;\n } catch (e: any) {\n this.#handlePlayingError(queue, e);\n return true;\n }\n }\n /**\n * Whether or not emit playSong event\n * @param {Queue} queue Queue\n * @private\n * @returns {boolean}\n */\n #emitPlaySong(queue: Queue): boolean {\n return (\n !this.options.emitNewSongOnly ||\n (queue.repeatMode === RepeatMode.SONG && queue.next) ||\n (queue.repeatMode !== RepeatMode.SONG && queue.songs[0]?.id !== queue.songs[1]?.id)\n );\n }\n}\n"]}
@@ -9,21 +9,18 @@ function trackClient(client) {
9
9
  return;
10
10
  trackedClients.add(client);
11
11
  client.ws.on(discord_js_1.Constants.WSEvents.VOICE_SERVER_UPDATE, (payload) => {
12
- var _a;
13
- (_a = adapters.get(payload.guild_id)) === null || _a === void 0 ? void 0 : _a.onVoiceServerUpdate(payload);
12
+ adapters.get(payload.guild_id)?.onVoiceServerUpdate(payload);
14
13
  });
15
14
  client.ws.on(discord_js_1.Constants.WSEvents.VOICE_STATE_UPDATE, (payload) => {
16
- var _a, _b;
17
- if (payload.guild_id && payload.session_id && payload.user_id === ((_a = client.user) === null || _a === void 0 ? void 0 : _a.id)) {
18
- (_b = adapters.get(payload.guild_id)) === null || _b === void 0 ? void 0 : _b.onVoiceStateUpdate(payload);
15
+ if (payload.guild_id && payload.session_id && payload.user_id === client.user?.id) {
16
+ adapters.get(payload.guild_id)?.onVoiceStateUpdate(payload);
19
17
  }
20
18
  });
21
19
  client.on(discord_js_1.Constants.Events.SHARD_DISCONNECT, (_, shardID) => {
22
- var _a;
23
20
  const guilds = trackedShards.get(shardID);
24
21
  if (guilds) {
25
22
  for (const guildID of guilds.values()) {
26
- (_a = adapters.get(guildID)) === null || _a === void 0 ? void 0 : _a.destroy();
23
+ adapters.get(guildID)?.destroy();
27
24
  }
28
25
  }
29
26
  trackedShards.delete(shardID);