distube 4.0.0-dev.0 → 4.0.0-dev.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.
Files changed (121) hide show
  1. package/README.md +1 -1
  2. package/dist/index.d.ts +593 -8
  3. package/dist/index.js +2360 -22
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +2300 -0
  6. package/dist/index.mjs.map +1 -0
  7. package/package.json +79 -43
  8. package/dist/DisTube.d.ts +0 -521
  9. package/dist/DisTube.d.ts.map +0 -1
  10. package/dist/DisTube.js +0 -793
  11. package/dist/DisTube.js.map +0 -1
  12. package/dist/constant.d.ts +0 -124
  13. package/dist/constant.d.ts.map +0 -1
  14. package/dist/constant.js +0 -144
  15. package/dist/constant.js.map +0 -1
  16. package/dist/core/DisTubeBase.d.ts +0 -54
  17. package/dist/core/DisTubeBase.d.ts.map +0 -1
  18. package/dist/core/DisTubeBase.js +0 -75
  19. package/dist/core/DisTubeBase.js.map +0 -1
  20. package/dist/core/DisTubeHandler.d.ts +0 -93
  21. package/dist/core/DisTubeHandler.d.ts.map +0 -1
  22. package/dist/core/DisTubeHandler.js +0 -292
  23. package/dist/core/DisTubeHandler.js.map +0 -1
  24. package/dist/core/DisTubeOptions.d.ts +0 -23
  25. package/dist/core/DisTubeOptions.d.ts.map +0 -1
  26. package/dist/core/DisTubeOptions.js +0 -90
  27. package/dist/core/DisTubeOptions.js.map +0 -1
  28. package/dist/core/DisTubeStream.d.ts +0 -52
  29. package/dist/core/DisTubeStream.d.ts.map +0 -1
  30. package/dist/core/DisTubeStream.js +0 -108
  31. package/dist/core/DisTubeStream.js.map +0 -1
  32. package/dist/core/index.d.ts +0 -7
  33. package/dist/core/index.d.ts.map +0 -1
  34. package/dist/core/index.js +0 -19
  35. package/dist/core/index.js.map +0 -1
  36. package/dist/core/manager/BaseManager.d.ts +0 -22
  37. package/dist/core/manager/BaseManager.d.ts.map +0 -1
  38. package/dist/core/manager/BaseManager.js +0 -42
  39. package/dist/core/manager/BaseManager.js.map +0 -1
  40. package/dist/core/manager/QueueManager.d.ts +0 -33
  41. package/dist/core/manager/QueueManager.d.ts.map +0 -1
  42. package/dist/core/manager/QueueManager.js +0 -193
  43. package/dist/core/manager/QueueManager.js.map +0 -1
  44. package/dist/core/manager/index.d.ts +0 -3
  45. package/dist/core/manager/index.d.ts.map +0 -1
  46. package/dist/core/manager/index.js +0 -15
  47. package/dist/core/manager/index.js.map +0 -1
  48. package/dist/core/voice/DisTubeVoice.d.ts +0 -82
  49. package/dist/core/voice/DisTubeVoice.d.ts.map +0 -1
  50. package/dist/core/voice/DisTubeVoice.js +0 -250
  51. package/dist/core/voice/DisTubeVoice.js.map +0 -1
  52. package/dist/core/voice/DisTubeVoiceManager.d.ts +0 -41
  53. package/dist/core/voice/DisTubeVoiceManager.d.ts.map +0 -1
  54. package/dist/core/voice/DisTubeVoiceManager.js +0 -67
  55. package/dist/core/voice/DisTubeVoiceManager.js.map +0 -1
  56. package/dist/core/voice/index.d.ts +0 -3
  57. package/dist/core/voice/index.d.ts.map +0 -1
  58. package/dist/core/voice/index.js +0 -15
  59. package/dist/core/voice/index.js.map +0 -1
  60. package/dist/index.d.ts.map +0 -1
  61. package/dist/plugin/http.d.ts +0 -10
  62. package/dist/plugin/http.d.ts.map +0 -1
  63. package/dist/plugin/http.js +0 -18
  64. package/dist/plugin/http.js.map +0 -1
  65. package/dist/plugin/https.d.ts +0 -19
  66. package/dist/plugin/https.d.ts.map +0 -1
  67. package/dist/plugin/https.js +0 -47
  68. package/dist/plugin/https.js.map +0 -1
  69. package/dist/plugin/index.d.ts +0 -3
  70. package/dist/plugin/index.d.ts.map +0 -1
  71. package/dist/plugin/index.js +0 -15
  72. package/dist/plugin/index.js.map +0 -1
  73. package/dist/struct/CustomPlugin.d.ts +0 -51
  74. package/dist/struct/CustomPlugin.d.ts.map +0 -1
  75. package/dist/struct/CustomPlugin.js +0 -50
  76. package/dist/struct/CustomPlugin.js.map +0 -1
  77. package/dist/struct/DisTubeError.d.ts +0 -55
  78. package/dist/struct/DisTubeError.d.ts.map +0 -1
  79. package/dist/struct/DisTubeError.js +0 -64
  80. package/dist/struct/DisTubeError.js.map +0 -1
  81. package/dist/struct/ExtractorPlugin.d.ts +0 -45
  82. package/dist/struct/ExtractorPlugin.d.ts.map +0 -1
  83. package/dist/struct/ExtractorPlugin.js +0 -39
  84. package/dist/struct/ExtractorPlugin.js.map +0 -1
  85. package/dist/struct/Playlist.d.ts +0 -54
  86. package/dist/struct/Playlist.d.ts.map +0 -1
  87. package/dist/struct/Playlist.js +0 -131
  88. package/dist/struct/Playlist.js.map +0 -1
  89. package/dist/struct/Plugin.d.ts +0 -75
  90. package/dist/struct/Plugin.d.ts.map +0 -1
  91. package/dist/struct/Plugin.js +0 -99
  92. package/dist/struct/Plugin.js.map +0 -1
  93. package/dist/struct/Queue.d.ts +0 -216
  94. package/dist/struct/Queue.d.ts.map +0 -1
  95. package/dist/struct/Queue.js +0 -479
  96. package/dist/struct/Queue.js.map +0 -1
  97. package/dist/struct/SearchResult.d.ts +0 -27
  98. package/dist/struct/SearchResult.d.ts.map +0 -1
  99. package/dist/struct/SearchResult.js +0 -77
  100. package/dist/struct/SearchResult.js.map +0 -1
  101. package/dist/struct/Song.d.ts +0 -78
  102. package/dist/struct/Song.d.ts.map +0 -1
  103. package/dist/struct/Song.js +0 -259
  104. package/dist/struct/Song.js.map +0 -1
  105. package/dist/struct/TaskQueue.d.ts +0 -28
  106. package/dist/struct/TaskQueue.d.ts.map +0 -1
  107. package/dist/struct/TaskQueue.js +0 -64
  108. package/dist/struct/TaskQueue.js.map +0 -1
  109. package/dist/struct/index.d.ts +0 -10
  110. package/dist/struct/index.d.ts.map +0 -1
  111. package/dist/struct/index.js +0 -22
  112. package/dist/struct/index.js.map +0 -1
  113. package/dist/tsconfig.tsbuildinfo +0 -1
  114. package/dist/type.d.ts +0 -169
  115. package/dist/type.d.ts.map +0 -1
  116. package/dist/type.js +0 -3
  117. package/dist/type.js.map +0 -1
  118. package/dist/util.d.ts +0 -51
  119. package/dist/util.d.ts.map +0 -1
  120. package/dist/util.js +0 -225
  121. package/dist/util.js.map +0 -1
