distube 2.8.18 → 3.0.0-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 (139) hide show
  1. package/README.md +32 -98
  2. package/dist/DisTube.d.ts +522 -0
  3. package/dist/DisTube.d.ts.map +1 -0
  4. package/dist/DisTube.js +794 -0
  5. package/dist/DisTube.js.map +1 -0
  6. package/dist/constant.d.ts +130 -0
  7. package/dist/constant.d.ts.map +1 -0
  8. package/dist/constant.js +150 -0
  9. package/dist/constant.js.map +1 -0
  10. package/dist/core/DisTubeBase.d.ts +55 -0
  11. package/dist/core/DisTubeBase.d.ts.map +1 -0
  12. package/dist/core/DisTubeBase.js +76 -0
  13. package/dist/core/DisTubeBase.js.map +1 -0
  14. package/dist/core/DisTubeHandler.d.ts +84 -0
  15. package/dist/core/DisTubeHandler.d.ts.map +1 -0
  16. package/dist/core/DisTubeHandler.js +311 -0
  17. package/dist/core/DisTubeHandler.js.map +1 -0
  18. package/dist/core/DisTubeOptions.d.ts +26 -0
  19. package/dist/core/DisTubeOptions.d.ts.map +1 -0
  20. package/dist/core/DisTubeOptions.js +93 -0
  21. package/dist/core/DisTubeOptions.js.map +1 -0
  22. package/dist/core/DisTubeStream.d.ts +52 -0
  23. package/dist/core/DisTubeStream.d.ts.map +1 -0
  24. package/dist/core/DisTubeStream.js +109 -0
  25. package/dist/core/DisTubeStream.js.map +1 -0
  26. package/dist/core/index.d.ts +7 -0
  27. package/dist/core/index.d.ts.map +1 -0
  28. package/dist/core/index.js +19 -0
  29. package/dist/core/index.js.map +1 -0
  30. package/dist/core/manager/BaseManager.d.ts +18 -0
  31. package/dist/core/manager/BaseManager.d.ts.map +1 -0
  32. package/dist/core/manager/BaseManager.js +44 -0
  33. package/dist/core/manager/BaseManager.js.map +1 -0
  34. package/dist/core/manager/QueueManager.d.ts +60 -0
  35. package/dist/core/manager/QueueManager.d.ts.map +1 -0
  36. package/dist/core/manager/QueueManager.js +202 -0
  37. package/dist/core/manager/QueueManager.js.map +1 -0
  38. package/dist/core/manager/index.d.ts +3 -0
  39. package/dist/core/manager/index.d.ts.map +1 -0
  40. package/dist/core/manager/index.js +15 -0
  41. package/dist/core/manager/index.js.map +1 -0
  42. package/dist/core/voice/DJSAdapter.d.ts +4 -0
  43. package/dist/core/voice/DJSAdapter.d.ts.map +1 -0
  44. package/dist/core/voice/DJSAdapter.js +61 -0
  45. package/dist/core/voice/DJSAdapter.js.map +1 -0
  46. package/dist/core/voice/DisTubeVoice.d.ts +83 -0
  47. package/dist/core/voice/DisTubeVoice.d.ts.map +1 -0
  48. package/dist/core/voice/DisTubeVoice.js +236 -0
  49. package/dist/core/voice/DisTubeVoice.js.map +1 -0
  50. package/dist/core/voice/DisTubeVoiceManager.d.ts +41 -0
  51. package/dist/core/voice/DisTubeVoiceManager.d.ts.map +1 -0
  52. package/dist/core/voice/DisTubeVoiceManager.js +67 -0
  53. package/dist/core/voice/DisTubeVoiceManager.js.map +1 -0
  54. package/dist/core/voice/index.d.ts +4 -0
  55. package/dist/core/voice/index.d.ts.map +1 -0
  56. package/dist/core/voice/index.js +16 -0
  57. package/dist/core/voice/index.js.map +1 -0
  58. package/dist/index.d.ts +8 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +23 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/plugin/http.d.ts +8 -0
  63. package/dist/plugin/http.d.ts.map +1 -0
  64. package/dist/plugin/http.js +20 -0
  65. package/dist/plugin/http.js.map +1 -0
  66. package/dist/plugin/https.d.ts +14 -0
  67. package/dist/plugin/https.d.ts.map +1 -0
  68. package/dist/plugin/https.js +50 -0
  69. package/dist/plugin/https.js.map +1 -0
  70. package/dist/plugin/index.d.ts +4 -0
  71. package/dist/plugin/index.d.ts.map +1 -0
  72. package/dist/plugin/index.js +16 -0
  73. package/dist/plugin/index.js.map +1 -0
  74. package/dist/plugin/youtube-dl.d.ts +11 -0
  75. package/dist/plugin/youtube-dl.d.ts.map +1 -0
  76. package/dist/plugin/youtube-dl.js +75 -0
  77. package/dist/plugin/youtube-dl.js.map +1 -0
  78. package/dist/struct/CustomPlugin.d.ts +27 -0
  79. package/dist/struct/CustomPlugin.d.ts.map +1 -0
  80. package/dist/struct/CustomPlugin.js +35 -0
  81. package/dist/struct/CustomPlugin.js.map +1 -0
  82. package/dist/struct/DisTubeError.d.ts +54 -0
  83. package/dist/struct/DisTubeError.d.ts.map +1 -0
  84. package/dist/struct/DisTubeError.js +72 -0
  85. package/dist/struct/DisTubeError.js.map +1 -0
  86. package/dist/struct/ExtractorPlugin.d.ts +29 -0
  87. package/dist/struct/ExtractorPlugin.d.ts.map +1 -0
  88. package/dist/struct/ExtractorPlugin.js +32 -0
  89. package/dist/struct/ExtractorPlugin.js.map +1 -0
  90. package/dist/struct/Playlist.d.ts +42 -0
  91. package/dist/struct/Playlist.d.ts.map +1 -0
  92. package/dist/struct/Playlist.js +104 -0
  93. package/dist/struct/Playlist.js.map +1 -0
  94. package/dist/struct/Plugin.d.ts +82 -0
  95. package/dist/struct/Plugin.d.ts.map +1 -0
  96. package/dist/struct/Plugin.js +108 -0
  97. package/dist/struct/Plugin.js.map +1 -0
  98. package/dist/struct/Queue.d.ts +217 -0
  99. package/dist/struct/Queue.d.ts.map +1 -0
  100. package/dist/struct/Queue.js +480 -0
  101. package/dist/struct/Queue.js.map +1 -0
  102. package/dist/struct/SearchResult.d.ts +28 -0
  103. package/dist/struct/SearchResult.d.ts.map +1 -0
  104. package/dist/struct/SearchResult.js +79 -0
  105. package/dist/struct/SearchResult.js.map +1 -0
  106. package/dist/struct/Song.d.ts +68 -0
  107. package/dist/struct/Song.d.ts.map +1 -0
  108. package/dist/struct/Song.js +229 -0
  109. package/dist/struct/Song.js.map +1 -0
  110. package/dist/struct/TaskQueue.d.ts +33 -0
  111. package/dist/struct/TaskQueue.d.ts.map +1 -0
  112. package/dist/struct/TaskQueue.js +58 -0
  113. package/dist/struct/TaskQueue.js.map +1 -0
  114. package/dist/struct/index.d.ts +10 -0
  115. package/dist/struct/index.d.ts.map +1 -0
  116. package/dist/struct/index.js +22 -0
  117. package/dist/struct/index.js.map +1 -0
  118. package/dist/tsconfig.tsbuildinfo +1 -0
  119. package/dist/type.d.ts +159 -0
  120. package/dist/type.d.ts.map +1 -0
  121. package/dist/type.js +3 -0
  122. package/dist/type.js.map +1 -0
  123. package/dist/util.d.ts +47 -0
  124. package/dist/util.d.ts.map +1 -0
  125. package/dist/util.js +205 -0
  126. package/dist/util.js.map +1 -0
  127. package/package.json +50 -24
  128. package/src/DisTube.js +0 -1121
  129. package/src/Playlist.js +0 -107
  130. package/src/Queue.js +0 -120
  131. package/src/SearchResult.js +0 -81
  132. package/src/Song.js +0 -135
  133. package/src/duration.js +0 -39
  134. package/typings/DisTube.d.ts +0 -635
  135. package/typings/Playlist.d.ts +0 -73
  136. package/typings/Queue.d.ts +0 -106
  137. package/typings/SearchResult.d.ts +0 -59
  138. package/typings/Song.d.ts +0 -104
  139. package/typings/duration.d.ts +0 -2
