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.
- package/README.md +32 -98
- package/dist/DisTube.d.ts +522 -0
- package/dist/DisTube.d.ts.map +1 -0
- package/dist/DisTube.js +794 -0
- package/dist/DisTube.js.map +1 -0
- package/dist/constant.d.ts +130 -0
- package/dist/constant.d.ts.map +1 -0
- package/dist/constant.js +150 -0
- package/dist/constant.js.map +1 -0
- package/dist/core/DisTubeBase.d.ts +55 -0
- package/dist/core/DisTubeBase.d.ts.map +1 -0
- package/dist/core/DisTubeBase.js +76 -0
- package/dist/core/DisTubeBase.js.map +1 -0
- package/dist/core/DisTubeHandler.d.ts +84 -0
- package/dist/core/DisTubeHandler.d.ts.map +1 -0
- package/dist/core/DisTubeHandler.js +311 -0
- package/dist/core/DisTubeHandler.js.map +1 -0
- package/dist/core/DisTubeOptions.d.ts +26 -0
- package/dist/core/DisTubeOptions.d.ts.map +1 -0
- package/dist/core/DisTubeOptions.js +93 -0
- package/dist/core/DisTubeOptions.js.map +1 -0
- package/dist/core/DisTubeStream.d.ts +52 -0
- package/dist/core/DisTubeStream.d.ts.map +1 -0
- package/dist/core/DisTubeStream.js +109 -0
- package/dist/core/DisTubeStream.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +19 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/manager/BaseManager.d.ts +18 -0
- package/dist/core/manager/BaseManager.d.ts.map +1 -0
- package/dist/core/manager/BaseManager.js +44 -0
- package/dist/core/manager/BaseManager.js.map +1 -0
- package/dist/core/manager/QueueManager.d.ts +60 -0
- package/dist/core/manager/QueueManager.d.ts.map +1 -0
- package/dist/core/manager/QueueManager.js +202 -0
- package/dist/core/manager/QueueManager.js.map +1 -0
- package/dist/core/manager/index.d.ts +3 -0
- package/dist/core/manager/index.d.ts.map +1 -0
- package/dist/core/manager/index.js +15 -0
- package/dist/core/manager/index.js.map +1 -0
- package/dist/core/voice/DJSAdapter.d.ts +4 -0
- package/dist/core/voice/DJSAdapter.d.ts.map +1 -0
- package/dist/core/voice/DJSAdapter.js +61 -0
- package/dist/core/voice/DJSAdapter.js.map +1 -0
- package/dist/core/voice/DisTubeVoice.d.ts +83 -0
- package/dist/core/voice/DisTubeVoice.d.ts.map +1 -0
- package/dist/core/voice/DisTubeVoice.js +236 -0
- package/dist/core/voice/DisTubeVoice.js.map +1 -0
- package/dist/core/voice/DisTubeVoiceManager.d.ts +41 -0
- package/dist/core/voice/DisTubeVoiceManager.d.ts.map +1 -0
- package/dist/core/voice/DisTubeVoiceManager.js +67 -0
- package/dist/core/voice/DisTubeVoiceManager.js.map +1 -0
- package/dist/core/voice/index.d.ts +4 -0
- package/dist/core/voice/index.d.ts.map +1 -0
- package/dist/core/voice/index.js +16 -0
- package/dist/core/voice/index.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin/http.d.ts +8 -0
- package/dist/plugin/http.d.ts.map +1 -0
- package/dist/plugin/http.js +20 -0
- package/dist/plugin/http.js.map +1 -0
- package/dist/plugin/https.d.ts +14 -0
- package/dist/plugin/https.d.ts.map +1 -0
- package/dist/plugin/https.js +50 -0
- package/dist/plugin/https.js.map +1 -0
- package/dist/plugin/index.d.ts +4 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +16 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/youtube-dl.d.ts +11 -0
- package/dist/plugin/youtube-dl.d.ts.map +1 -0
- package/dist/plugin/youtube-dl.js +75 -0
- package/dist/plugin/youtube-dl.js.map +1 -0
- package/dist/struct/CustomPlugin.d.ts +27 -0
- package/dist/struct/CustomPlugin.d.ts.map +1 -0
- package/dist/struct/CustomPlugin.js +35 -0
- package/dist/struct/CustomPlugin.js.map +1 -0
- package/dist/struct/DisTubeError.d.ts +54 -0
- package/dist/struct/DisTubeError.d.ts.map +1 -0
- package/dist/struct/DisTubeError.js +72 -0
- package/dist/struct/DisTubeError.js.map +1 -0
- package/dist/struct/ExtractorPlugin.d.ts +29 -0
- package/dist/struct/ExtractorPlugin.d.ts.map +1 -0
- package/dist/struct/ExtractorPlugin.js +32 -0
- package/dist/struct/ExtractorPlugin.js.map +1 -0
- package/dist/struct/Playlist.d.ts +42 -0
- package/dist/struct/Playlist.d.ts.map +1 -0
- package/dist/struct/Playlist.js +104 -0
- package/dist/struct/Playlist.js.map +1 -0
- package/dist/struct/Plugin.d.ts +82 -0
- package/dist/struct/Plugin.d.ts.map +1 -0
- package/dist/struct/Plugin.js +108 -0
- package/dist/struct/Plugin.js.map +1 -0
- package/dist/struct/Queue.d.ts +217 -0
- package/dist/struct/Queue.d.ts.map +1 -0
- package/dist/struct/Queue.js +480 -0
- package/dist/struct/Queue.js.map +1 -0
- package/dist/struct/SearchResult.d.ts +28 -0
- package/dist/struct/SearchResult.d.ts.map +1 -0
- package/dist/struct/SearchResult.js +79 -0
- package/dist/struct/SearchResult.js.map +1 -0
- package/dist/struct/Song.d.ts +68 -0
- package/dist/struct/Song.d.ts.map +1 -0
- package/dist/struct/Song.js +229 -0
- package/dist/struct/Song.js.map +1 -0
- package/dist/struct/TaskQueue.d.ts +33 -0
- package/dist/struct/TaskQueue.d.ts.map +1 -0
- package/dist/struct/TaskQueue.js +58 -0
- package/dist/struct/TaskQueue.js.map +1 -0
- package/dist/struct/index.d.ts +10 -0
- package/dist/struct/index.d.ts.map +1 -0
- package/dist/struct/index.js +22 -0
- package/dist/struct/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/type.d.ts +159 -0
- package/dist/type.d.ts.map +1 -0
- package/dist/type.js +3 -0
- package/dist/type.js.map +1 -0
- package/dist/util.d.ts +47 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +205 -0
- package/dist/util.js.map +1 -0
- package/package.json +50 -24
- package/src/DisTube.js +0 -1121
- package/src/Playlist.js +0 -107
- package/src/Queue.js +0 -120
- package/src/SearchResult.js +0 -81
- package/src/Song.js +0 -135
- package/src/duration.js +0 -39
- package/typings/DisTube.d.ts +0 -635
- package/typings/Playlist.d.ts +0 -73
- package/typings/Queue.d.ts +0 -106
- package/typings/SearchResult.d.ts +0 -59
- package/typings/Song.d.ts +0 -104
- 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"]}
|