@@ -1,50 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CustomPlugin = void 0;
4
- /* eslint-disable @typescript-eslint/no-unused-vars */
5
- const _1 = require(".");
6
- const __1 = require("..");
7
- /**
8
- * Custom Plugin
9
- * @extends Plugin
10
- * @abstract
11
- */
12
- class CustomPlugin extends _1.Plugin {
13
- constructor() {
14
- super(...arguments);
15
- this.type = __1.PluginType.CUSTOM;
16
- }
17
- /**
18
- * Check if the {@link DisTube#play} `song` parameter is working with this plugin
19
- * @param {string} song String need to validate
20
- * @returns {boolean|Promise<boolean>}
21
- */
22
- validate(song) {
23
- return false;
24
- }
25
- }
26
- exports.CustomPlugin = CustomPlugin;
27
- /**
28
- * @typedef {Object} CustomPluginPlayOptions
29
- * @param {Discord.GuildMember} [member] Requested user
30
- * @param {Discord.BaseGuildTextChannel} [textChannel] Default {@link Queue#textChannel}
31
- * @param {boolean} [skip=false]
32
- * Skip the playing song (if exists) and play the added song/playlist if `position` is 1.
33
- * If `position` is defined and not equal to 1, it will skip to the next song instead of the added song
34
- * @param {number} [position=0] Position of the song/playlist to add to the queue,
35
- * <= 0 to add to the end of the queue.
36
- * @param {boolean} [unshift=false] (DEPRECATED) Add the song/playlist to the beginning of the queue
37
- * (after the playing song if exists)
38
- * @param {*} [metadata] Optional metadata that can be attached to the song/playlist will be played.
39
- */
40
- /**
41
- * This method will be executed if the url is validated.
42
- * @param {Discord.BaseGuildVoiceChannel} voiceChannel The voice channel will be joined
43
- * @param {string} song Validated `song`
44
- * @param {CustomPluginPlayOptions} [options] Optional options
45
- * @returns {Promise<void>}
46
- * @abstract
47
- * @method play
48
- * @memberof CustomPlugin#
49
- */
50
- //# sourceMappingURL=CustomPlugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CustomPlugin.js","sourceRoot":"","sources":["../../src/struct/CustomPlugin.ts"],"names":[],"mappings":";;;AAAA,sDAAsD;AACtD,wBAA2B;AAC3B,0BAAgC;AAIhC;;;;GAIG;AACH,MAAsB,YAAa,SAAQ,SAAM;IAAjD;;QACE,SAAI,GAAG,cAAU,CAAC,MAAM,CAAC;IAkB3B,CAAC;IARC;;;;OAIG;IACH,QAAQ,CAAC,IAAY;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAnBD,oCAmBC;AAED;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;GASG","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { Plugin } from \".\";\nimport { PluginType } from \"..\";\nimport type { VoiceBasedChannel } from \"discord.js\";\nimport type { Awaitable, CustomPluginPlayOptions, Playlist, SearchResult, Song } from \"..\";\n\n/**\n * Custom Plugin\n * @extends Plugin\n * @abstract\n */\nexport abstract class CustomPlugin extends Plugin {\n type = PluginType.CUSTOM;\n /**\n * This method will be executed if the `song` string is validated.\n * @param {Discord.BaseGuildVoiceChannel} voiceChannel The voice channel will be joined\n * @param {string} song Validated `song`\n * @param {CustomPluginPlayOptions} [options] Optional options\n * @returns {Promise<void>}\n * @abstract\n */\n abstract play(voiceChannel: VoiceBasedChannel, song: string, options: CustomPluginPlayOptions): Awaitable<void>;\n /**\n * Check if the {@link DisTube#play} `song` parameter is working with this plugin\n * @param {string} song String need to validate\n * @returns {boolean|Promise<boolean>}\n */\n validate(song: string): Awaitable<boolean> {\n return false;\n }\n}\n\n/**\n * @typedef {Object} CustomPluginPlayOptions\n * @param {Discord.GuildMember} [member] Requested user\n * @param {Discord.BaseGuildTextChannel} [textChannel] Default {@link Queue#textChannel}\n * @param {boolean} [skip=false]\n * Skip the playing song (if exists) and play the added song/playlist if `position` is 1.\n * If `position` is defined and not equal to 1, it will skip to the next song instead of the added song\n * @param {number} [position=0] Position of the song/playlist to add to the queue,\n * <= 0 to add to the end of the queue.\n * @param {boolean} [unshift=false] (DEPRECATED) Add the song/playlist to the beginning of the queue\n * (after the playing song if exists)\n * @param {*} [metadata] Optional metadata that can be attached to the song/playlist will be played.\n */\n\n/**\n * This method will be executed if the url is validated.\n * @param {Discord.BaseGuildVoiceChannel} voiceChannel The voice channel will be joined\n * @param {string} song Validated `song`\n * @param {CustomPluginPlayOptions} [options] Optional options\n * @returns {Promise<void>}\n * @abstract\n * @method play\n * @memberof CustomPlugin#\n */\n"]}
@@ -1,55 +0,0 @@
1
- declare const ERROR_MESSAGES: {
2
- INVALID_TYPE: (expected: (number | string) | readonly (number | string)[], got: any, name?: string | undefined) => string;
3
- NUMBER_COMPARE: (name: string, expected: string, value: number) => string;
4
- EMPTY_ARRAY: (name: string) => string;
5
- EMPTY_FILTERED_ARRAY: (name: string, type: string) => string;
6
- EMPTY_STRING: (name: string) => string;
7
- INVALID_KEY: (obj: string, key: string) => string;
8
- MISSING_KEY: (obj: string, key: string) => string;
9
- MISSING_KEYS: (obj: string, key: string[], all: boolean) => string;
10
- MISSING_INTENTS: (i: string) => string;
11
- DISABLED_OPTION: (o: string) => string;
12
- ENABLED_OPTION: (o: string) => string;
13
- NOT_IN_VOICE: string;
14
- VOICE_FULL: string;
15
- VOICE_CONNECT_FAILED: (s: number) => string;
16
- VOICE_MISSING_PERMS: string;
17
- VOICE_RECONNECT_FAILED: string;
18
- VOICE_CHANGE_GUILD: string;
19
- NO_QUEUE: string;
20
- QUEUE_EXIST: string;
21
- PAUSED: string;
22
- RESUMED: string;
23
- NO_PREVIOUS: string;
24
- NO_UP_NEXT: string;
25
- NO_SONG_POSITION: string;
26
- NO_PLAYING: string;
27
- NO_RESULT: string;
28
- NO_RELATED: string;
29
- CANNOT_PLAY_RELATED: string;
30
- UNAVAILABLE_VIDEO: string;
31
- UNPLAYABLE_FORMATS: string;
32
- NON_NSFW: string;
33
- NOT_SUPPORTED_URL: string;
34
- CANNOT_RESOLVE_SONG: (t: any) => string;
35
- NO_VALID_SONG: string;
36
- EMPTY_FILTERED_PLAYLIST: string;
37
- EMPTY_PLAYLIST: string;
38
- };
39
- declare type ErrorMessages = typeof ERROR_MESSAGES;
40
- declare type ErrorCodes = keyof ErrorMessages;
41
- declare type ErrorCode = {
42
- [K in ErrorCodes]-?: ErrorMessages[K] extends string ? K : never;
43
- }[ErrorCodes];
44
- declare type ErrorCodeTemplate = Exclude<keyof typeof ERROR_MESSAGES, ErrorCode>;
45
- export declare class DisTubeError<T extends string> extends Error {
46
- errorCode: string;
47
- constructor(code: ErrorCode);
48
- constructor(code: T extends ErrorCodeTemplate ? T : never, ...args: Parameters<ErrorMessages[typeof code]>);
49
- constructor(code: ErrorCodeTemplate, _: never);
50
- constructor(code: T extends ErrorCodes ? "This is built-in error code" : T, message: string);
51
- get name(): string;
52
- get code(): string;
53
- }
54
- export {};
55
- //# sourceMappingURL=DisTubeError.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DisTubeError.d.ts","sourceRoot":"","sources":["../../src/struct/DisTubeError.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,cAAc;6BACO,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,OAAO,GAAG;2BAI5D,MAAM,YAAY,MAAM,SAAS,MAAM;wBAC1C,MAAM;iCACG,MAAM,QAAQ,MAAM;yBAC5B,MAAM;uBACR,MAAM,OAAO,MAAM;uBACnB,MAAM,OAAO,MAAM;wBAClB,MAAM,OAAO,MAAM,EAAE,OAAO,OAAO;yBAGlC,MAAM;yBACN,MAAM;wBACP,MAAM;;;8BAIA,MAAM;;;;;;;;;;;;;;;;;;;6BAqBP,GAAG;;;;CAM7B,CAAC;AAEF,aAAK,aAAa,GAAG,OAAO,cAAc,CAAC;AAC3C,aAAK,UAAU,GAAG,MAAM,aAAa,CAAC;AACtC,aAAK,SAAS,GAAG;KAAG,CAAC,IAAI,UAAU,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,CAAC,GAAG,KAAK;CAAE,CAAC,UAAU,CAAC,CAAC;AAClG,aAAK,iBAAiB,GAAG,OAAO,CAAC,MAAM,OAAO,cAAc,EAAE,SAAS,CAAC,CAAC;AAMzE,qBAAa,YAAY,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,KAAK;IACvD,SAAS,EAAE,MAAM,CAAC;gBACN,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,CAAC,SAAS,iBAAiB,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,CAAC;gBAC9F,IAAI,EAAE,iBAAiB,EAAE,CAAC,EAAE,KAAK;gBACjC,IAAI,EAAE,CAAC,SAAS,UAAU,GAAG,6BAA6B,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM;IAS3F,IAAI,IAAI,WAEP;IAED,IAAI,IAAI,WAEP;CACF"}
@@ -1,64 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DisTubeError = void 0;
4
- const node_util_1 = require("node:util");
5
- const ERROR_MESSAGES = {
6
- INVALID_TYPE: (expected, got, name) => `Expected ${Array.isArray(expected) ? expected.map(e => (typeof e === "number" ? e : `'${e}'`)).join(" or ") : `'${expected}'`}${name ? ` for '${name}'` : ""}, but got ${(0, node_util_1.inspect)(got)}`,
7
- NUMBER_COMPARE: (name, expected, value) => `'${name}' must be ${expected} ${value}`,
8
- EMPTY_ARRAY: (name) => `'${name}' is an empty array`,
9
- EMPTY_FILTERED_ARRAY: (name, type) => `There is no valid '${type}' in the '${name}' array`,
10
- EMPTY_STRING: (name) => `'${name}' string must not be empty`,
11
- INVALID_KEY: (obj, key) => `'${key}' does not need to be provided in ${obj}`,
12
- MISSING_KEY: (obj, key) => `'${key}' needs to be provided in ${obj}`,
13
- MISSING_KEYS: (obj, key, all) => `${key.map(k => `'${k}'`).join(all ? " and " : " or ")} need to be provided in ${obj}`,
14
- MISSING_INTENTS: (i) => `${i} intent must be provided for the Client`,
15
- DISABLED_OPTION: (o) => `DisTubeOptions.${o} is disabled`,
16
- ENABLED_OPTION: (o) => `DisTubeOptions.${o} is enabled`,
17
- NOT_IN_VOICE: "User is not in any voice channel",
18
- VOICE_FULL: "The voice channel is full",
19
- VOICE_CONNECT_FAILED: (s) => `Cannot connect to the voice channel after ${s} seconds`,
20
- VOICE_MISSING_PERMS: "You do not have permission to join this voice channel",
21
- VOICE_RECONNECT_FAILED: "Cannot reconnect to the voice channel",
22
- VOICE_CHANGE_GUILD: "Cannot join a channel in a different guild",
23
- NO_QUEUE: "There is no playing queue in this guild",
24
- QUEUE_EXIST: "This guild has a Queue already",
25
- PAUSED: "The queue has been paused already",
26
- RESUMED: "The queue has been playing already",
27
- NO_PREVIOUS: "There is no previous song in this queue",
28
- NO_UP_NEXT: "There is no up next song",
29
- NO_SONG_POSITION: "Does not have any song at this position",
30
- NO_PLAYING: "There is no playing song in the queue",
31
- NO_RESULT: "No result found",
32
- NO_RELATED: "Cannot find any related songs",
33
- CANNOT_PLAY_RELATED: "Cannot play the related song",
34
- UNAVAILABLE_VIDEO: "This video is unavailable",
35
- UNPLAYABLE_FORMATS: "No playable format found",
36
- NON_NSFW: "Cannot play age-restricted content in non-NSFW channel",
37
- NOT_SUPPORTED_URL: "This url is not supported",
38
- CANNOT_RESOLVE_SONG: (t) => `Cannot resolve ${(0, node_util_1.inspect)(t)} to a Song`,
39
- NO_VALID_SONG: "'songs' array does not have any valid Song, SearchResult or url",
40
- EMPTY_FILTERED_PLAYLIST: "There is no valid video in the playlist\n" +
41
- "Maybe age-restricted contents is filtered because you are in non-NSFW channel",
42
- EMPTY_PLAYLIST: "There is no valid video in the playlist",
43
- };
44
- const errMsg = (msg, ...args) => (typeof msg === "string" ? msg : msg(...args));
45
- const haveCode = (code) => Object.keys(ERROR_MESSAGES).includes(code);
46
- class DisTubeError extends Error {
47
- constructor(code, ...args) {
48
- if (haveCode(code))
49
- super(errMsg(ERROR_MESSAGES[code], ...args));
50
- else
51
- super(...args);
52
- this.errorCode = code;
53
- if (Error.captureStackTrace)
54
- Error.captureStackTrace(this, DisTubeError);
55
- }
56
- get name() {
57
- return `DisTubeError [${this.errorCode}]`;
58
- }
59
- get code() {
60
- return this.errorCode;
61
- }
62
- }
63
- exports.DisTubeError = DisTubeError;
64
- //# sourceMappingURL=DisTubeError.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DisTubeError.js","sourceRoot":"","sources":["../../src/struct/DisTubeError.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AAEpC,MAAM,cAAc,GAAG;IACrB,YAAY,EAAE,CAAC,QAA0D,EAAE,GAAQ,EAAE,IAAa,EAAE,EAAE,CACpG,YACE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,GACjH,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,IAAA,mBAAO,EAAC,GAAG,CAAC,EAAE;IAC5D,cAAc,EAAE,CAAC,IAAY,EAAE,QAAgB,EAAE,KAAa,EAAE,EAAE,CAAC,IAAI,IAAI,aAAa,QAAQ,IAAI,KAAK,EAAE;IAC3G,WAAW,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,IAAI,qBAAqB;IAC5D,oBAAoB,EAAE,CAAC,IAAY,EAAE,IAAY,EAAE,EAAE,CAAC,sBAAsB,IAAI,aAAa,IAAI,SAAS;IAC1G,YAAY,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,IAAI,4BAA4B;IACpE,WAAW,EAAE,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CAAC,IAAI,GAAG,qCAAqC,GAAG,EAAE;IAC5F,WAAW,EAAE,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CAAC,IAAI,GAAG,6BAA6B,GAAG,EAAE;IACpF,YAAY,EAAE,CAAC,GAAW,EAAE,GAAa,EAAE,GAAY,EAAE,EAAE,CACzD,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,2BAA2B,GAAG,EAAE;IAExF,eAAe,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,yCAAyC;IAC7E,eAAe,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,kBAAkB,CAAC,cAAc;IACjE,cAAc,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,kBAAkB,CAAC,aAAa;IAE/D,YAAY,EAAE,kCAAkC;IAChD,UAAU,EAAE,2BAA2B;IACvC,oBAAoB,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,6CAA6C,CAAC,UAAU;IAC7F,mBAAmB,EAAE,uDAAuD;IAC5E,sBAAsB,EAAE,uCAAuC;IAC/D,kBAAkB,EAAE,4CAA4C;IAEhE,QAAQ,EAAE,yCAAyC;IACnD,WAAW,EAAE,gCAAgC;IAC7C,MAAM,EAAE,mCAAmC;IAC3C,OAAO,EAAE,oCAAoC;IAC7C,WAAW,EAAE,yCAAyC;IACtD,UAAU,EAAE,0BAA0B;IACtC,gBAAgB,EAAE,yCAAyC;IAC3D,UAAU,EAAE,uCAAuC;IAEnD,SAAS,EAAE,iBAAiB;IAC5B,UAAU,EAAE,+BAA+B;IAC3C,mBAAmB,EAAE,8BAA8B;IACnD,iBAAiB,EAAE,2BAA2B;IAC9C,kBAAkB,EAAE,0BAA0B;IAC9C,QAAQ,EAAE,wDAAwD;IAClE,iBAAiB,EAAE,2BAA2B;IAC9C,mBAAmB,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,kBAAkB,IAAA,mBAAO,EAAC,CAAC,CAAC,YAAY;IACzE,aAAa,EAAE,iEAAiE;IAChF,uBAAuB,EACrB,2CAA2C;QAC3C,+EAA+E;IACjF,cAAc,EAAE,yCAAyC;CAC1D,CAAC;AAOF,MAAM,MAAM,GAAG,CAAC,GAAqC,EAAE,GAAG,IAAS,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAEvH,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAsB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAElG,MAAa,YAA+B,SAAQ,KAAK;IAMvD,YAAY,IAAY,EAAE,GAAG,IAAS;QACpC,IAAI,QAAQ,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;;YAC5D,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QAEpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,KAAK,CAAC,iBAAiB;YAAE,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,IAAI;QACN,OAAO,iBAAiB,IAAI,CAAC,SAAS,GAAG,CAAC;IAC5C,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF;AArBD,oCAqBC","sourcesContent":["import { inspect } from \"node:util\";\n\nconst ERROR_MESSAGES = {\n INVALID_TYPE: (expected: (number | string) | readonly (number | string)[], got: any, name?: string) =>\n `Expected ${\n Array.isArray(expected) ? expected.map(e => (typeof e === \"number\" ? e : `'${e}'`)).join(\" or \") : `'${expected}'`\n }${name ? ` for '${name}'` : \"\"}, but got ${inspect(got)}`,\n NUMBER_COMPARE: (name: string, expected: string, value: number) => `'${name}' must be ${expected} ${value}`,\n EMPTY_ARRAY: (name: string) => `'${name}' is an empty array`,\n EMPTY_FILTERED_ARRAY: (name: string, type: string) => `There is no valid '${type}' in the '${name}' array`,\n EMPTY_STRING: (name: string) => `'${name}' string must not be empty`,\n INVALID_KEY: (obj: string, key: string) => `'${key}' does not need to be provided in ${obj}`,\n MISSING_KEY: (obj: string, key: string) => `'${key}' needs to be provided in ${obj}`,\n MISSING_KEYS: (obj: string, key: string[], all: boolean) =>\n `${key.map(k => `'${k}'`).join(all ? \" and \" : \" or \")} need to be provided in ${obj}`,\n\n MISSING_INTENTS: (i: string) => `${i} intent must be provided for the Client`,\n DISABLED_OPTION: (o: string) => `DisTubeOptions.${o} is disabled`,\n ENABLED_OPTION: (o: string) => `DisTubeOptions.${o} is enabled`,\n\n NOT_IN_VOICE: \"User is not in any voice channel\",\n VOICE_FULL: \"The voice channel is full\",\n VOICE_CONNECT_FAILED: (s: number) => `Cannot connect to the voice channel after ${s} seconds`,\n VOICE_MISSING_PERMS: \"You do not have permission to join this voice channel\",\n VOICE_RECONNECT_FAILED: \"Cannot reconnect to the voice channel\",\n VOICE_CHANGE_GUILD: \"Cannot join a channel in a different guild\",\n\n NO_QUEUE: \"There is no playing queue in this guild\",\n QUEUE_EXIST: \"This guild has a Queue already\",\n PAUSED: \"The queue has been paused already\",\n RESUMED: \"The queue has been playing already\",\n NO_PREVIOUS: \"There is no previous song in this queue\",\n NO_UP_NEXT: \"There is no up next song\",\n NO_SONG_POSITION: \"Does not have any song at this position\",\n NO_PLAYING: \"There is no playing song in the queue\",\n\n NO_RESULT: \"No result found\",\n NO_RELATED: \"Cannot find any related songs\",\n CANNOT_PLAY_RELATED: \"Cannot play the related song\",\n UNAVAILABLE_VIDEO: \"This video is unavailable\",\n UNPLAYABLE_FORMATS: \"No playable format found\",\n NON_NSFW: \"Cannot play age-restricted content in non-NSFW channel\",\n NOT_SUPPORTED_URL: \"This url is not supported\",\n CANNOT_RESOLVE_SONG: (t: any) => `Cannot resolve ${inspect(t)} to a Song`,\n NO_VALID_SONG: \"'songs' array does not have any valid Song, SearchResult or url\",\n EMPTY_FILTERED_PLAYLIST:\n \"There is no valid video in the playlist\\n\" +\n \"Maybe age-restricted contents is filtered because you are in non-NSFW channel\",\n EMPTY_PLAYLIST: \"There is no valid video in the playlist\",\n};\n\ntype ErrorMessages = typeof ERROR_MESSAGES;\ntype ErrorCodes = keyof ErrorMessages;\ntype ErrorCode = { [K in ErrorCodes]-?: ErrorMessages[K] extends string ? K : never }[ErrorCodes];\ntype ErrorCodeTemplate = Exclude<keyof typeof ERROR_MESSAGES, ErrorCode>;\n\nconst errMsg = (msg: string | ((...x: any) => string), ...args: any) => (typeof msg === \"string\" ? msg : msg(...args));\n\nconst haveCode = (code: string): code is ErrorCodes => Object.keys(ERROR_MESSAGES).includes(code);\n\nexport class DisTubeError<T extends string> extends Error {\n errorCode: string;\n constructor(code: ErrorCode);\n constructor(code: T extends ErrorCodeTemplate ? T : never, ...args: Parameters<ErrorMessages[typeof code]>);\n constructor(code: ErrorCodeTemplate, _: never);\n constructor(code: T extends ErrorCodes ? \"This is built-in error code\" : T, message: string);\n constructor(code: string, ...args: any) {\n if (haveCode(code)) super(errMsg(ERROR_MESSAGES[code], ...args));\n else super(...args);\n\n this.errorCode = code;\n if (Error.captureStackTrace) Error.captureStackTrace(this, DisTubeError);\n }\n\n get name() {\n return `DisTubeError [${this.errorCode}]`;\n }\n\n get code() {\n return this.errorCode;\n }\n}\n"]}
@@ -1,45 +0,0 @@
1
- import { Plugin } from ".";
2
- import { PluginType } from "..";
3
- import type { GuildMember } from "discord.js";
4
- import type { Awaitable, Playlist, Song } from "..";
5
- /**
6
- * Extractor Plugin
7
- * @extends Plugin
8
- * @abstract
9
- */
10
- export declare abstract class ExtractorPlugin extends Plugin {
11
- type: PluginType;
12
- /**
13
- * Resolve the validated url to a {@link Song} or a {@link Playlist}.
14
- *
15
- * @param {string} url URL
16
- * @param {Object} [options] Optional options
17
- * @param {Discord.GuildMember} [options.member] Requested user
18
- * @param {*} [options.metadata] Metadata
19
- * @returns {Song|Playlist|Promise<Song|Playlist>}
20
- * @abstract
21
- */
22
- abstract resolve<T = unknown>(url: string, options: {
23
- member?: GuildMember;
24
- metadata?: T;
25
- }): Awaitable<Song<T> | Playlist<T>>;
26
- /**
27
- * Check if the url is working with this plugin
28
- * @param {string} url Input url
29
- * @returns {boolean|Promise<boolean>}
30
- */
31
- validate(url: string): Awaitable<boolean>;
32
- }
33
- /**
34
- * Resolve the validated url to a {@link Song} or a {@link Playlist}.
35
- *
36
- * @param {string} url URL
37
- * @param {Object} [options] Optional options
38
- * @param {Discord.GuildMember} [options.member] Requested user
39
- * @param {*} [options.metadata] Metadata
40
- * @returns {Song|Playlist|Promise<Song|Playlist>}
41
- * @method resolve
42
- * @memberof ExtractorPlugin#
43
- * @abstract
44
- */
45
- //# sourceMappingURL=ExtractorPlugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ExtractorPlugin.d.ts","sourceRoot":"","sources":["../../src/struct/ExtractorPlugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAEpD;;;;GAIG;AACH,8BAAsB,eAAgB,SAAQ,MAAM;IAClD,IAAI,aAAwB;IAC5B;;;;;;;;;OASG;IACH,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,EAC1B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;KAAE,GAC9C,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;CAG1C;AAED;;;;;;;;;;;GAWG"}
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ExtractorPlugin = void 0;
4
- /* eslint-disable @typescript-eslint/no-unused-vars */
5
- const _1 = require(".");
6
- const __1 = require("..");
7
- /**
8
- * Extractor Plugin
9
- * @extends Plugin
10
- * @abstract
11
- */
12
- class ExtractorPlugin extends _1.Plugin {
13
- constructor() {
14
- super(...arguments);
15
- this.type = __1.PluginType.EXTRACTOR;
16
- }
17
- /**
18
- * Check if the url is working with this plugin
19
- * @param {string} url Input url
20
- * @returns {boolean|Promise<boolean>}
21
- */
22
- validate(url) {
23
- return false;
24
- }
25
- }
26
- exports.ExtractorPlugin = ExtractorPlugin;
27
- /**
28
- * Resolve the validated url to a {@link Song} or a {@link Playlist}.
29
- *
30
- * @param {string} url URL
31
- * @param {Object} [options] Optional options
32
- * @param {Discord.GuildMember} [options.member] Requested user
33
- * @param {*} [options.metadata] Metadata
34
- * @returns {Song|Playlist|Promise<Song|Playlist>}
35
- * @method resolve
36
- * @memberof ExtractorPlugin#
37
- * @abstract
38
- */
39
- //# sourceMappingURL=ExtractorPlugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ExtractorPlugin.js","sourceRoot":"","sources":["../../src/struct/ExtractorPlugin.ts"],"names":[],"mappings":";;;AAAA,sDAAsD;AACtD,wBAA2B;AAC3B,0BAAgC;AAIhC;;;;GAIG;AACH,MAAsB,eAAgB,SAAQ,SAAM;IAApD;;QACE,SAAI,GAAG,cAAU,CAAC,SAAS,CAAC;IAuB9B,CAAC;IARC;;;;OAIG;IACH,QAAQ,CAAC,GAAW;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAxBD,0CAwBC;AAED;;;;;;;;;;;GAWG","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { Plugin } from \".\";\nimport { PluginType } from \"..\";\nimport type { GuildMember } from \"discord.js\";\nimport type { Awaitable, Playlist, Song } from \"..\";\n\n/**\n * Extractor Plugin\n * @extends Plugin\n * @abstract\n */\nexport abstract class ExtractorPlugin extends Plugin {\n type = PluginType.EXTRACTOR;\n /**\n * Resolve the validated url to a {@link Song} or a {@link Playlist}.\n *\n * @param {string} url URL\n * @param {Object} [options] Optional options\n * @param {Discord.GuildMember} [options.member] Requested user\n * @param {*} [options.metadata] Metadata\n * @returns {Song|Playlist|Promise<Song|Playlist>}\n * @abstract\n */\n abstract resolve<T = unknown>(\n url: string,\n options: { member?: GuildMember; metadata?: T },\n ): Awaitable<Song<T> | Playlist<T>>;\n /**\n * Check if the url is working with this plugin\n * @param {string} url Input url\n * @returns {boolean|Promise<boolean>}\n */\n validate(url: string): Awaitable<boolean> {\n return false;\n }\n}\n\n/**\n * Resolve the validated url to a {@link Song} or a {@link Playlist}.\n *\n * @param {string} url URL\n * @param {Object} [options] Optional options\n * @param {Discord.GuildMember} [options.member] Requested user\n * @param {*} [options.metadata] Metadata\n * @returns {Song|Playlist|Promise<Song|Playlist>}\n * @method resolve\n * @memberof ExtractorPlugin#\n * @abstract\n */\n"]}
@@ -1,54 +0,0 @@
1
- import type ytpl from "@distube/ytpl";
2
- import type { PlaylistInfo, Song } from "..";
3
- import type { GuildMember } from "discord.js";
4
- /**
5
- * Class representing a playlist.
6
- * @prop {string} source Playlist source
7
- * @template T - The type for the metadata (if any) of the playlist
8
- */
9
- export declare class Playlist<T = unknown> implements PlaylistInfo {
10
- #private;
11
- source: string;
12
- songs: Song[];
13
- name: string;
14
- url?: string;
15
- thumbnail?: string;
16
- [x: string]: any;
17
- /**
18
- * Create a playlist
19
- * @param {Song[]|PlaylistInfo} playlist Playlist
20
- * @param {Object} [options] Optional options
21
- * @param {Discord.GuildMember} [options.member] Requested user
22
- * @param {Object} [options.properties] Custom properties
23
- * @param {T} [options.metadata] Playlist metadata
24
- */
25
- constructor(playlist: Song[] | ytpl.result | PlaylistInfo, options?: {
26
- member?: GuildMember;
27
- properties?: Record<string, any>;
28
- metadata?: T;
29
- });
30
- /**
31
- * Playlist duration in second.
32
- * @type {number}
33
- */
34
- get duration(): number;
35
- /**
36
- * Formatted duration string `hh:mm:ss`.
37
- * @type {string}
38
- */
39
- get formattedDuration(): string;
40
- /**
41
- * User requested.
42
- * @type {Discord.GuildMember?}
43
- */
44
- get member(): GuildMember | undefined;
45
- set member(member: GuildMember | undefined);
46
- /**
47
- * User requested.
48
- * @type {Discord.User?}
49
- */
50
- get user(): import("discord.js").User | undefined;
51
- get metadata(): T;
52
- set metadata(metadata: T);
53
- }
54
- //# sourceMappingURL=Playlist.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Playlist.d.ts","sourceRoot":"","sources":["../../src/struct/Playlist.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;GAIG;AACH,qBAAa,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,YAAY;;IACxD,MAAM,EAAG,MAAM,CAAC;IAChB,KAAK,EAAG,IAAI,EAAE,CAAC;IACf,IAAI,EAAG,MAAM,CAAC;IAGd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IACjB;;;;;;;OAOG;gBAED,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,YAAY,EAC7C,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjC,QAAQ,CAAC,EAAE,CAAC,CAAC;KACT;IAwDR;;;OAGG;IACH,IAAI,QAAQ,WAEX;IAED;;;OAGG;IACH,IAAI,iBAAiB,WAEpB;IAED;;;OAGG;IACH,IAAI,MAAM,IAIS,WAAW,GAAG,SAAS,CAFzC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,EAIzC;IAED;;;OAGG;IACH,IAAI,IAAI,0CAEP;IAED,IAAI,QAAQ,IAIW,CAAC,CAFvB;IAED,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAGvB;CACF"}
@@ -1,131 +0,0 @@
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 __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8
- if (kind === "m") throw new TypeError("Private method is not writable");
9
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
10
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
11
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
12
- };
13
- var _Playlist_metadata, _Playlist_member;
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.Playlist = void 0;
16
- const __1 = require("..");
17
- /**
18
- * Class representing a playlist.
19
- * @prop {string} source Playlist source
20
- * @template T - The type for the metadata (if any) of the playlist
21
- */
22
- class Playlist {
23
- /**
24
- * Create a playlist
25
- * @param {Song[]|PlaylistInfo} playlist Playlist
26
- * @param {Object} [options] Optional options
27
- * @param {Discord.GuildMember} [options.member] Requested user
28
- * @param {Object} [options.properties] Custom properties
29
- * @param {T} [options.metadata] Playlist metadata
30
- */
31
- constructor(playlist, options = {}) {
32
- _Playlist_metadata.set(this, void 0);
33
- _Playlist_member.set(this, void 0);
34
- const { member, properties, metadata } = options;
35
- if (typeof playlist !== "object") {
36
- throw new __1.DisTubeError("INVALID_TYPE", ["Array<Song>", "object"], playlist, "playlist");
37
- }
38
- if (typeof properties !== "undefined" && !(0, __1.isRecord)(properties)) {
39
- throw new __1.DisTubeError("INVALID_TYPE", "object", properties, "properties");
40
- }
41
- // FIXME
42
- const info = playlist;
43
- /**
44
- * The source of the playlist
45
- * @type {string}
46
- */
47
- this.source = (info.source || properties?.source || "youtube").toLowerCase();
48
- /**
49
- * Playlist songs.
50
- * @type {Array<Song>}
51
- */
52
- this.songs = Array.isArray(info) ? info : info.items || info.songs;
53
- if (!Array.isArray(this.songs) || !this.songs.length) {
54
- throw new __1.DisTubeError("EMPTY_PLAYLIST");
55
- }
56
- this.songs.map(s => s.constructor.name === "Song" && (s.playlist = this));
57
- this.member = member || info.member || undefined;
58
- /**
59
- * Playlist name.
60
- * @type {string}
61
- */
62
- this.name =
63
- info.name ||
64
- info.title ||
65
- (this.songs[0].name
66
- ? `${this.songs[0].name} and ${this.songs.length - 1} more songs.`
67
- : `${this.songs.length} songs playlist`);
68
- /**
69
- * Playlist URL.
70
- * @type {string}
71
- */
72
- this.url = info.url || info.webpage_url;
73
- /**
74
- * Playlist thumbnail.
75
- * @type {string?}
76
- */
77
- this.thumbnail = info.thumbnail?.url || info.thumbnail || this.songs[0].thumbnail;
78
- if (properties)
79
- for (const [key, value] of Object.entries(properties))
80
- this[key] = value;
81
- /**
82
- * Optional metadata that can be used to identify the playlist.
83
- * @type {T}
84
- */
85
- this.metadata = metadata;
86
- }
87
- /**
88
- * Playlist duration in second.
89
- * @type {number}
90
- */
91
- get duration() {
92
- return this.songs?.reduce((prev, next) => prev + (next.duration || 0), 0) || 0;
93
- }
94
- /**
95
- * Formatted duration string `hh:mm:ss`.
96
- * @type {string}
97
- */
98
- get formattedDuration() {
99
- return (0, __1.formatDuration)(this.duration);
100
- }
101
- /**
102
- * User requested.
103
- * @type {Discord.GuildMember?}
104
- */
105
- get member() {
106
- return __classPrivateFieldGet(this, _Playlist_member, "f");
107
- }
108
- set member(member) {
109
- if (!(0, __1.isMemberInstance)(member))
110
- return;
111
- __classPrivateFieldSet(this, _Playlist_member, member, "f");
112
- this.songs.map(s => s.constructor.name === "Song" && (s.member = this.member));
113
- }
114
- /**
115
- * User requested.
116
- * @type {Discord.User?}
117
- */
118
- get user() {
119
- return this.member?.user;
120
- }
121
- get metadata() {
122
- return __classPrivateFieldGet(this, _Playlist_metadata, "f");
123
- }
124
- set metadata(metadata) {
125
- __classPrivateFieldSet(this, _Playlist_metadata, metadata, "f");
126
- this.songs.map(s => s.constructor.name === "Song" && (s.metadata = metadata));
127
- }
128
- }
129
- exports.Playlist = Playlist;
130
- _Playlist_metadata = new WeakMap(), _Playlist_member = new WeakMap();
131
- //# sourceMappingURL=Playlist.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Playlist.js","sourceRoot":"","sources":["../../src/struct/Playlist.ts"],"names":[],"mappings":"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","sourcesContent":["import { DisTubeError, formatDuration, isMemberInstance, isRecord } from \"..\";\nimport type ytpl from \"@distube/ytpl\";\nimport type { PlaylistInfo, Song } from \"..\";\nimport type { GuildMember } from \"discord.js\";\n\n/**\n * Class representing a playlist.\n * @prop {string} source Playlist source\n * @template T - The type for the metadata (if any) of the playlist\n */\nexport class Playlist<T = unknown> implements PlaylistInfo {\n source!: string;\n songs!: Song[];\n name!: string;\n #metadata!: T;\n #member?: GuildMember;\n url?: string;\n thumbnail?: string;\n [x: string]: any;\n /**\n * Create a playlist\n * @param {Song[]|PlaylistInfo} playlist Playlist\n * @param {Object} [options] Optional options\n * @param {Discord.GuildMember} [options.member] Requested user\n * @param {Object} [options.properties] Custom properties\n * @param {T} [options.metadata] Playlist metadata\n */\n constructor(\n playlist: Song[] | ytpl.result | PlaylistInfo,\n options: {\n member?: GuildMember;\n properties?: Record<string, any>;\n metadata?: T;\n } = {},\n ) {\n const { member, properties, metadata } = options;\n\n if (typeof playlist !== \"object\") {\n throw new DisTubeError(\"INVALID_TYPE\", [\"Array<Song>\", \"object\"], playlist, \"playlist\");\n }\n if (typeof properties !== \"undefined\" && !isRecord(properties)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"object\", properties, \"properties\");\n }\n // FIXME\n const info = playlist as any;\n /**\n * The source of the playlist\n * @type {string}\n */\n this.source = (info.source || properties?.source || \"youtube\").toLowerCase();\n /**\n * Playlist songs.\n * @type {Array<Song>}\n */\n this.songs = Array.isArray(info) ? info : info.items || info.songs;\n if (!Array.isArray(this.songs) || !this.songs.length) {\n throw new DisTubeError(\"EMPTY_PLAYLIST\");\n }\n this.songs.map(s => s.constructor.name === \"Song\" && (s.playlist = this));\n this.member = member || info.member || undefined;\n /**\n * Playlist name.\n * @type {string}\n */\n this.name =\n info.name ||\n info.title ||\n (this.songs[0].name\n ? `${this.songs[0].name} and ${this.songs.length - 1} more songs.`\n : `${this.songs.length} songs playlist`);\n /**\n * Playlist URL.\n * @type {string}\n */\n this.url = info.url || info.webpage_url;\n /**\n * Playlist thumbnail.\n * @type {string?}\n */\n this.thumbnail = info.thumbnail?.url || info.thumbnail || this.songs[0].thumbnail;\n if (properties) for (const [key, value] of Object.entries(properties)) this[key] = value;\n\n /**\n * Optional metadata that can be used to identify the playlist.\n * @type {T}\n */\n this.metadata = metadata as T;\n }\n\n /**\n * Playlist duration in second.\n * @type {number}\n */\n get duration() {\n return this.songs?.reduce((prev, next) => prev + (next.duration || 0), 0) || 0;\n }\n\n /**\n * Formatted duration string `hh:mm:ss`.\n * @type {string}\n */\n get formattedDuration() {\n return formatDuration(this.duration);\n }\n\n /**\n * User requested.\n * @type {Discord.GuildMember?}\n */\n get member() {\n return this.#member;\n }\n\n set member(member: GuildMember | undefined) {\n if (!isMemberInstance(member)) return;\n this.#member = member;\n this.songs.map(s => s.constructor.name === \"Song\" && (s.member = this.member));\n }\n\n /**\n * User requested.\n * @type {Discord.User?}\n */\n get user() {\n return this.member?.user;\n }\n\n get metadata() {\n return this.#metadata;\n }\n\n set metadata(metadata: T) {\n this.#metadata = metadata;\n this.songs.map(s => s.constructor.name === \"Song\" && (s.metadata = metadata));\n }\n}\n"]}
@@ -1,75 +0,0 @@
1
- import type { Client, GuildTextBasedChannel } from "discord.js";
2
- import type { Awaitable, DisTube, DisTubeEvents, DisTubeHandler, DisTubeVoiceManager, Options, PluginType, QueueManager, RelatedSong } from "..";
3
- /**
4
- * DisTube Plugin
5
- * @abstract
6
- * @private
7
- */
8
- export declare abstract class Plugin {
9
- type: PluginType;
10
- distube: DisTube;
11
- init(distube: DisTube): void;
12
- /**
13
- * Type of the plugin
14
- * @name Plugin#type
15
- * @type {PluginType}
16
- */
17
- /**
18
- * Emit the {@link DisTube} of this base
19
- * @param {string} eventName Event name
20
- * @param {...any} args arguments
21
- * @returns {boolean}
22
- */
23
- emit(eventName: keyof DisTubeEvents, ...args: any): boolean;
24
- /**
25
- * Emit error event
26
- * @param {Error} error error
27
- * @param {Discord.BaseGuildTextChannel} [channel] Text channel where the error is encountered.
28
- */
29
- emitError(error: Error, channel?: GuildTextBasedChannel): void;
30
- /**
31
- * The queue manager
32
- * @type {QueueManager}
33
- * @readonly
34
- */
35
- get queues(): QueueManager;
36
- /**
37
- * The voice manager
38
- * @type {DisTubeVoiceManager}
39
- * @readonly
40
- */
41
- get voices(): DisTubeVoiceManager;
42
- /**
43
- * Discord.js client
44
- * @type {Discord.Client}
45
- * @readonly
46
- */
47
- get client(): Client;
48
- /**
49
- * DisTube options
50
- * @type {DisTubeOptions}
51
- * @readonly
52
- */
53
- get options(): Options;
54
- /**
55
- * DisTube handler
56
- * @type {DisTubeHandler}
57
- * @readonly
58
- */
59
- get handler(): DisTubeHandler;
60
- /**
61
- * Get the stream url from {@link Song#url}. Returns {@link Song#url} by default.
62
- * Not needed if the plugin plays song from YouTube.
63
- * @param {string} url Input url
64
- * @returns {string|Promise<string>}
65
- */
66
- getStreamURL(url: string): Awaitable<string>;
67
- /**
68
- * Get related songs from a supported url. {@link Song#member} should be `undefined`.
69
- * Not needed to add {@link Song#related} because it will be added with this function later.
70
- * @param {string} url Input url
71
- * @returns {Song[]|Promise<Song[]>}
72
- */
73
- getRelatedSongs(url: string): Awaitable<RelatedSong[]>;
74
- }
75
- //# sourceMappingURL=Plugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/struct/Plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EACV,SAAS,EACT,OAAO,EACP,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,OAAO,EACP,UAAU,EACV,YAAY,EACZ,WAAW,EACZ,MAAM,IAAI,CAAC;AAEZ;;;;GAIG;AACH,8BAAsB,MAAM;IAC1B,IAAI,EAAG,UAAU,CAAC;IAClB,OAAO,EAAG,OAAO,CAAC;IAClB,IAAI,CAAC,OAAO,EAAE,OAAO;IAOrB;;;;OAIG;IACH;;;;;OAKG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,aAAa,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,OAAO;IAG3D;;;;OAIG;IACH,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,qBAAqB;IAGvD;;;;OAIG;IACH,IAAI,MAAM,IAAI,YAAY,CAEzB;IACD;;;;OAIG;IACH,IAAI,MAAM,IAAI,mBAAmB,CAEhC;IACD;;;;OAIG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IACD;;;;OAIG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IACD;;;;OAIG;IACH,IAAI,OAAO,IAAI,cAAc,CAE5B;IACD;;;;;OAKG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAG5C;;;;;OAKG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;CAGvD"}