@@ -0,0 +1,68 @@
1
+ import Playlist from "./Playlist";
2
+ import type ytdl from "@distube/ytdl-core";
3
+ import type { GuildMember, User } from "discord.js";
4
+ import type { Chapter, OtherSongInfo, SearchResult } from "..";
5
+ /**
6
+ * Class representing a song.
7
+ *
8
+ * <info>If {@link Song} is added from a YouTube {@link SearchResult} or {@link Playlist},
9
+ * some info will be missing to save your resources. It will be filled when emitting {@link DisTube#playSong} event.
10
+ *
11
+ * Missing info: {@link Song#likes}, {@link Song#dislikes}, {@link Song#streamURL},
12
+ * {@link Song#related}, {@link Song#chapters}, {@link Song#age_restricted}</info>
13
+ */
14
+ export declare class Song {
15
+ source: string;
16
+ formats?: ytdl.videoFormat[];
17
+ member?: GuildMember;
18
+ user?: User;
19
+ id?: string;
20
+ name?: string;
21
+ isLive: boolean;
22
+ duration: number;
23
+ formattedDuration?: string;
24
+ url: string;
25
+ streamURL?: string;
26
+ thumbnail?: string;
27
+ related: Song[];
28
+ views: number;
29
+ likes: number;
30
+ dislikes: number;
31
+ uploader: {
32
+ name?: string;
33
+ url?: string;
34
+ };
35
+ age_restricted: boolean;
36
+ chapters: Chapter[];
37
+ reposts: number;
38
+ playlist?: Playlist;
39
+ /**
40
+ * Create a Song
41
+ * @param {ytdl.videoInfo|SearchResult|OtherSongInfo} info Raw info
42
+ * @param {Discord.GuildMember?} member Requested user
43
+ * @param {string} source Song source
44
+ */
45
+ constructor(info: ytdl.videoInfo | SearchResult | OtherSongInfo | ytdl.relatedVideo, member?: GuildMember, source?: string);
46
+ _patchYouTube(i: ytdl.videoInfo | SearchResult): void;
47
+ /**
48
+ * Patch data from other source
49
+ * @param {OtherSongInfo} info Video info
50
+ * @private
51
+ */
52
+ private _patchOther;
53
+ /**
54
+ * @param {Playlist} playlist Playlist
55
+ * @param {Discord.GuildMember} [member] Requested user
56
+ * @private
57
+ * @returns {Song}
58
+ */
59
+ _patchPlaylist(playlist: Playlist, member?: GuildMember): Song;
60
+ /**
61
+ * @param {Discord.GuildMember} [member] Requested user
62
+ * @private
63
+ * @returns {Song}
64
+ */
65
+ _patchMember(member?: GuildMember): Song;
66
+ }
67
+ export default Song;
68
+ //# sourceMappingURL=Song.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Song.d.ts","sourceRoot":"","sources":["../../src/struct/Song.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAE/D;;;;;;;;GAQG;AACH,qBAAa,IAAI;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAG,OAAO,CAAC;IACjB,QAAQ,EAAG,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,GAAG,EAAG,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAG,IAAI,EAAE,CAAC;IACjB,KAAK,EAAG,MAAM,CAAC;IACf,KAAK,EAAG,MAAM,CAAC;IACf,QAAQ,EAAG,MAAM,CAAC;IAClB,QAAQ,EAAG;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,cAAc,EAAG,OAAO,CAAC;IACzB,QAAQ,EAAG,OAAO,EAAE,CAAC;IACrB,OAAO,EAAG,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;;;;;OAKG;gBAED,IAAI,EAAE,IAAI,CAAC,SAAS,GAAG,YAAY,GAAG,aAAa,GAAG,IAAI,CAAC,YAAY,EACvE,MAAM,CAAC,EAAE,WAAW,EACpB,MAAM,SAAY;IAqBpB,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,GAAG,YAAY;IAoH9C;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAsBnB;;;;;OAKG;IACH,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI;IAW9D;;;;OAIG;IACH,YAAY,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI;CAezC;AAED,eAAe,IAAI,CAAC"}
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Song = void 0;
7
+ const Playlist_1 = __importDefault(require("./Playlist"));
8
+ const __1 = require("..");
9
+ /**
10
+ * Class representing a song.
11
+ *
12
+ * <info>If {@link Song} is added from a YouTube {@link SearchResult} or {@link Playlist},
13
+ * some info will be missing to save your resources. It will be filled when emitting {@link DisTube#playSong} event.
14
+ *
15
+ * Missing info: {@link Song#likes}, {@link Song#dislikes}, {@link Song#streamURL},
16
+ * {@link Song#related}, {@link Song#chapters}, {@link Song#age_restricted}</info>
17
+ */
18
+ class Song {
19
+ /**
20
+ * Create a Song
21
+ * @param {ytdl.videoInfo|SearchResult|OtherSongInfo} info Raw info
22
+ * @param {Discord.GuildMember?} member Requested user
23
+ * @param {string} source Song source
24
+ */
25
+ constructor(info, member, source = "youtube") {
26
+ var _a;
27
+ if (typeof source !== "string" ||
28
+ (info.src && typeof info.src !== "string")) {
29
+ throw new __1.DisTubeError("INVALID_TYPE", "string", source, "source");
30
+ }
31
+ /**
32
+ * The source of the song
33
+ * @type {string}
34
+ */
35
+ this.source = (((_a = info) === null || _a === void 0 ? void 0 : _a.src) || source).toLowerCase();
36
+ this._patchMember(member);
37
+ if (this.source === "youtube") {
38
+ this._patchYouTube(info);
39
+ }
40
+ else {
41
+ this._patchOther(info);
42
+ }
43
+ }
44
+ _patchYouTube(i) {
45
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
46
+ // FIXME
47
+ const info = i;
48
+ if (info.full === true) {
49
+ /**
50
+ * Stream formats (Available if the song is from YouTube and playing)
51
+ * @type {ytdl.videoFormat[]?}
52
+ * @private
53
+ */
54
+ this.formats = info.formats;
55
+ // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports
56
+ const err = require("@distube/ytdl-core/lib/utils").playError(info.player_response, [
57
+ "UNPLAYABLE",
58
+ "LIVE_STREAM_OFFLINE",
59
+ "LOGIN_REQUIRED",
60
+ ]);
61
+ if (err)
62
+ throw err;
63
+ if (!((_a = info.formats) === null || _a === void 0 ? void 0 : _a.length))
64
+ throw new __1.DisTubeError("UNAVAILABLE_VIDEO");
65
+ }
66
+ const details = info.videoDetails || info;
67
+ /**
68
+ * YouTube video id
69
+ * @type {string?}
70
+ */
71
+ this.id = details.videoId || details.id;
72
+ /**
73
+ * Song name aka video title.
74
+ * @type {string?}
75
+ */
76
+ this.name = details.title || details.name;
77
+ /**
78
+ * Indicates if the video is an active live.
79
+ * @type {boolean}
80
+ */
81
+ this.isLive = !!details.isLive;
82
+ /**
83
+ * Song duration.
84
+ * @type {number}
85
+ */
86
+ this.duration = this.isLive ? 0 : (0, __1.toSecond)(details.lengthSeconds || details.length_seconds || details.duration);
87
+ /**
88
+ * Formatted duration string (`hh:mm:ss`, `mm:ss` or `Live`).
89
+ * @type {string?}
90
+ */
91
+ this.formattedDuration = this.isLive ? "Live" : (0, __1.formatDuration)(this.duration);
92
+ /**
93
+ * Song URL.
94
+ * @type {string}
95
+ */
96
+ this.url = `https://www.youtube.com/watch?v=${this.id}`;
97
+ /**
98
+ * Stream / Download URL (Available if the song is playing)
99
+ * @type {string?}
100
+ */
101
+ this.streamURL = undefined;
102
+ /**
103
+ * Song thumbnail.
104
+ * @type {string?}
105
+ */
106
+ this.thumbnail =
107
+ ((_b = details.thumbnails) === null || _b === void 0 ? void 0 : _b.sort((a, b) => b.width - a.width)[0].url) ||
108
+ ((_c = details.thumbnail) === null || _c === void 0 ? void 0 : _c.url) ||
109
+ details.thumbnail;
110
+ /**
111
+ * Related songs
112
+ * @type {Song[]}
113
+ */
114
+ this.related = ((_d = info === null || info === void 0 ? void 0 : info.related_videos) === null || _d === void 0 ? void 0 : _d.map((v) => new Song(v))) || details.related || [];
115
+ /**
116
+ * Song views count
117
+ * @type {number}
118
+ */
119
+ this.views = (0, __1.parseNumber)(details.viewCount || details.view_count || details.views);
120
+ /**
121
+ * Song like count
122
+ * @type {number}
123
+ */
124
+ this.likes = (0, __1.parseNumber)(details.likes);
125
+ /**
126
+ * Song dislike count
127
+ * @type {number}
128
+ */
129
+ this.dislikes = (0, __1.parseNumber)(details.dislikes);
130
+ /**
131
+ * Song uploader
132
+ * @type {Object}
133
+ * @prop {string?} name Uploader name
134
+ * @prop {string?} url Uploader url
135
+ */
136
+ this.uploader = {
137
+ name: ((_e = info.uploader) === null || _e === void 0 ? void 0 : _e.name) || ((_f = details.author) === null || _f === void 0 ? void 0 : _f.name),
138
+ url: ((_g = info.uploader) === null || _g === void 0 ? void 0 : _g.url) || ((_h = details.author) === null || _h === void 0 ? void 0 : _h.channel_url) || ((_j = details.author) === null || _j === void 0 ? void 0 : _j.url),
139
+ };
140
+ /**
141
+ * Whether or not an age-restricted content
142
+ * @type {boolean}
143
+ */
144
+ this.age_restricted = !!details.age_restricted;
145
+ /**
146
+ * @typedef {Object} Chapter
147
+ * @prop {string} title Chapter title
148
+ * @prop {number} start_time Chapter start time in seconds
149
+ */
150
+ /**
151
+ * Chapters information (YouTube only)
152
+ * @type {Chapter[]}
153
+ */
154
+ this.chapters = details.chapters || [];
155
+ /**
156
+ * Song repost count
157
+ * @type {number}
158
+ */
159
+ this.reposts = 0;
160
+ }
161
+ /**
162
+ * Patch data from other source
163
+ * @param {OtherSongInfo} info Video info
164
+ * @private
165
+ */
166
+ _patchOther(info) {
167
+ if (info.id)
168
+ this.id = info.id;
169
+ if (info.title)
170
+ this.name = info.title;
171
+ else if (info.name)
172
+ this.name = info.name;
173
+ this.isLive = Boolean(info.is_live || info.isLive);
174
+ this.duration = this.isLive ? 0 : (0, __1.toSecond)(info._duration_raw || info.duration);
175
+ this.formattedDuration = this.isLive ? "Live" : (0, __1.formatDuration)(this.duration);
176
+ this.url = info.webpage_url || info.url;
177
+ this.thumbnail = info.thumbnail;
178
+ this.related = info.related || [];
179
+ this.views = (0, __1.parseNumber)(info.view_count || info.views);
180
+ this.likes = (0, __1.parseNumber)(info.like_count || info.likes);
181
+ this.dislikes = (0, __1.parseNumber)(info.dislike_count || info.dislikes);
182
+ this.reposts = (0, __1.parseNumber)(info.repost_count || info.reposts);
183
+ this.uploader = {
184
+ name: info.uploader,
185
+ url: info.uploader_url,
186
+ };
187
+ this.age_restricted = info.age_restricted || (!!info.age_limit && (0, __1.parseNumber)(info.age_limit) >= 18);
188
+ this.chapters = info.chapters || [];
189
+ }
190
+ /**
191
+ * @param {Playlist} playlist Playlist
192
+ * @param {Discord.GuildMember} [member] Requested user
193
+ * @private
194
+ * @returns {Song}
195
+ */
196
+ _patchPlaylist(playlist, member) {
197
+ if (!(playlist instanceof Playlist_1.default))
198
+ throw new __1.DisTubeError("INVALID_TYPE", "Playlist", playlist, "playlist");
199
+ /**
200
+ * The playlist added this song
201
+ * @type {Playlist?}
202
+ */
203
+ this.playlist = playlist;
204
+ return this._patchMember(member);
205
+ }
206
+ /**
207
+ * @param {Discord.GuildMember} [member] Requested user
208
+ * @private
209
+ * @returns {Song}
210
+ */
211
+ _patchMember(member) {
212
+ if (member) {
213
+ /**
214
+ * User requested
215
+ * @type {Discord.GuildMember?}
216
+ */
217
+ this.member = member;
218
+ /**
219
+ * User requested
220
+ * @type {Discord.User?}
221
+ */
222
+ this.user = member === null || member === void 0 ? void 0 : member.user;
223
+ }
224
+ return this;
225
+ }
226
+ }
227
+ exports.Song = Song;
228
+ exports.default = Song;
229
+ //# sourceMappingURL=Song.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Song.js","sourceRoot":"","sources":["../../src/struct/Song.ts"],"names":[],"mappings":"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","sourcesContent":["import Playlist from \"./Playlist\";\nimport { DisTubeError, formatDuration, parseNumber, toSecond } from \"..\";\nimport type ytdl from \"@distube/ytdl-core\";\nimport type { GuildMember, User } from \"discord.js\";\nimport type { Chapter, OtherSongInfo, SearchResult } from \"..\";\n\n/**\n * Class representing a song.\n *\n * <info>If {@link Song} is added from a YouTube {@link SearchResult} or {@link Playlist},\n * some info will be missing to save your resources. It will be filled when emitting {@link DisTube#playSong} event.\n *\n * Missing info: {@link Song#likes}, {@link Song#dislikes}, {@link Song#streamURL},\n * {@link Song#related}, {@link Song#chapters}, {@link Song#age_restricted}</info>\n */\nexport class Song {\n source: string;\n formats?: ytdl.videoFormat[];\n member?: GuildMember;\n user?: User;\n id?: string;\n name?: string;\n isLive!: boolean;\n duration!: number;\n formattedDuration?: string;\n url!: string;\n streamURL?: string;\n thumbnail?: string;\n related!: Song[];\n views!: number;\n likes!: number;\n dislikes!: number;\n uploader!: {\n name?: string;\n url?: string;\n };\n age_restricted!: boolean;\n chapters!: Chapter[];\n reposts!: number;\n playlist?: Playlist;\n /**\n * Create a Song\n * @param {ytdl.videoInfo|SearchResult|OtherSongInfo} info Raw info\n * @param {Discord.GuildMember?} member Requested user\n * @param {string} source Song source\n */\n constructor(\n info: ytdl.videoInfo | SearchResult | OtherSongInfo | ytdl.relatedVideo,\n member?: GuildMember,\n source = \"youtube\",\n ) {\n if (\n typeof source !== \"string\" ||\n ((info as OtherSongInfo).src && typeof (info as OtherSongInfo).src !== \"string\")\n ) {\n throw new DisTubeError(\"INVALID_TYPE\", \"string\", source, \"source\");\n }\n /**\n * The source of the song\n * @type {string}\n */\n this.source = ((info as OtherSongInfo)?.src || source).toLowerCase();\n this._patchMember(member);\n if (this.source === \"youtube\") {\n this._patchYouTube(info as ytdl.videoInfo);\n } else {\n this._patchOther(info as OtherSongInfo);\n }\n }\n\n _patchYouTube(i: ytdl.videoInfo | SearchResult) {\n // FIXME\n const info = i as any;\n if ((info as any).full === true) {\n /**\n * Stream formats (Available if the song is from YouTube and playing)\n * @type {ytdl.videoFormat[]?}\n * @private\n */\n this.formats = info.formats;\n // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports\n const err = require(\"@distube/ytdl-core/lib/utils\").playError(info.player_response, [\n \"UNPLAYABLE\",\n \"LIVE_STREAM_OFFLINE\",\n \"LOGIN_REQUIRED\",\n ]);\n if (err) throw err;\n\n if (!info.formats?.length) throw new DisTubeError(\"UNAVAILABLE_VIDEO\");\n }\n const details = info.videoDetails || info;\n /**\n * YouTube video id\n * @type {string?}\n */\n this.id = details.videoId || details.id;\n /**\n * Song name aka video title.\n * @type {string?}\n */\n this.name = details.title || details.name;\n /**\n * Indicates if the video is an active live.\n * @type {boolean}\n */\n this.isLive = !!details.isLive;\n /**\n * Song duration.\n * @type {number}\n */\n this.duration = this.isLive ? 0 : toSecond(details.lengthSeconds || details.length_seconds || details.duration);\n /**\n * Formatted duration string (`hh:mm:ss`, `mm:ss` or `Live`).\n * @type {string?}\n */\n this.formattedDuration = this.isLive ? \"Live\" : formatDuration(this.duration);\n /**\n * Song URL.\n * @type {string}\n */\n this.url = `https://www.youtube.com/watch?v=${this.id}`;\n /**\n * Stream / Download URL (Available if the song is playing)\n * @type {string?}\n */\n this.streamURL = undefined;\n /**\n * Song thumbnail.\n * @type {string?}\n */\n this.thumbnail =\n details.thumbnails?.sort((a: any, b: any) => b.width - a.width)[0].url ||\n details.thumbnail?.url ||\n details.thumbnail;\n /**\n * Related songs\n * @type {Song[]}\n */\n this.related = info?.related_videos?.map((v: any) => new Song(v)) || details.related || [];\n /**\n * Song views count\n * @type {number}\n */\n this.views = parseNumber(details.viewCount || details.view_count || details.views);\n /**\n * Song like count\n * @type {number}\n */\n this.likes = parseNumber(details.likes);\n /**\n * Song dislike count\n * @type {number}\n */\n this.dislikes = parseNumber(details.dislikes);\n /**\n * Song uploader\n * @type {Object}\n * @prop {string?} name Uploader name\n * @prop {string?} url Uploader url\n */\n this.uploader = {\n name: info.uploader?.name || details.author?.name,\n url: info.uploader?.url || details.author?.channel_url || details.author?.url,\n };\n /**\n * Whether or not an age-restricted content\n * @type {boolean}\n */\n this.age_restricted = !!details.age_restricted;\n /**\n * @typedef {Object} Chapter\n * @prop {string} title Chapter title\n * @prop {number} start_time Chapter start time in seconds\n */\n /**\n * Chapters information (YouTube only)\n * @type {Chapter[]}\n */\n this.chapters = details.chapters || [];\n /**\n * Song repost count\n * @type {number}\n */\n this.reposts = 0;\n }\n\n /**\n * Patch data from other source\n * @param {OtherSongInfo} info Video info\n * @private\n */\n private _patchOther(info: OtherSongInfo) {\n if (info.id) this.id = info.id;\n if (info.title) this.name = info.title;\n else if (info.name) this.name = info.name;\n this.isLive = Boolean(info.is_live || info.isLive);\n this.duration = this.isLive ? 0 : toSecond(info._duration_raw || info.duration);\n this.formattedDuration = this.isLive ? \"Live\" : formatDuration(this.duration);\n this.url = info.webpage_url || info.url;\n this.thumbnail = info.thumbnail;\n this.related = info.related || [];\n this.views = parseNumber(info.view_count || info.views);\n this.likes = parseNumber(info.like_count || info.likes);\n this.dislikes = parseNumber(info.dislike_count || info.dislikes);\n this.reposts = parseNumber(info.repost_count || info.reposts);\n this.uploader = {\n name: info.uploader,\n url: info.uploader_url,\n };\n this.age_restricted = info.age_restricted || (!!info.age_limit && parseNumber(info.age_limit) >= 18);\n this.chapters = info.chapters || [];\n }\n\n /**\n * @param {Playlist} playlist Playlist\n * @param {Discord.GuildMember} [member] Requested user\n * @private\n * @returns {Song}\n */\n _patchPlaylist(playlist: Playlist, member?: GuildMember): Song {\n if (!(playlist instanceof Playlist)) throw new DisTubeError(\"INVALID_TYPE\", \"Playlist\", playlist, \"playlist\");\n\n /**\n * The playlist added this song\n * @type {Playlist?}\n */\n this.playlist = playlist;\n return this._patchMember(member);\n }\n\n /**\n * @param {Discord.GuildMember} [member] Requested user\n * @private\n * @returns {Song}\n */\n _patchMember(member?: GuildMember): Song {\n if (member) {\n /**\n * User requested\n * @type {Discord.GuildMember?}\n */\n this.member = member;\n /**\n * User requested\n * @type {Discord.User?}\n */\n this.user = member?.user;\n }\n return this;\n }\n}\n\nexport default Song;\n"]}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Task queuing system
3
+ * @private
4
+ */
5
+ export declare class TaskQueue {
6
+ /**
7
+ * The task array
8
+ * @type {Task[]}
9
+ * @private
10
+ */
11
+ private tasks;
12
+ /**
13
+ * Waits for last task finished and queues a new task
14
+ * @param {boolean} [resolveInfo=false] Whether the task is a resolving info task
15
+ * @returns {Promise<void>}
16
+ */
17
+ queuing(resolveInfo?: boolean): Promise<void>;
18
+ /**
19
+ * Removes the finished task and processes the next task
20
+ */
21
+ resolve(): void;
22
+ /**
23
+ * The remaining number of tasks
24
+ * @type {number}
25
+ */
26
+ get remaining(): number;
27
+ /**
28
+ * Whether or not having a resolving info task
29
+ * @type {boolean}
30
+ */
31
+ get hasResolveTask(): boolean;
32
+ }
33
+ //# sourceMappingURL=TaskQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskQueue.d.ts","sourceRoot":"","sources":["../../src/struct/TaskQueue.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,qBAAa,SAAS;IACpB;;;;OAIG;IACH,OAAO,CAAC,KAAK,CAAc;IAE3B;;;;OAIG;IACI,OAAO,CAAC,WAAW,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlD;;OAEG;IACI,OAAO,IAAI,IAAI;IAItB;;;OAGG;IACH,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED;;;OAGG;IACH,IAAW,cAAc,IAAI,OAAO,CAEnC;CACF"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TaskQueue = void 0;
4
+ class Task {
5
+ constructor(resolveInfo) {
6
+ this.resolveInfo = resolveInfo;
7
+ this.promise = new Promise(res => {
8
+ this.resolve = res;
9
+ });
10
+ }
11
+ }
12
+ /**
13
+ * Task queuing system
14
+ * @private
15
+ */
16
+ class TaskQueue {
17
+ constructor() {
18
+ /**
19
+ * The task array
20
+ * @type {Task[]}
21
+ * @private
22
+ */
23
+ this.tasks = [];
24
+ }
25
+ /**
26
+ * Waits for last task finished and queues a new task
27
+ * @param {boolean} [resolveInfo=false] Whether the task is a resolving info task
28
+ * @returns {Promise<void>}
29
+ */
30
+ queuing(resolveInfo = false) {
31
+ const next = this.remaining ? this.tasks[this.tasks.length - 1].promise : Promise.resolve();
32
+ this.tasks.push(new Task(resolveInfo));
33
+ return next;
34
+ }
35
+ /**
36
+ * Removes the finished task and processes the next task
37
+ */
38
+ resolve() {
39
+ var _a;
40
+ (_a = this.tasks.shift()) === null || _a === void 0 ? void 0 : _a.resolve();
41
+ }
42
+ /**
43
+ * The remaining number of tasks
44
+ * @type {number}
45
+ */
46
+ get remaining() {
47
+ return this.tasks.length;
48
+ }
49
+ /**
50
+ * Whether or not having a resolving info task
51
+ * @type {boolean}
52
+ */
53
+ get hasResolveTask() {
54
+ return !!this.tasks.find(t => t.resolveInfo);
55
+ }
56
+ }
57
+ exports.TaskQueue = TaskQueue;
58
+ //# sourceMappingURL=TaskQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskQueue.js","sourceRoot":"","sources":["../../src/struct/TaskQueue.ts"],"names":[],"mappings":";;;AAAA,MAAM,IAAI;IAIR,YAAY,WAAoB;QAC9B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAO,GAAG,CAAC,EAAE;YACrC,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED;;;GAGG;AACH,MAAa,SAAS;IAAtB;QACE;;;;WAIG;QACK,UAAK,GAAW,EAAE,CAAC;IAmC7B,CAAC;IAjCC;;;;OAIG;IACI,OAAO,CAAC,WAAW,GAAG,KAAK;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5F,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACI,OAAO;;QACZ,MAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,0CAAE,OAAO,EAAE,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,IAAW,cAAc;QACvB,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;CACF;AAzCD,8BAyCC","sourcesContent":["class Task {\n resolve!: () => void;\n promise: Promise<void>;\n resolveInfo: boolean;\n constructor(resolveInfo: boolean) {\n this.resolveInfo = resolveInfo;\n this.promise = new Promise<void>(res => {\n this.resolve = res;\n });\n }\n}\n\n/**\n * Task queuing system\n * @private\n */\nexport class TaskQueue {\n /**\n * The task array\n * @type {Task[]}\n * @private\n */\n private tasks: Task[] = [];\n\n /**\n * Waits for last task finished and queues a new task\n * @param {boolean} [resolveInfo=false] Whether the task is a resolving info task\n * @returns {Promise<void>}\n */\n public queuing(resolveInfo = false): Promise<void> {\n const next = this.remaining ? this.tasks[this.tasks.length - 1].promise : Promise.resolve();\n this.tasks.push(new Task(resolveInfo));\n return next;\n }\n\n /**\n * Removes the finished task and processes the next task\n */\n public resolve(): void {\n this.tasks.shift()?.resolve();\n }\n\n /**\n * The remaining number of tasks\n * @type {number}\n */\n public get remaining(): number {\n return this.tasks.length;\n }\n\n /**\n * Whether or not having a resolving info task\n * @type {boolean}\n */\n public get hasResolveTask(): boolean {\n return !!this.tasks.find(t => t.resolveInfo);\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ export * from "./DisTubeError";
2
+ export * from "./TaskQueue";
3
+ export * from "./Playlist";
4
+ export * from "./SearchResult";
5
+ export * from "./Song";
6
+ export * from "./Queue";
7
+ export * from "./Plugin";
8
+ export * from "./CustomPlugin";
9
+ export * from "./ExtractorPlugin";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/struct/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./DisTubeError"), exports);
14
+ __exportStar(require("./TaskQueue"), exports);
15
+ __exportStar(require("./Playlist"), exports);
16
+ __exportStar(require("./SearchResult"), exports);
17
+ __exportStar(require("./Song"), exports);
18
+ __exportStar(require("./Queue"), exports);
19
+ __exportStar(require("./Plugin"), exports);
20
+ __exportStar(require("./CustomPlugin"), exports);
21
+ __exportStar(require("./ExtractorPlugin"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/struct/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iDAA+B;AAC/B,8CAA4B;AAC5B,6CAA2B;AAC3B,iDAA+B;AAC/B,yCAAuB;AACvB,0CAAwB;AACxB,2CAAyB;AACzB,iDAA+B;AAC/B,oDAAkC","sourcesContent":["export * from \"./DisTubeError\";\nexport * from \"./TaskQueue\";\nexport * from \"./Playlist\";\nexport * from \"./SearchResult\";\nexport * from \"./Song\";\nexport * from \"./Queue\";\nexport * from \"./Plugin\";\nexport * from \"./CustomPlugin\";\nexport * from \"./ExtractorPlugin\";\n"]}