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,479 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Queue = void 0;
4
- const core_1 = require("../core");
5
- const __1 = require("..");
6
- /**
7
- * Represents a queue.
8
- * @extends DisTubeBase
9
- */
10
- class Queue extends core_1.DisTubeBase {
11
- /**
12
- * Create a queue for the guild
13
- * @param {DisTube} distube DisTube
14
- * @param {DisTubeVoice} voice Voice connection
15
- * @param {Song|Song[]} song First song(s)
16
- * @param {Discord.BaseGuildTextChannel?} textChannel Default text channel
17
- */
18
- constructor(distube, voice, song, textChannel) {
19
- super(distube);
20
- /**
21
- * The client user as a `GuildMember` of this queue's guild
22
- * @type {Discord.GuildMember}
23
- */
24
- this.clientMember =
25
- voice.channel.guild?.me ??
26
- (() => {
27
- throw new __1.DisTubeError("INVALID_TYPE", "GuildMember", null, "<VoiceChannel>.guild.me");
28
- })();
29
- /**
30
- * Voice connection of this queue.
31
- * @type {DisTubeVoice}
32
- */
33
- this.voice = voice;
34
- /**
35
- * Queue id (Guild id)
36
- * @type {Discord.Snowflake}
37
- */
38
- this.id = voice.id;
39
- /**
40
- * Get or set the stream volume. Default value: `50`.
41
- * @type {number}
42
- */
43
- this.volume = 50;
44
- /**
45
- * List of songs in the queue (The first one is the playing song)
46
- * @type {Array<Song>}
47
- */
48
- this.songs = Array.isArray(song) ? [...song] : [song];
49
- /**
50
- * List of the previous songs.
51
- * @type {Array<Song>}
52
- */
53
- this.previousSongs = [];
54
- /**
55
- * Whether stream is currently stopped.
56
- * @type {boolean}
57
- * @private
58
- */
59
- this.stopped = false;
60
- /**
61
- * Whether or not the last song was skipped to next song.
62
- * @type {boolean}
63
- * @private
64
- */
65
- this.next = false;
66
- /**
67
- * Whether or not the last song was skipped to previous song.
68
- * @type {boolean}
69
- * @private
70
- */
71
- this.prev = false;
72
- /**
73
- * Whether or not the stream is currently playing.
74
- * @type {boolean}
75
- */
76
- this.playing = true;
77
- /**
78
- * Whether or not the stream is currently paused.
79
- * @type {boolean}
80
- */
81
- this.paused = false;
82
- /**
83
- * Type of repeat mode (`0` is disabled, `1` is repeating a song, `2` is repeating all the queue).
84
- * Default value: `0` (disabled)
85
- * @type {RepeatMode}
86
- */
87
- this.repeatMode = __1.RepeatMode.DISABLED;
88
- /**
89
- * Whether or not the autoplay mode is enabled.
90
- * Default value: `false`
91
- * @type {boolean}
92
- */
93
- this.autoplay = false;
94
- /**
95
- * Enabled audio filters.
96
- * Available filters: {@link Filters}
97
- * @type {Array<string>}
98
- */
99
- this.filters = [];
100
- /**
101
- * What time in the song to begin (in seconds).
102
- * @type {number}
103
- */
104
- this.beginTime = 0;
105
- /**
106
- * The text channel of the Queue. (Default: where the first command is called).
107
- * @type {Discord.TextChannel?}
108
- */
109
- this.textChannel = textChannel;
110
- /**
111
- * Timeout for checking empty channel
112
- * @type {*}
113
- * @private
114
- */
115
- this.emptyTimeout = undefined;
116
- /**
117
- * Task queuing system
118
- * @type {TaskQueue}
119
- * @private
120
- */
121
- this.taskQueue = new __1.TaskQueue();
122
- /**
123
- * DisTubeVoice listener
124
- * @type {Object}
125
- * @private
126
- */
127
- this.listeners = undefined;
128
- }
129
- /**
130
- * Formatted duration string.
131
- * @type {string}
132
- */
133
- get formattedDuration() {
134
- return (0, __1.formatDuration)(this.duration);
135
- }
136
- /**
137
- * Queue's duration.
138
- * @type {number}
139
- */
140
- get duration() {
141
- return this.songs.length ? this.songs.reduce((prev, next) => prev + next.duration, 0) : 0;
142
- }
143
- /**
144
- * What time in the song is playing (in seconds).
145
- * @type {number}
146
- */
147
- get currentTime() {
148
- return this.voice.playbackDuration + this.beginTime;
149
- }
150
- /**
151
- * Formatted {@link Queue#currentTime} string.
152
- * @type {string}
153
- */
154
- get formattedCurrentTime() {
155
- return (0, __1.formatDuration)(this.currentTime);
156
- }
157
- /**
158
- * The voice channel playing in.
159
- * @type {Discord.VoiceChannel|Discord.StageChannel|null}
160
- */
161
- get voiceChannel() {
162
- return this.clientMember.voice.channel;
163
- }
164
- get volume() {
165
- return this.voice.volume;
166
- }
167
- set volume(value) {
168
- this.voice.volume = value;
169
- }
170
- /**
171
- * @private
172
- * Add a Song or an array of Song to the queue
173
- * @param {Song|Song[]} song Song to add
174
- * @param {number} [position=0] Position to add, <= 0 to add to the end of the queue
175
- * @throws {Error}
176
- * @returns {Queue} The guild queue
177
- */
178
- addToQueue(song, position = 0) {
179
- if (!song || (Array.isArray(song) && !song.length)) {
180
- throw new __1.DisTubeError("INVALID_TYPE", ["Song", "Array<Song>"], song, "song");
181
- }
182
- if (typeof position !== "number" || !Number.isInteger(position)) {
183
- throw new __1.DisTubeError("INVALID_TYPE", "integer", position, "position");
184
- }
185
- if (position <= 0) {
186
- if (Array.isArray(song))
187
- this.songs.push(...song);
188
- else
189
- this.songs.push(song);
190
- }
191
- else if (Array.isArray(song)) {
192
- this.songs.splice(position, 0, ...song);
193
- }
194
- else {
195
- this.songs.splice(position, 0, song);
196
- }
197
- if (Array.isArray(song))
198
- song.map(s => delete s.formats);
199
- else
200
- delete song.formats;
201
- return this;
202
- }
203
- /**
204
- * Pause the guild stream
205
- * @returns {Queue} The guild queue
206
- */
207
- pause() {
208
- if (this.paused)
209
- throw new __1.DisTubeError("PAUSED");
210
- this.playing = false;
211
- this.paused = true;
212
- this.voice.pause();
213
- return this;
214
- }
215
- /**
216
- * Resume the guild stream
217
- * @returns {Queue} The guild queue
218
- */
219
- resume() {
220
- if (this.playing)
221
- throw new __1.DisTubeError("RESUMED");
222
- this.playing = true;
223
- this.paused = false;
224
- this.voice.unpause();
225
- return this;
226
- }
227
- /**
228
- * Set the guild stream's volume
229
- * @param {number} percent The percentage of volume you want to set
230
- * @returns {Queue} The guild queue
231
- */
232
- setVolume(percent) {
233
- this.volume = percent;
234
- return this;
235
- }
236
- /**
237
- * Skip the playing song if there is a next song in the queue.
238
- * <info>If {@link Queue#autoplay} is `true` and there is no up next song,
239
- * DisTube will add and play a related song.</info>
240
- * @returns {Promise<Song>} The song will skip to
241
- * @throws {Error}
242
- */
243
- async skip() {
244
- await this.taskQueue.queuing();
245
- try {
246
- if (this.songs.length <= 1) {
247
- if (this.autoplay)
248
- await this.addRelatedSong();
249
- else
250
- throw new __1.DisTubeError("NO_UP_NEXT");
251
- }
252
- const song = this.songs[1];
253
- this.next = true;
254
- this.voice.stop();
255
- return song;
256
- }
257
- finally {
258
- this.taskQueue.resolve();
259
- }
260
- }
261
- /**
262
- * Play the previous song if exists
263
- * @returns {Song} The guild queue
264
- * @throws {Error}
265
- */
266
- async previous() {
267
- await this.taskQueue.queuing();
268
- try {
269
- if (!this.options.savePreviousSongs)
270
- throw new __1.DisTubeError("DISABLED_OPTION", "savePreviousSongs");
271
- if (this.previousSongs?.length === 0 && this.repeatMode !== __1.RepeatMode.QUEUE) {
272
- throw new __1.DisTubeError("NO_PREVIOUS");
273
- }
274
- const song = this.repeatMode === 2 ? this.songs[this.songs.length - 1] : this.previousSongs[this.previousSongs.length - 1];
275
- this.prev = true;
276
- this.voice.stop();
277
- return song;
278
- }
279
- finally {
280
- this.taskQueue.resolve();
281
- }
282
- }
283
- /**
284
- * Shuffle the queue's songs
285
- * @returns {Promise<Queue>} The guild queue
286
- */
287
- async shuffle() {
288
- await this.taskQueue.queuing();
289
- try {
290
- const playing = this.songs.shift();
291
- if (playing === undefined)
292
- return this;
293
- for (let i = this.songs.length - 1; i > 0; i--) {
294
- const j = Math.floor(Math.random() * (i + 1));
295
- [this.songs[i], this.songs[j]] = [this.songs[j], this.songs[i]];
296
- }
297
- this.songs.unshift(playing);
298
- return this;
299
- }
300
- finally {
301
- this.taskQueue.resolve();
302
- }
303
- }
304
- /**
305
- * Jump to the song position in the queue.
306
- * The next one is 1, 2,...
307
- * The previous one is -1, -2,...
308
- * @param {number} position The song position to play
309
- * @returns {Promise<Queue>} The guild queue
310
- * @throws {Error} if `num` is invalid number
311
- */
312
- async jump(position) {
313
- await this.taskQueue.queuing();
314
- try {
315
- if (typeof position !== "number")
316
- throw new __1.DisTubeError("INVALID_TYPE", "number", position, "position");
317
- if (!position || position > this.songs.length || -position > this.previousSongs.length) {
318
- throw new __1.DisTubeError("NO_SONG_POSITION");
319
- }
320
- if (position > 0) {
321
- const nextSongs = this.songs.splice(position - 1);
322
- if (this.options.savePreviousSongs) {
323
- this.previousSongs.push(...this.songs);
324
- }
325
- else {
326
- this.previousSongs.push(...this.songs.map(s => ({ id: s.id })));
327
- }
328
- this.songs = nextSongs;
329
- this.next = true;
330
- }
331
- else if (!this.options.savePreviousSongs) {
332
- throw new __1.DisTubeError("DISABLED_OPTION", "savePreviousSongs");
333
- }
334
- else {
335
- this.prev = true;
336
- if (position !== -1)
337
- this.songs.unshift(...this.previousSongs.splice(position + 1));
338
- }
339
- this.voice.stop();
340
- return this;
341
- }
342
- finally {
343
- this.taskQueue.resolve();
344
- }
345
- }
346
- /**
347
- * Set the repeat mode of the guild queue.\
348
- * Toggle mode `(Disabled -> Song -> Queue -> Disabled ->...)` if `mode` is `undefined`
349
- * @param {RepeatMode?} [mode] The repeat modes (toggle if `undefined`)
350
- * @returns {RepeatMode} The new repeat mode
351
- */
352
- setRepeatMode(mode) {
353
- if (mode !== undefined && !Object.values(__1.RepeatMode).includes(mode)) {
354
- throw new __1.DisTubeError("INVALID_TYPE", ["RepeatMode", "undefined"], mode, "mode");
355
- }
356
- if (mode === undefined)
357
- this.repeatMode = (this.repeatMode + 1) % 3;
358
- else if (this.repeatMode === mode)
359
- this.repeatMode = __1.RepeatMode.DISABLED;
360
- else
361
- this.repeatMode = mode;
362
- return this.repeatMode;
363
- }
364
- /**
365
- * Enable or disable filter(s) of the queue.
366
- * Available filters: {@link Filters}
367
- * @param {string|string[]|false} filter A filter name, an array of filter name or `false` to clear all the filters
368
- * @param {boolean} [force=false] Force enable the input filter(s) even if it's enabled
369
- * @returns {Array<string>} Enabled filters.
370
- * @throws {Error}
371
- */
372
- setFilter(filter, force = false) {
373
- if (Array.isArray(filter)) {
374
- filter = filter.filter(f => Object.prototype.hasOwnProperty.call(this.distube.filters, f));
375
- if (!filter.length)
376
- throw new __1.DisTubeError("EMPTY_FILTERED_ARRAY", "filter", "filter name");
377
- for (const f of filter) {
378
- if (this.filters.includes(f)) {
379
- if (!force)
380
- this.filters.splice(this.filters.indexOf(f), 1);
381
- }
382
- else {
383
- this.filters.push(f);
384
- }
385
- }
386
- }
387
- else if (filter === false) {
388
- this.filters = [];
389
- }
390
- else if (!Object.prototype.hasOwnProperty.call(this.distube.filters, filter)) {
391
- throw new __1.DisTubeError("INVALID_TYPE", "filter name", filter, "filter");
392
- }
393
- else if (this.filters.includes(filter)) {
394
- if (!force)
395
- this.filters.splice(this.filters.indexOf(filter), 1);
396
- }
397
- else {
398
- this.filters.push(filter);
399
- }
400
- this.beginTime = this.currentTime;
401
- this.queues.playSong(this);
402
- return this.filters;
403
- }
404
- /**
405
- * Set the playing time to another position
406
- * @param {number} time Time in seconds
407
- * @returns {Queue} The guild queue
408
- */
409
- seek(time) {
410
- if (typeof time !== "number")
411
- throw new __1.DisTubeError("INVALID_TYPE", "number", time, "time");
412
- if (isNaN(time) || time < 0)
413
- throw new __1.DisTubeError("NUMBER_COMPARE", "time", "bigger or equal to", 0);
414
- this.beginTime = time;
415
- this.queues.playSong(this);
416
- return this;
417
- }
418
- /**
419
- * Add a related song of the playing song to the queue
420
- * @returns {Promise<Song>} The added song
421
- * @throws {Error}
422
- */
423
- async addRelatedSong() {
424
- if (!this.songs?.[0])
425
- throw new __1.DisTubeError("NO_PLAYING");
426
- const related = this.songs[0].related.find(v => !this.previousSongs.map(s => s.id).includes(v.id));
427
- if (!related || !(related instanceof __1.Song))
428
- throw new __1.DisTubeError("NO_RELATED");
429
- const song = await this.handler.resolveSong(related, { member: this.clientMember, metadata: related.metadata });
430
- if (!(song instanceof __1.Song))
431
- throw new __1.DisTubeError("CANNOT_PLAY_RELATED");
432
- this.addToQueue(song);
433
- return song;
434
- }
435
- /**
436
- * Stop the guild stream and delete the queue
437
- */
438
- async stop() {
439
- await this.taskQueue.queuing();
440
- try {
441
- this.stopped = true;
442
- if (this.options.leaveOnStop)
443
- this.voice.leave();
444
- else
445
- this.voice.stop();
446
- this.delete();
447
- }
448
- finally {
449
- this.taskQueue.resolve();
450
- }
451
- }
452
- /**
453
- * Delete the queue from the manager
454
- * (This does not leave the voice channel even if {@link DisTubeOptions|DisTubeOptions.leaveOnStop} is enabled)
455
- * @private
456
- */
457
- delete() {
458
- this.stopped = true;
459
- this.songs = [];
460
- this.previousSongs = [];
461
- if (this.listeners) {
462
- for (const event of Object.keys(this.listeners)) {
463
- this.voice.removeListener(event, this.listeners[event]);
464
- }
465
- }
466
- this.queues.delete(this.id);
467
- this.emit("deleteQueue", this);
468
- }
469
- /**
470
- * Toggle autoplay mode
471
- * @returns {boolean} Autoplay mode state
472
- */
473
- toggleAutoplay() {
474
- this.autoplay = !this.autoplay;
475
- return this.autoplay;
476
- }
477
- }
478
- exports.Queue = Queue;
479
- //# sourceMappingURL=Queue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Queue.js","sourceRoot":"","sources":["../../src/struct/Queue.ts"],"names":[],"mappings":"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","sourcesContent":["import { DisTubeBase } from \"../core\";\nimport { DisTubeError, RepeatMode, Song, TaskQueue, formatDuration } from \"..\";\nimport type { DisTube, DisTubeVoice, DisTubeVoiceEvents } from \"..\";\nimport type { GuildMember, GuildTextBasedChannel, Snowflake } from \"discord.js\";\n\n/**\n * Represents a queue.\n * @extends DisTubeBase\n */\nexport class Queue extends DisTubeBase {\n readonly id: Snowflake;\n /**\n * Voice connection of this queue\n */\n voice: DisTubeVoice;\n /**\n * List of songs in the queue (The first one is the playing song)\n */\n songs: Song[];\n /**\n * List of the previous songs.\n */\n previousSongs: Song[];\n /**\n * Whether stream is currently stopped.\n * @private\n */\n stopped: boolean;\n /**\n * Whether or not the last song was skipped to next song.\n * @private\n */\n next: boolean;\n /**\n * Whether or not the last song was skipped to previous song.\n * @private\n */\n prev: boolean;\n /**\n * Whether or not the stream is currently playing.\n */\n playing: boolean;\n /**\n * Whether or not the stream is currently paused.\n */\n paused: boolean;\n /**\n * Type of repeat mode (`0` is disabled, `1` is repeating a song, `2` is repeating all the queue).\n * Default value: `0` (disabled)\n */\n repeatMode: RepeatMode;\n /**\n * Whether or not the autoplay mode is enabled.\n * Default value: `false`\n */\n autoplay: boolean;\n /**\n * Enabled audio filters.\n * Available filters: {@link Filters}\n */\n filters: string[];\n /**\n * What time in the song to begin (in seconds).\n */\n beginTime: number;\n /**\n * The text channel of the Queue. (Default: where the first command is called).\n */\n textChannel?: GuildTextBasedChannel;\n /**\n * Timeout for checking empty channel\n * @private\n */\n emptyTimeout?: NodeJS.Timeout;\n /**\n * The client user as a `GuildMember` of this queue's guild\n */\n clientMember: GuildMember;\n /**\n * Task queuing system\n */\n taskQueue: TaskQueue;\n listeners?: DisTubeVoiceEvents;\n /**\n * Create a queue for the guild\n * @param {DisTube} distube DisTube\n * @param {DisTubeVoice} voice Voice connection\n * @param {Song|Song[]} song First song(s)\n * @param {Discord.BaseGuildTextChannel?} textChannel Default text channel\n */\n constructor(distube: DisTube, voice: DisTubeVoice, song: Song | Song[], textChannel?: GuildTextBasedChannel) {\n super(distube);\n /**\n * The client user as a `GuildMember` of this queue's guild\n * @type {Discord.GuildMember}\n */\n this.clientMember =\n voice.channel.guild?.me ??\n (() => {\n throw new DisTubeError(\"INVALID_TYPE\", \"GuildMember\", null, \"<VoiceChannel>.guild.me\");\n })();\n /**\n * Voice connection of this queue.\n * @type {DisTubeVoice}\n */\n this.voice = voice;\n /**\n * Queue id (Guild id)\n * @type {Discord.Snowflake}\n */\n this.id = voice.id;\n /**\n * Get or set the stream volume. Default value: `50`.\n * @type {number}\n */\n this.volume = 50;\n /**\n * List of songs in the queue (The first one is the playing song)\n * @type {Array<Song>}\n */\n this.songs = Array.isArray(song) ? [...song] : [song];\n /**\n * List of the previous songs.\n * @type {Array<Song>}\n */\n this.previousSongs = [];\n /**\n * Whether stream is currently stopped.\n * @type {boolean}\n * @private\n */\n this.stopped = false;\n /**\n * Whether or not the last song was skipped to next song.\n * @type {boolean}\n * @private\n */\n this.next = false;\n /**\n * Whether or not the last song was skipped to previous song.\n * @type {boolean}\n * @private\n */\n this.prev = false;\n /**\n * Whether or not the stream is currently playing.\n * @type {boolean}\n */\n this.playing = true;\n /**\n * Whether or not the stream is currently paused.\n * @type {boolean}\n */\n this.paused = false;\n /**\n * Type of repeat mode (`0` is disabled, `1` is repeating a song, `2` is repeating all the queue).\n * Default value: `0` (disabled)\n * @type {RepeatMode}\n */\n this.repeatMode = RepeatMode.DISABLED;\n /**\n * Whether or not the autoplay mode is enabled.\n * Default value: `false`\n * @type {boolean}\n */\n this.autoplay = false;\n /**\n * Enabled audio filters.\n * Available filters: {@link Filters}\n * @type {Array<string>}\n */\n this.filters = [];\n /**\n * What time in the song to begin (in seconds).\n * @type {number}\n */\n this.beginTime = 0;\n /**\n * The text channel of the Queue. (Default: where the first command is called).\n * @type {Discord.TextChannel?}\n */\n this.textChannel = textChannel;\n /**\n * Timeout for checking empty channel\n * @type {*}\n * @private\n */\n this.emptyTimeout = undefined;\n /**\n * Task queuing system\n * @type {TaskQueue}\n * @private\n */\n this.taskQueue = new TaskQueue();\n /**\n * DisTubeVoice listener\n * @type {Object}\n * @private\n */\n this.listeners = undefined;\n }\n /**\n * Formatted duration string.\n * @type {string}\n */\n get formattedDuration() {\n return formatDuration(this.duration);\n }\n /**\n * Queue's duration.\n * @type {number}\n */\n get duration() {\n return this.songs.length ? this.songs.reduce((prev, next) => prev + next.duration, 0) : 0;\n }\n /**\n * What time in the song is playing (in seconds).\n * @type {number}\n */\n get currentTime() {\n return this.voice.playbackDuration + this.beginTime;\n }\n /**\n * Formatted {@link Queue#currentTime} string.\n * @type {string}\n */\n get formattedCurrentTime() {\n return formatDuration(this.currentTime);\n }\n /**\n * The voice channel playing in.\n * @type {Discord.VoiceChannel|Discord.StageChannel|null}\n */\n get voiceChannel() {\n return this.clientMember.voice.channel;\n }\n get volume() {\n return this.voice.volume;\n }\n set volume(value: number) {\n this.voice.volume = value;\n }\n /**\n * @private\n * Add a Song or an array of Song to the queue\n * @param {Song|Song[]} song Song to add\n * @param {number} [position=0] Position to add, <= 0 to add to the end of the queue\n * @throws {Error}\n * @returns {Queue} The guild queue\n */\n addToQueue(song: Song | Song[], position = 0): Queue {\n if (!song || (Array.isArray(song) && !song.length)) {\n throw new DisTubeError(\"INVALID_TYPE\", [\"Song\", \"Array<Song>\"], song, \"song\");\n }\n if (typeof position !== \"number\" || !Number.isInteger(position)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"integer\", position, \"position\");\n }\n if (position <= 0) {\n if (Array.isArray(song)) this.songs.push(...song);\n else this.songs.push(song);\n } else if (Array.isArray(song)) {\n this.songs.splice(position, 0, ...song);\n } else {\n this.songs.splice(position, 0, song);\n }\n if (Array.isArray(song)) song.map(s => delete s.formats);\n else delete song.formats;\n return this;\n }\n /**\n * Pause the guild stream\n * @returns {Queue} The guild queue\n */\n pause(): Queue {\n if (this.paused) throw new DisTubeError(\"PAUSED\");\n this.playing = false;\n this.paused = true;\n this.voice.pause();\n return this;\n }\n /**\n * Resume the guild stream\n * @returns {Queue} The guild queue\n */\n resume(): Queue {\n if (this.playing) throw new DisTubeError(\"RESUMED\");\n this.playing = true;\n this.paused = false;\n this.voice.unpause();\n return this;\n }\n /**\n * Set the guild stream's volume\n * @param {number} percent The percentage of volume you want to set\n * @returns {Queue} The guild queue\n */\n setVolume(percent: number): Queue {\n this.volume = percent;\n return this;\n }\n\n /**\n * Skip the playing song if there is a next song in the queue.\n * <info>If {@link Queue#autoplay} is `true` and there is no up next song,\n * DisTube will add and play a related song.</info>\n * @returns {Promise<Song>} The song will skip to\n * @throws {Error}\n */\n async skip(): Promise<Song> {\n await this.taskQueue.queuing();\n try {\n if (this.songs.length <= 1) {\n if (this.autoplay) await this.addRelatedSong();\n else throw new DisTubeError(\"NO_UP_NEXT\");\n }\n const song = this.songs[1];\n this.next = true;\n this.voice.stop();\n return song;\n } finally {\n this.taskQueue.resolve();\n }\n }\n\n /**\n * Play the previous song if exists\n * @returns {Song} The guild queue\n * @throws {Error}\n */\n async previous(): Promise<Song> {\n await this.taskQueue.queuing();\n try {\n if (!this.options.savePreviousSongs) throw new DisTubeError(\"DISABLED_OPTION\", \"savePreviousSongs\");\n if (this.previousSongs?.length === 0 && this.repeatMode !== RepeatMode.QUEUE) {\n throw new DisTubeError(\"NO_PREVIOUS\");\n }\n const song =\n this.repeatMode === 2 ? this.songs[this.songs.length - 1] : this.previousSongs[this.previousSongs.length - 1];\n this.prev = true;\n this.voice.stop();\n return song;\n } finally {\n this.taskQueue.resolve();\n }\n }\n /**\n * Shuffle the queue's songs\n * @returns {Promise<Queue>} The guild queue\n */\n async shuffle(): Promise<Queue> {\n await this.taskQueue.queuing();\n try {\n const playing = this.songs.shift();\n if (playing === undefined) return this;\n for (let i = this.songs.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [this.songs[i], this.songs[j]] = [this.songs[j], this.songs[i]];\n }\n this.songs.unshift(playing);\n return this;\n } finally {\n this.taskQueue.resolve();\n }\n }\n /**\n * Jump to the song position in the queue.\n * The next one is 1, 2,...\n * The previous one is -1, -2,...\n * @param {number} position The song position to play\n * @returns {Promise<Queue>} The guild queue\n * @throws {Error} if `num` is invalid number\n */\n async jump(position: number): Promise<Queue> {\n await this.taskQueue.queuing();\n try {\n if (typeof position !== \"number\") throw new DisTubeError(\"INVALID_TYPE\", \"number\", position, \"position\");\n if (!position || position > this.songs.length || -position > this.previousSongs.length) {\n throw new DisTubeError(\"NO_SONG_POSITION\");\n }\n if (position > 0) {\n const nextSongs = this.songs.splice(position - 1);\n if (this.options.savePreviousSongs) {\n this.previousSongs.push(...this.songs);\n } else {\n this.previousSongs.push(...this.songs.map(s => ({ id: s.id } as Song)));\n }\n this.songs = nextSongs;\n this.next = true;\n } else if (!this.options.savePreviousSongs) {\n throw new DisTubeError(\"DISABLED_OPTION\", \"savePreviousSongs\");\n } else {\n this.prev = true;\n if (position !== -1) this.songs.unshift(...this.previousSongs.splice(position + 1));\n }\n this.voice.stop();\n return this;\n } finally {\n this.taskQueue.resolve();\n }\n }\n /**\n * Set the repeat mode of the guild queue.\\\n * Toggle mode `(Disabled -> Song -> Queue -> Disabled ->...)` if `mode` is `undefined`\n * @param {RepeatMode?} [mode] The repeat modes (toggle if `undefined`)\n * @returns {RepeatMode} The new repeat mode\n */\n setRepeatMode(mode?: RepeatMode): RepeatMode {\n if (mode !== undefined && !Object.values(RepeatMode).includes(mode)) {\n throw new DisTubeError(\"INVALID_TYPE\", [\"RepeatMode\", \"undefined\"], mode, \"mode\");\n }\n if (mode === undefined) this.repeatMode = (this.repeatMode + 1) % 3;\n else if (this.repeatMode === mode) this.repeatMode = RepeatMode.DISABLED;\n else this.repeatMode = mode;\n return this.repeatMode;\n }\n /**\n * Enable or disable filter(s) of the queue.\n * Available filters: {@link Filters}\n * @param {string|string[]|false} filter A filter name, an array of filter name or `false` to clear all the filters\n * @param {boolean} [force=false] Force enable the input filter(s) even if it's enabled\n * @returns {Array<string>} Enabled filters.\n * @throws {Error}\n */\n setFilter(filter: string | string[] | false, force = false): Array<string> {\n if (Array.isArray(filter)) {\n filter = filter.filter(f => Object.prototype.hasOwnProperty.call(this.distube.filters, f));\n if (!filter.length) throw new DisTubeError(\"EMPTY_FILTERED_ARRAY\", \"filter\", \"filter name\");\n for (const f of filter) {\n if (this.filters.includes(f)) {\n if (!force) this.filters.splice(this.filters.indexOf(f), 1);\n } else {\n this.filters.push(f);\n }\n }\n } else if (filter === false) {\n this.filters = [];\n } else if (!Object.prototype.hasOwnProperty.call(this.distube.filters, filter)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"filter name\", filter, \"filter\");\n } else if (this.filters.includes(filter)) {\n if (!force) this.filters.splice(this.filters.indexOf(filter), 1);\n } else {\n this.filters.push(filter);\n }\n this.beginTime = this.currentTime;\n this.queues.playSong(this);\n return this.filters;\n }\n /**\n * Set the playing time to another position\n * @param {number} time Time in seconds\n * @returns {Queue} The guild queue\n */\n seek(time: number): Queue {\n if (typeof time !== \"number\") throw new DisTubeError(\"INVALID_TYPE\", \"number\", time, \"time\");\n if (isNaN(time) || time < 0) throw new DisTubeError(\"NUMBER_COMPARE\", \"time\", \"bigger or equal to\", 0);\n this.beginTime = time;\n this.queues.playSong(this);\n return this;\n }\n /**\n * Add a related song of the playing song to the queue\n * @returns {Promise<Song>} The added song\n * @throws {Error}\n */\n async addRelatedSong(): Promise<Song> {\n if (!this.songs?.[0]) throw new DisTubeError(\"NO_PLAYING\");\n const related = this.songs[0].related.find(v => !this.previousSongs.map(s => s.id).includes(v.id));\n if (!related || !(related instanceof Song)) throw new DisTubeError(\"NO_RELATED\");\n const song = await this.handler.resolveSong(related, { member: this.clientMember, metadata: related.metadata });\n if (!(song instanceof Song)) throw new DisTubeError(\"CANNOT_PLAY_RELATED\");\n this.addToQueue(song);\n return song;\n }\n /**\n * Stop the guild stream and delete the queue\n */\n async stop() {\n await this.taskQueue.queuing();\n try {\n this.stopped = true;\n if (this.options.leaveOnStop) this.voice.leave();\n else this.voice.stop();\n this.delete();\n } finally {\n this.taskQueue.resolve();\n }\n }\n /**\n * Delete the queue from the manager\n * (This does not leave the voice channel even if {@link DisTubeOptions|DisTubeOptions.leaveOnStop} is enabled)\n * @private\n */\n delete() {\n this.stopped = true;\n this.songs = [];\n this.previousSongs = [];\n if (this.listeners) {\n for (const event of Object.keys(this.listeners) as (keyof DisTubeVoiceEvents)[]) {\n this.voice.removeListener(event, this.listeners[event]);\n }\n }\n this.queues.delete(this.id);\n this.emit(\"deleteQueue\", this);\n }\n /**\n * Toggle autoplay mode\n * @returns {boolean} Autoplay mode state\n */\n toggleAutoplay(): boolean {\n this.autoplay = !this.autoplay;\n return this.autoplay;\n }\n}\n"]}
@@ -1,27 +0,0 @@
1
- import type { Playlist, Video } from "@distube/ytsr";
2
- /** Class representing a search result. */
3
- export declare class SearchResult {
4
- source: "youtube";
5
- type: "video" | "playlist";
6
- id: string;
7
- name: string;
8
- url: string;
9
- views?: number;
10
- isLive?: boolean;
11
- duration?: number;
12
- formattedDuration?: string;
13
- thumbnail?: string;
14
- /** Video or playlist uploader */
15
- uploader: {
16
- /** Uploader name */
17
- name?: string;
18
- /** Uploader url */
19
- url?: string;
20
- };
21
- /**
22
- * Create a search result
23
- * @param {Object} info ytsr result
24
- */
25
- constructor(info: Video | Playlist);
26
- }
27
- //# sourceMappingURL=SearchResult.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SearchResult.d.ts","sourceRoot":"","sources":["../../src/struct/SearchResult.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAErD,0CAA0C;AAC1C,qBAAa,YAAY;IACvB,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,QAAQ,EAAE;QACR,oBAAoB;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,mBAAmB;QACnB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF;;;OAGG;gBACS,IAAI,EAAE,KAAK,GAAG,QAAQ;CA+DnC"}
@@ -1,77 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SearchResult = void 0;
4
- const __1 = require("..");
5
- /** Class representing a search result. */
6
- class SearchResult {
7
- /**
8
- * Create a search result
9
- * @param {Object} info ytsr result
10
- */
11
- constructor(info) {
12
- this.source = "youtube";
13
- /**
14
- * Type of SearchResult (`video` or `playlist`)
15
- * @type {string}
16
- */
17
- this.type = info.type;
18
- /**
19
- * YouTube video or playlist id
20
- * @type {string}
21
- */
22
- this.id = info.id;
23
- /**
24
- * Video or playlist title.
25
- * @type {string}
26
- */
27
- this.name = info.name;
28
- /**
29
- * Video or playlist URL.
30
- * @type {string}
31
- */
32
- this.url = info.url;
33
- if (this.type === "video") {
34
- info = info;
35
- /**
36
- * [Video only] Video or playlist views count
37
- * @type {number}
38
- */
39
- this.views = info.views;
40
- /**
41
- * [Video only] Indicates if the video is an active live.
42
- * @type {boolean?}
43
- */
44
- this.isLive = info.isLive;
45
- /**
46
- * [Video only] Video duration.
47
- * @type {number}
48
- */
49
- this.duration = this.isLive ? 0 : (0, __1.toSecond)(info.duration);
50
- /**
51
- * [Video only] Formatted duration string `hh:mm:ss` or `mm:ss`.
52
- * @type {string}
53
- */
54
- this.formattedDuration = this.isLive ? "Live" : (0, __1.formatDuration)(this.duration);
55
- /**
56
- * [Video only] Video thumbnail.
57
- * @type {string?}
58
- */
59
- this.thumbnail = info.thumbnail;
60
- }
61
- else if (this.type !== "playlist") {
62
- throw new __1.DisTubeError("INVALID_TYPE", ["video", "playlist"], this.type, "SearchResult.type");
63
- }
64
- /**
65
- * Song uploader
66
- * @type {Object}
67
- * @prop {string?} name Uploader name
68
- * @prop {string?} url Uploader url
69
- */
70
- this.uploader = {
71
- name: (info.author || info.owner)?.name,
72
- url: (info.author || info.owner)?.url,
73
- };
74
- }
75
- }
76
- exports.SearchResult = SearchResult;
77
- //# sourceMappingURL=SearchResult.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SearchResult.js","sourceRoot":"","sources":["../../src/struct/SearchResult.ts"],"names":[],"mappings":";;;AAAA,0BAA4D;AAG5D,0CAA0C;AAC1C,MAAa,YAAY;IAkBvB;;;OAGG;IACH,YAAY,IAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB;;;WAGG;QACH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB;;;WAGG;QACH,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB;;;WAGG;QACH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB;;;WAGG;QACH,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YACzB,IAAI,GAAG,IAAa,CAAC;YACrB;;;eAGG;YACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB;;;eAGG;YACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC1B;;;eAGG;YACH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,YAAQ,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1D;;;eAGG;YACH,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAA,kBAAc,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9E;;;eAGG;YACH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;SACjC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;YACnC,MAAM,IAAI,gBAAY,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;SAC/F;QACD;;;;;WAKG;QACH,IAAI,CAAC,QAAQ,GAAG;YACd,IAAI,EAAE,CAAE,IAAc,CAAC,MAAM,IAAK,IAAiB,CAAC,KAAK,CAAC,EAAE,IAAI;YAChE,GAAG,EAAE,CAAE,IAAc,CAAC,MAAM,IAAK,IAAiB,CAAC,KAAK,CAAC,EAAE,GAAG;SAC/D,CAAC;IACJ,CAAC;CACF;AArFD,oCAqFC","sourcesContent":["import { DisTubeError, formatDuration, toSecond } from \"..\";\nimport type { Playlist, Video } from \"@distube/ytsr\";\n\n/** Class representing a search result. */\nexport class SearchResult {\n source: \"youtube\";\n type: \"video\" | \"playlist\";\n id: string;\n name: string;\n url: string;\n views?: number;\n isLive?: boolean;\n duration?: number;\n formattedDuration?: string;\n thumbnail?: string;\n /** Video or playlist uploader */\n uploader: {\n /** Uploader name */\n name?: string;\n /** Uploader url */\n url?: string;\n };\n /**\n * Create a search result\n * @param {Object} info ytsr result\n */\n constructor(info: Video | Playlist) {\n this.source = \"youtube\";\n /**\n * Type of SearchResult (`video` or `playlist`)\n * @type {string}\n */\n this.type = info.type;\n /**\n * YouTube video or playlist id\n * @type {string}\n */\n this.id = info.id;\n /**\n * Video or playlist title.\n * @type {string}\n */\n this.name = info.name;\n /**\n * Video or playlist URL.\n * @type {string}\n */\n this.url = info.url;\n if (this.type === \"video\") {\n info = info as Video;\n /**\n * [Video only] Video or playlist views count\n * @type {number}\n */\n this.views = info.views;\n /**\n * [Video only] Indicates if the video is an active live.\n * @type {boolean?}\n */\n this.isLive = info.isLive;\n /**\n * [Video only] Video duration.\n * @type {number}\n */\n this.duration = this.isLive ? 0 : toSecond(info.duration);\n /**\n * [Video only] Formatted duration string `hh:mm:ss` or `mm:ss`.\n * @type {string}\n */\n this.formattedDuration = this.isLive ? \"Live\" : formatDuration(this.duration);\n /**\n * [Video only] Video thumbnail.\n * @type {string?}\n */\n this.thumbnail = info.thumbnail;\n } else if (this.type !== \"playlist\") {\n throw new DisTubeError(\"INVALID_TYPE\", [\"video\", \"playlist\"], this.type, \"SearchResult.type\");\n }\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 as Video).author || (info as Playlist).owner)?.name,\n url: ((info as Video).author || (info as Playlist).owner)?.url,\n };\n }\n}\n"]}