distube 4.0.0-dev.2 → 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.
- package/README.md +1 -1
- package/dist/index.d.ts +593 -8
- package/dist/index.js +2360 -22
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2300 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +67 -40
- package/dist/DisTube.d.ts +0 -54
- package/dist/DisTube.d.ts.map +0 -1
- package/dist/DisTube.js +0 -279
- package/dist/DisTube.js.map +0 -1
- package/dist/constant.d.ts +0 -27
- package/dist/constant.d.ts.map +0 -1
- package/dist/constant.js +0 -47
- package/dist/constant.js.map +0 -1
- package/dist/core/DisTubeBase.d.ts +0 -14
- package/dist/core/DisTubeBase.d.ts.map +0 -1
- package/dist/core/DisTubeBase.js +0 -31
- package/dist/core/DisTubeBase.js.map +0 -1
- package/dist/core/DisTubeHandler.d.ts +0 -27
- package/dist/core/DisTubeHandler.d.ts.map +0 -1
- package/dist/core/DisTubeHandler.js +0 -230
- package/dist/core/DisTubeHandler.js.map +0 -1
- package/dist/core/DisTubeOptions.d.ts +0 -23
- package/dist/core/DisTubeOptions.d.ts.map +0 -1
- package/dist/core/DisTubeOptions.js +0 -90
- package/dist/core/DisTubeOptions.js.map +0 -1
- package/dist/core/DisTubeStream.d.ts +0 -19
- package/dist/core/DisTubeStream.d.ts.map +0 -1
- package/dist/core/DisTubeStream.js +0 -72
- package/dist/core/DisTubeStream.js.map +0 -1
- package/dist/core/index.d.ts +0 -7
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -19
- package/dist/core/index.js.map +0 -1
- package/dist/core/manager/BaseManager.d.ts +0 -7
- package/dist/core/manager/BaseManager.d.ts.map +0 -1
- package/dist/core/manager/BaseManager.js +0 -16
- package/dist/core/manager/BaseManager.js.map +0 -1
- package/dist/core/manager/FilterManager.d.ts +0 -16
- package/dist/core/manager/FilterManager.d.ts.map +0 -1
- package/dist/core/manager/FilterManager.js +0 -88
- package/dist/core/manager/FilterManager.js.map +0 -1
- package/dist/core/manager/GuildIdManager.d.ts +0 -9
- package/dist/core/manager/GuildIdManager.d.ts.map +0 -1
- package/dist/core/manager/GuildIdManager.js +0 -25
- package/dist/core/manager/GuildIdManager.js.map +0 -1
- package/dist/core/manager/QueueManager.d.ts +0 -11
- package/dist/core/manager/QueueManager.d.ts.map +0 -1
- package/dist/core/manager/QueueManager.js +0 -172
- package/dist/core/manager/QueueManager.js.map +0 -1
- package/dist/core/manager/index.d.ts +0 -5
- package/dist/core/manager/index.d.ts.map +0 -1
- package/dist/core/manager/index.js +0 -17
- package/dist/core/manager/index.js.map +0 -1
- package/dist/core/voice/DisTubeVoice.d.ts +0 -32
- package/dist/core/voice/DisTubeVoice.d.ts.map +0 -1
- package/dist/core/voice/DisTubeVoice.js +0 -190
- package/dist/core/voice/DisTubeVoice.js.map +0 -1
- package/dist/core/voice/DisTubeVoiceManager.d.ts +0 -10
- package/dist/core/voice/DisTubeVoiceManager.d.ts.map +0 -1
- package/dist/core/voice/DisTubeVoiceManager.js +0 -36
- package/dist/core/voice/DisTubeVoiceManager.js.map +0 -1
- package/dist/core/voice/index.d.ts +0 -3
- package/dist/core/voice/index.d.ts.map +0 -1
- package/dist/core/voice/index.js +0 -15
- package/dist/core/voice/index.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/plugin/http.d.ts +0 -10
- package/dist/plugin/http.d.ts.map +0 -1
- package/dist/plugin/http.js +0 -18
- package/dist/plugin/http.js.map +0 -1
- package/dist/plugin/https.d.ts +0 -19
- package/dist/plugin/https.d.ts.map +0 -1
- package/dist/plugin/https.js +0 -47
- package/dist/plugin/https.js.map +0 -1
- package/dist/plugin/index.d.ts +0 -3
- package/dist/plugin/index.d.ts.map +0 -1
- package/dist/plugin/index.js +0 -15
- package/dist/plugin/index.js.map +0 -1
- package/dist/struct/CustomPlugin.d.ts +0 -10
- package/dist/struct/CustomPlugin.d.ts.map +0 -1
- package/dist/struct/CustomPlugin.js +0 -16
- package/dist/struct/CustomPlugin.js.map +0 -1
- package/dist/struct/DisTubeError.d.ts +0 -55
- package/dist/struct/DisTubeError.d.ts.map +0 -1
- package/dist/struct/DisTubeError.js +0 -64
- package/dist/struct/DisTubeError.js.map +0 -1
- package/dist/struct/ExtractorPlugin.d.ts +0 -13
- package/dist/struct/ExtractorPlugin.d.ts.map +0 -1
- package/dist/struct/ExtractorPlugin.js +0 -16
- package/dist/struct/ExtractorPlugin.js.map +0 -1
- package/dist/struct/Playlist.d.ts +0 -25
- package/dist/struct/Playlist.d.ts.map +0 -1
- package/dist/struct/Playlist.js +0 -77
- package/dist/struct/Playlist.js.map +0 -1
- package/dist/struct/Plugin.d.ts +0 -17
- package/dist/struct/Plugin.d.ts.map +0 -1
- package/dist/struct/Plugin.js +0 -37
- package/dist/struct/Plugin.js.map +0 -1
- package/dist/struct/Queue.d.ts +0 -49
- package/dist/struct/Queue.d.ts.map +0 -1
- package/dist/struct/Queue.js +0 -272
- package/dist/struct/Queue.js.map +0 -1
- package/dist/struct/SearchResult.d.ts +0 -19
- package/dist/struct/SearchResult.d.ts.map +0 -1
- package/dist/struct/SearchResult.js +0 -30
- package/dist/struct/SearchResult.js.map +0 -1
- package/dist/struct/Song.d.ts +0 -43
- package/dist/struct/Song.d.ts.map +0 -1
- package/dist/struct/Song.js +0 -138
- package/dist/struct/Song.js.map +0 -1
- package/dist/struct/TaskQueue.d.ts +0 -8
- package/dist/struct/TaskQueue.d.ts.map +0 -1
- package/dist/struct/TaskQueue.js +0 -39
- package/dist/struct/TaskQueue.js.map +0 -1
- package/dist/struct/index.d.ts +0 -10
- package/dist/struct/index.d.ts.map +0 -1
- package/dist/struct/index.js +0 -22
- package/dist/struct/index.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/type.d.ts +0 -104
- package/dist/type.d.ts.map +0 -1
- package/dist/type.js +0 -3
- package/dist/type.js.map +0 -1
- package/dist/util.d.ts +0 -22
- package/dist/util.d.ts.map +0 -1
- package/dist/util.js +0 -189
- package/dist/util.js.map +0 -1
|
@@ -1,230 +0,0 @@
|
|
|
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.DisTubeHandler = void 0;
|
|
7
|
-
const ytdl_core_1 = __importDefault(require("@distube/ytdl-core"));
|
|
8
|
-
const ytpl_1 = __importDefault(require("@distube/ytpl"));
|
|
9
|
-
const _1 = require(".");
|
|
10
|
-
const __1 = require("..");
|
|
11
|
-
const util_1 = require("../util");
|
|
12
|
-
class DisTubeHandler extends _1.DisTubeBase {
|
|
13
|
-
constructor(distube) {
|
|
14
|
-
super(distube);
|
|
15
|
-
if (this.options.youtubeCookie) {
|
|
16
|
-
const requestOptions = {
|
|
17
|
-
headers: {
|
|
18
|
-
cookie: this.options.youtubeCookie,
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
if (this.options.youtubeIdentityToken) {
|
|
22
|
-
requestOptions.headers["x-youtube-identity-token"] = this.options.youtubeIdentityToken;
|
|
23
|
-
}
|
|
24
|
-
Object.assign(this.ytdlOptions, { requestOptions });
|
|
25
|
-
}
|
|
26
|
-
const client = this.client;
|
|
27
|
-
if (this.options.leaveOnEmpty) {
|
|
28
|
-
client.on("voiceStateUpdate", oldState => {
|
|
29
|
-
if (!oldState?.channel)
|
|
30
|
-
return;
|
|
31
|
-
const queue = this.queues.get(oldState);
|
|
32
|
-
if (!queue) {
|
|
33
|
-
if ((0, __1.isVoiceChannelEmpty)(oldState)) {
|
|
34
|
-
setTimeout(() => {
|
|
35
|
-
if (!this.queues.get(oldState) && (0, __1.isVoiceChannelEmpty)(oldState))
|
|
36
|
-
this.voices.leave(oldState);
|
|
37
|
-
}, this.options.emptyCooldown * 1e3).unref();
|
|
38
|
-
}
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
if (queue._emptyTimeout) {
|
|
42
|
-
clearTimeout(queue._emptyTimeout);
|
|
43
|
-
delete queue._emptyTimeout;
|
|
44
|
-
}
|
|
45
|
-
if ((0, __1.isVoiceChannelEmpty)(oldState)) {
|
|
46
|
-
queue._emptyTimeout = setTimeout(() => {
|
|
47
|
-
delete queue._emptyTimeout;
|
|
48
|
-
if ((0, __1.isVoiceChannelEmpty)(oldState)) {
|
|
49
|
-
queue.voice.leave();
|
|
50
|
-
this.emit("empty", queue);
|
|
51
|
-
if (queue.stopped)
|
|
52
|
-
queue.remove();
|
|
53
|
-
}
|
|
54
|
-
}, this.options.emptyCooldown * 1e3).unref();
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
get ytdlOptions() {
|
|
60
|
-
return this.options.ytdlOptions;
|
|
61
|
-
}
|
|
62
|
-
getYouTubeInfo(url, basic = false) {
|
|
63
|
-
if (basic)
|
|
64
|
-
return ytdl_core_1.default.getBasicInfo(url, this.ytdlOptions);
|
|
65
|
-
return ytdl_core_1.default.getInfo(url, this.ytdlOptions);
|
|
66
|
-
}
|
|
67
|
-
async resolveSong(song, options = {}) {
|
|
68
|
-
if (song instanceof __1.Song || song instanceof __1.Playlist) {
|
|
69
|
-
if ("metadata" in options)
|
|
70
|
-
song.metadata = options.metadata;
|
|
71
|
-
if ("member" in options)
|
|
72
|
-
song.member = options.member;
|
|
73
|
-
return song;
|
|
74
|
-
}
|
|
75
|
-
if (song instanceof __1.SearchResult) {
|
|
76
|
-
if (song.type === "video")
|
|
77
|
-
return new __1.Song(song, options);
|
|
78
|
-
return this.resolvePlaylist(song.url, options);
|
|
79
|
-
}
|
|
80
|
-
if ((0, util_1.isObject)(song))
|
|
81
|
-
return new __1.Song(song, options);
|
|
82
|
-
if (ytdl_core_1.default.validateURL(song))
|
|
83
|
-
return new __1.Song(await this.getYouTubeInfo(song), options);
|
|
84
|
-
if ((0, __1.isURL)(song)) {
|
|
85
|
-
for (const plugin of this.distube.extractorPlugins) {
|
|
86
|
-
if (await plugin.validate(song))
|
|
87
|
-
return plugin.resolve(song, options);
|
|
88
|
-
}
|
|
89
|
-
throw new __1.DisTubeError("NOT_SUPPORTED_URL");
|
|
90
|
-
}
|
|
91
|
-
throw new __1.DisTubeError("CANNOT_RESOLVE_SONG", song);
|
|
92
|
-
}
|
|
93
|
-
async resolvePlaylist(playlist, options = {}) {
|
|
94
|
-
const { member, source, metadata } = { source: "youtube", ...options };
|
|
95
|
-
if (playlist instanceof __1.Playlist) {
|
|
96
|
-
if (metadata)
|
|
97
|
-
playlist._patchMetadata(metadata);
|
|
98
|
-
if (member)
|
|
99
|
-
playlist._patchMember(member);
|
|
100
|
-
return playlist;
|
|
101
|
-
}
|
|
102
|
-
let solvablePlaylist;
|
|
103
|
-
if (typeof playlist === "string") {
|
|
104
|
-
solvablePlaylist = await (0, ytpl_1.default)(playlist, { limit: Infinity });
|
|
105
|
-
solvablePlaylist.items = solvablePlaylist.items
|
|
106
|
-
.filter(v => !v.thumbnail.includes("no_thumbnail"))
|
|
107
|
-
.map(v => new __1.Song(v, { member, metadata }));
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
solvablePlaylist = playlist;
|
|
111
|
-
}
|
|
112
|
-
return new __1.Playlist(solvablePlaylist, { member, properties: { source }, metadata });
|
|
113
|
-
}
|
|
114
|
-
async handlePlaylist(voice, playlist, options = {}) {
|
|
115
|
-
const { textChannel, skip, unshift } = { skip: false, unshift: false, ...options };
|
|
116
|
-
let position = Number(options.position);
|
|
117
|
-
if (!position) {
|
|
118
|
-
if (skip && position !== 0)
|
|
119
|
-
position = 1;
|
|
120
|
-
else
|
|
121
|
-
position = 0;
|
|
122
|
-
}
|
|
123
|
-
if (unshift)
|
|
124
|
-
position = 1;
|
|
125
|
-
if (!(playlist instanceof __1.Playlist))
|
|
126
|
-
throw new __1.DisTubeError("INVALID_TYPE", "Playlist", playlist, "playlist");
|
|
127
|
-
if (!this.options.nsfw && !textChannel?.nsfw) {
|
|
128
|
-
playlist.songs = playlist.songs.filter(s => !s.age_restricted);
|
|
129
|
-
}
|
|
130
|
-
if (!playlist.songs.length) {
|
|
131
|
-
if (!this.options.nsfw && !textChannel?.nsfw)
|
|
132
|
-
throw new __1.DisTubeError("EMPTY_FILTERED_PLAYLIST");
|
|
133
|
-
throw new __1.DisTubeError("EMPTY_PLAYLIST");
|
|
134
|
-
}
|
|
135
|
-
const songs = playlist.songs;
|
|
136
|
-
const queue = this.queues.get(voice);
|
|
137
|
-
if (queue) {
|
|
138
|
-
queue.addToQueue(songs, position);
|
|
139
|
-
if (skip)
|
|
140
|
-
queue.skip();
|
|
141
|
-
else
|
|
142
|
-
this.emit("addList", queue, playlist);
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
const newQueue = await this.queues.create(voice, songs, textChannel);
|
|
146
|
-
if (newQueue instanceof __1.Queue) {
|
|
147
|
-
if (this.options.emitAddListWhenCreatingQueue)
|
|
148
|
-
this.emit("addList", newQueue, playlist);
|
|
149
|
-
this.emit("playSong", newQueue, newQueue.songs[0]);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
async searchSong(message, query) {
|
|
154
|
-
if (!(0, __1.isMessageInstance)(message))
|
|
155
|
-
throw new __1.DisTubeError("INVALID_TYPE", "Discord.Message", message, "message");
|
|
156
|
-
if (typeof query !== "string")
|
|
157
|
-
throw new __1.DisTubeError("INVALID_TYPE", "string", query, "query");
|
|
158
|
-
if (query.length === 0)
|
|
159
|
-
throw new __1.DisTubeError("EMPTY_STRING", "query");
|
|
160
|
-
const limit = this.options.searchSongs > 1 ? this.options.searchSongs : 1;
|
|
161
|
-
const results = await this.distube
|
|
162
|
-
.search(query, {
|
|
163
|
-
limit,
|
|
164
|
-
safeSearch: this.options.nsfw ? false : !message.channel?.nsfw,
|
|
165
|
-
})
|
|
166
|
-
.catch(() => {
|
|
167
|
-
if (!this.emit("searchNoResult", message, query)) {
|
|
168
|
-
console.warn("searchNoResult event does not have any listeners! Emits `error` event instead.");
|
|
169
|
-
throw new __1.DisTubeError("NO_RESULT");
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
if (!results)
|
|
173
|
-
return null;
|
|
174
|
-
return this.createSearchMessageCollector(message, results, query);
|
|
175
|
-
}
|
|
176
|
-
async createSearchMessageCollector(message, results, query) {
|
|
177
|
-
if (!(0, __1.isMessageInstance)(message))
|
|
178
|
-
throw new __1.DisTubeError("INVALID_TYPE", "Discord.Message", message, "message");
|
|
179
|
-
if (!Array.isArray(results) || results.length == 0) {
|
|
180
|
-
throw new __1.DisTubeError("INVALID_TYPE", "Array<SearchResult|Song|Playlist>", results, "results");
|
|
181
|
-
}
|
|
182
|
-
if (this.options.searchSongs > 1) {
|
|
183
|
-
const searchEvents = [
|
|
184
|
-
"searchNoResult",
|
|
185
|
-
"searchResult",
|
|
186
|
-
"searchCancel",
|
|
187
|
-
"searchInvalidAnswer",
|
|
188
|
-
"searchDone",
|
|
189
|
-
];
|
|
190
|
-
for (const evn of searchEvents) {
|
|
191
|
-
if (this.distube.listenerCount(evn) === 0) {
|
|
192
|
-
console.warn(`"searchSongs" option is disabled due to missing "${evn}" listener.`);
|
|
193
|
-
console.warn(`If you don't want to use "${evn}" event, simply add an empty listener (not recommended):\n` +
|
|
194
|
-
`<DisTube>.on("${evn}", () => {})`);
|
|
195
|
-
this.options.searchSongs = 0;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
const limit = this.options.searchSongs > 1 ? this.options.searchSongs : 1;
|
|
200
|
-
let result = results[0];
|
|
201
|
-
if (limit > 1) {
|
|
202
|
-
results.splice(limit);
|
|
203
|
-
this.emit("searchResult", message, results, query);
|
|
204
|
-
const c = message.channel;
|
|
205
|
-
const answers = await c
|
|
206
|
-
.awaitMessages({
|
|
207
|
-
filter: (m) => m.author.id === message.author.id,
|
|
208
|
-
max: 1,
|
|
209
|
-
time: this.options.searchCooldown * 1e3,
|
|
210
|
-
errors: ["time"],
|
|
211
|
-
})
|
|
212
|
-
.catch(() => undefined);
|
|
213
|
-
const ans = answers?.first();
|
|
214
|
-
if (!ans) {
|
|
215
|
-
this.emit("searchCancel", message, query);
|
|
216
|
-
return null;
|
|
217
|
-
}
|
|
218
|
-
const index = parseInt(ans.content, 10);
|
|
219
|
-
if (isNaN(index) || index > results.length || index < 1) {
|
|
220
|
-
this.emit("searchInvalidAnswer", message, ans, query);
|
|
221
|
-
return null;
|
|
222
|
-
}
|
|
223
|
-
this.emit("searchDone", message, ans, query);
|
|
224
|
-
result = results[index - 1];
|
|
225
|
-
}
|
|
226
|
-
return result;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
exports.DisTubeHandler = DisTubeHandler;
|
|
230
|
-
//# sourceMappingURL=DisTubeHandler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DisTubeHandler.js","sourceRoot":"","sources":["../../src/core/DisTubeHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import ytdl from \"@distube/ytdl-core\";\nimport ytpl from \"@distube/ytpl\";\nimport { DisTubeBase } from \".\";\nimport { DisTubeError, Playlist, Queue, SearchResult, Song, isMessageInstance, isURL, isVoiceChannelEmpty } from \"..\";\nimport type { DisTube, OtherSongInfo } from \"..\";\nimport type { GuildMember, GuildTextBasedChannel, Message, TextChannel, VoiceBasedChannel } from \"discord.js\";\nimport { isObject } from \"../util\";\n/**\n * DisTube's Handler\n * @extends DisTubeBase\n * @private\n */\nexport class DisTubeHandler extends DisTubeBase {\n constructor(distube: DisTube) {\n super(distube);\n\n if (this.options.youtubeCookie) {\n const requestOptions: any = {\n headers: {\n cookie: this.options.youtubeCookie,\n },\n };\n if (this.options.youtubeIdentityToken) {\n requestOptions.headers[\"x-youtube-identity-token\"] = this.options.youtubeIdentityToken;\n }\n Object.assign(this.ytdlOptions, { requestOptions });\n }\n\n const client = this.client;\n if (this.options.leaveOnEmpty) {\n client.on(\"voiceStateUpdate\", oldState => {\n if (!oldState?.channel) return;\n const queue = this.queues.get(oldState);\n if (!queue) {\n if (isVoiceChannelEmpty(oldState)) {\n setTimeout(() => {\n if (!this.queues.get(oldState) && isVoiceChannelEmpty(oldState)) this.voices.leave(oldState);\n }, this.options.emptyCooldown * 1e3).unref();\n }\n return;\n }\n if (queue._emptyTimeout) {\n clearTimeout(queue._emptyTimeout);\n delete queue._emptyTimeout;\n }\n if (isVoiceChannelEmpty(oldState)) {\n queue._emptyTimeout = setTimeout(() => {\n delete queue._emptyTimeout;\n if (isVoiceChannelEmpty(oldState)) {\n queue.voice.leave();\n this.emit(\"empty\", queue);\n if (queue.stopped) queue.remove();\n }\n }, this.options.emptyCooldown * 1e3).unref();\n }\n });\n }\n }\n\n get ytdlOptions() {\n return this.options.ytdlOptions;\n }\n\n /**\n * @param {string} url url\n * @param {boolean} [basic=false] getBasicInfo?\n * @returns {Promise<ytdl.videoInfo>}\n */\n getYouTubeInfo(url: string, basic = false): Promise<ytdl.videoInfo> {\n if (basic) return ytdl.getBasicInfo(url, this.ytdlOptions);\n return ytdl.getInfo(url, this.ytdlOptions);\n }\n\n /**\n * Resolve a Song\n * @param {string|Song|SearchResult|Playlist} song URL | Search string | {@link Song}\n * @param {Object} [options] Optional options\n * @param {Discord.GuildMember} [options.member] Requested user\n * @param {*} [options.metadata] Metadata\n * @returns {Promise<Song|Playlist|null>} Resolved\n */\n async resolveSong(\n song: string | ytdl.videoInfo | Song | Playlist | SearchResult | OtherSongInfo | ytdl.relatedVideo,\n options: {\n member?: GuildMember;\n metadata?: any;\n } = {},\n ): Promise<Song | Playlist> {\n if (song instanceof Song || song instanceof Playlist) {\n if (\"metadata\" in options) song.metadata = options.metadata;\n if (\"member\" in options) song.member = options.member;\n return song;\n }\n if (song instanceof SearchResult) {\n if (song.type === \"video\") return new Song(song, options);\n return this.resolvePlaylist(song.url, options);\n }\n if (isObject(song)) return new Song(song, options);\n if (ytdl.validateURL(song)) return new Song(await this.getYouTubeInfo(song), options);\n if (isURL(song)) {\n for (const plugin of this.distube.extractorPlugins) {\n if (await plugin.validate(song)) return plugin.resolve(song, options);\n }\n throw new DisTubeError(\"NOT_SUPPORTED_URL\");\n }\n throw new DisTubeError(\"CANNOT_RESOLVE_SONG\", song);\n }\n\n /**\n * Resolve Song[] or url to a Playlist\n * @param {Playlist|Song[]|string} playlist Resolvable playlist\n * @param {Object} options Optional options\n * @param {Discord.GuildMember} [options.member] Requested user\n * @param {string} [options.source=\"youtube\"] Playlist source\n * @param {*} [options.metadata] Metadata\n * @returns {Promise<Playlist>}\n */\n async resolvePlaylist(\n playlist: Playlist | Song[] | string,\n options: {\n member?: GuildMember;\n source?: string;\n metadata?: any;\n } = {},\n ): Promise<Playlist> {\n const { member, source, metadata } = { source: \"youtube\", ...options };\n if (playlist instanceof Playlist) {\n if (metadata) playlist._patchMetadata(metadata);\n if (member) playlist._patchMember(member);\n return playlist;\n }\n let solvablePlaylist: Song[] | ytpl.result;\n if (typeof playlist === \"string\") {\n solvablePlaylist = await ytpl(playlist, { limit: Infinity });\n (solvablePlaylist as any).items = solvablePlaylist.items\n .filter(v => !v.thumbnail.includes(\"no_thumbnail\"))\n .map(v => new Song(v as OtherSongInfo, { member, metadata }));\n } else {\n solvablePlaylist = playlist;\n }\n return new Playlist(solvablePlaylist, { member, properties: { source }, metadata });\n }\n\n /**\n * Play / add a playlist\n * @returns {Promise<void>}\n * @param {Discord.BaseGuildVoiceChannel} voice A voice channel\n * @param {Playlist|string} playlist A YouTube playlist url | a Playlist\n * @param {Object} [options] Optional options\n * @param {Discord.BaseGuildTextChannel} [options.textChannel] The default text channel of the queue\n * @param {boolean} [options.skip=false] Skip the playing song (if exists) and play the added playlist instantly\n * @param {boolean} [options.unshift=false] Add the playlist after the playing song if exists\n */\n async handlePlaylist(\n voice: VoiceBasedChannel,\n playlist: Playlist,\n options: {\n textChannel?: GuildTextBasedChannel;\n skip?: boolean;\n position?: number;\n } = {},\n ): Promise<void> {\n const { textChannel, skip, unshift } = { skip: false, unshift: false, ...options };\n\n let position = Number(options.position);\n if (!position) {\n if (skip && position !== 0) position = 1;\n else position = 0;\n }\n if (unshift) position = 1;\n\n if (!(playlist instanceof Playlist)) throw new DisTubeError(\"INVALID_TYPE\", \"Playlist\", playlist, \"playlist\");\n if (!this.options.nsfw && !(textChannel as TextChannel)?.nsfw) {\n playlist.songs = playlist.songs.filter(s => !s.age_restricted);\n }\n if (!playlist.songs.length) {\n if (!this.options.nsfw && !(textChannel as TextChannel)?.nsfw) throw new DisTubeError(\"EMPTY_FILTERED_PLAYLIST\");\n throw new DisTubeError(\"EMPTY_PLAYLIST\");\n }\n const songs = playlist.songs;\n const queue = this.queues.get(voice);\n if (queue) {\n queue.addToQueue(songs, position);\n if (skip) queue.skip();\n else this.emit(\"addList\", queue, playlist);\n } else {\n const newQueue = await this.queues.create(voice, songs, textChannel);\n if (newQueue instanceof Queue) {\n if (this.options.emitAddListWhenCreatingQueue) this.emit(\"addList\", newQueue, playlist);\n this.emit(\"playSong\", newQueue, newQueue.songs[0]);\n }\n }\n }\n\n /**\n * Search for a song, fire {@link DisTube#event:error} if not found.\n * @param {Discord.Message} message The original message from an user\n * @param {string} query The query string\n * @returns {Promise<SearchResult?>} Song info\n */\n async searchSong(message: Message<true>, query: string): Promise<SearchResult | null> {\n if (!isMessageInstance(message)) throw new DisTubeError(\"INVALID_TYPE\", \"Discord.Message\", message, \"message\");\n if (typeof query !== \"string\") throw new DisTubeError(\"INVALID_TYPE\", \"string\", query, \"query\");\n if (query.length === 0) throw new DisTubeError(\"EMPTY_STRING\", \"query\");\n const limit = this.options.searchSongs > 1 ? this.options.searchSongs : 1;\n const results = await this.distube\n .search(query, {\n limit,\n safeSearch: this.options.nsfw ? false : !(message.channel as TextChannel)?.nsfw,\n })\n .catch(() => {\n if (!this.emit(\"searchNoResult\", message, query)) {\n // eslint-disable-next-line no-console\n console.warn(\"searchNoResult event does not have any listeners! Emits `error` event instead.\");\n throw new DisTubeError(\"NO_RESULT\");\n }\n });\n if (!results) return null;\n return this.createSearchMessageCollector(message, results, query);\n }\n\n /**\n * Create a message collector for selecting search results.\n *\n * Needed events: {@link DisTube#event:searchResult}, {@link DisTube#event:searchCancel},\n * {@link DisTube#event:searchInvalidAnswer}, {@link DisTube#event:searchDone}.\n * @param {Discord.Message} message The original message from an user\n * @param {Array<SearchResult|Song|Playlist>} results The search results\n * @param {string?} [query] The query string\n * @returns {Promise<SearchResult|Song|Playlist|null>} Selected result\n */\n async createSearchMessageCollector<R extends SearchResult | Song | Playlist>(\n message: Message<true>,\n results: Array<R>,\n query?: string,\n ): Promise<R | null> {\n if (!isMessageInstance(message)) throw new DisTubeError(\"INVALID_TYPE\", \"Discord.Message\", message, \"message\");\n if (!Array.isArray(results) || results.length == 0) {\n throw new DisTubeError(\"INVALID_TYPE\", \"Array<SearchResult|Song|Playlist>\", results, \"results\");\n }\n if (this.options.searchSongs > 1) {\n const searchEvents = [\n \"searchNoResult\",\n \"searchResult\",\n \"searchCancel\",\n \"searchInvalidAnswer\",\n \"searchDone\",\n ] as const;\n for (const evn of searchEvents) {\n if (this.distube.listenerCount(evn) === 0) {\n /* eslint-disable no-console */\n console.warn(`\"searchSongs\" option is disabled due to missing \"${evn}\" listener.`);\n console.warn(\n `If you don't want to use \"${evn}\" event, simply add an empty listener (not recommended):\\n` +\n `<DisTube>.on(\"${evn}\", () => {})`,\n );\n /* eslint-enable no-console */\n this.options.searchSongs = 0;\n }\n }\n }\n const limit = this.options.searchSongs > 1 ? this.options.searchSongs : 1;\n let result = results[0];\n if (limit > 1) {\n results.splice(limit);\n this.emit(\"searchResult\", message, results, query);\n const c = message.channel;\n const answers = await c\n .awaitMessages({\n filter: (m: Message) => m.author.id === message.author.id,\n max: 1,\n time: this.options.searchCooldown * 1e3,\n errors: [\"time\"],\n })\n .catch(() => undefined);\n const ans = answers?.first();\n if (!ans) {\n this.emit(\"searchCancel\", message, query);\n return null;\n }\n const index = parseInt(ans.content, 10);\n if (isNaN(index) || index > results.length || index < 1) {\n this.emit(\"searchInvalidAnswer\", message, ans, query);\n return null;\n }\n this.emit(\"searchDone\", message, ans, query);\n result = results[index - 1];\n }\n return result;\n }\n}\n"]}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type ytdl from "@distube/ytdl-core";
|
|
2
|
-
import type { CustomPlugin, DisTubeOptions, ExtractorPlugin, Filters } from "..";
|
|
3
|
-
export declare class Options {
|
|
4
|
-
#private;
|
|
5
|
-
plugins: (CustomPlugin | ExtractorPlugin)[];
|
|
6
|
-
emitNewSongOnly: boolean;
|
|
7
|
-
leaveOnFinish: boolean;
|
|
8
|
-
leaveOnStop: boolean;
|
|
9
|
-
leaveOnEmpty: boolean;
|
|
10
|
-
emptyCooldown: number;
|
|
11
|
-
savePreviousSongs: boolean;
|
|
12
|
-
searchSongs: number;
|
|
13
|
-
searchCooldown: number;
|
|
14
|
-
youtubeCookie?: string;
|
|
15
|
-
youtubeIdentityToken?: string;
|
|
16
|
-
customFilters?: Filters;
|
|
17
|
-
ytdlOptions: ytdl.getInfoOptions;
|
|
18
|
-
nsfw: boolean;
|
|
19
|
-
emitAddSongWhenCreatingQueue: boolean;
|
|
20
|
-
emitAddListWhenCreatingQueue: boolean;
|
|
21
|
-
constructor(options: DisTubeOptions);
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=DisTubeOptions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DisTubeOptions.d.ts","sourceRoot":"","sources":["../../src/core/DisTubeOptions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAEjF,qBAAa,OAAO;;IAClB,OAAO,EAAE,CAAC,YAAY,GAAG,eAAe,CAAC,EAAE,CAAC;IAC5C,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,4BAA4B,EAAE,OAAO,CAAC;IACtC,4BAA4B,EAAE,OAAO,CAAC;gBAC1B,OAAO,EAAE,cAAc;CA6FpC"}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
-
};
|
|
7
|
-
var _Options_instances, _Options_validateOptions;
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.Options = void 0;
|
|
10
|
-
const __1 = require("..");
|
|
11
|
-
class Options {
|
|
12
|
-
constructor(options) {
|
|
13
|
-
_Options_instances.add(this);
|
|
14
|
-
if (typeof options !== "object" || Array.isArray(options)) {
|
|
15
|
-
throw new __1.DisTubeError("INVALID_TYPE", "object", options, "DisTubeOptions");
|
|
16
|
-
}
|
|
17
|
-
const opts = { ...__1.defaultOptions, ...options };
|
|
18
|
-
this.plugins = opts.plugins;
|
|
19
|
-
this.emitNewSongOnly = opts.emitNewSongOnly;
|
|
20
|
-
this.leaveOnEmpty = opts.leaveOnEmpty;
|
|
21
|
-
this.leaveOnFinish = opts.leaveOnFinish;
|
|
22
|
-
this.leaveOnStop = opts.leaveOnStop;
|
|
23
|
-
this.savePreviousSongs = opts.savePreviousSongs;
|
|
24
|
-
this.searchSongs = opts.searchSongs;
|
|
25
|
-
this.youtubeCookie = opts.youtubeCookie;
|
|
26
|
-
this.youtubeIdentityToken = opts.youtubeIdentityToken;
|
|
27
|
-
this.customFilters = opts.customFilters;
|
|
28
|
-
this.ytdlOptions = opts.ytdlOptions;
|
|
29
|
-
this.searchCooldown = opts.searchCooldown;
|
|
30
|
-
this.emptyCooldown = opts.emptyCooldown;
|
|
31
|
-
this.nsfw = opts.nsfw;
|
|
32
|
-
this.emitAddSongWhenCreatingQueue = opts.emitAddSongWhenCreatingQueue;
|
|
33
|
-
this.emitAddListWhenCreatingQueue = opts.emitAddListWhenCreatingQueue;
|
|
34
|
-
(0, __1.checkInvalidKey)(opts, this, "DisTubeOptions");
|
|
35
|
-
__classPrivateFieldGet(this, _Options_instances, "m", _Options_validateOptions).call(this);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
exports.Options = Options;
|
|
39
|
-
_Options_instances = new WeakSet(), _Options_validateOptions = function _Options_validateOptions(options = this) {
|
|
40
|
-
if (typeof options.emitNewSongOnly !== "boolean") {
|
|
41
|
-
throw new __1.DisTubeError("INVALID_TYPE", "boolean", options.emitNewSongOnly, "DisTubeOptions.emitNewSongOnly");
|
|
42
|
-
}
|
|
43
|
-
if (typeof options.leaveOnEmpty !== "boolean") {
|
|
44
|
-
throw new __1.DisTubeError("INVALID_TYPE", "boolean", options.leaveOnEmpty, "DisTubeOptions.leaveOnEmpty");
|
|
45
|
-
}
|
|
46
|
-
if (typeof options.leaveOnFinish !== "boolean") {
|
|
47
|
-
throw new __1.DisTubeError("INVALID_TYPE", "boolean", options.leaveOnFinish, "DisTubeOptions.leaveOnFinish");
|
|
48
|
-
}
|
|
49
|
-
if (typeof options.leaveOnStop !== "boolean") {
|
|
50
|
-
throw new __1.DisTubeError("INVALID_TYPE", "boolean", options.leaveOnStop, "DisTubeOptions.leaveOnStop");
|
|
51
|
-
}
|
|
52
|
-
if (typeof options.savePreviousSongs !== "boolean") {
|
|
53
|
-
throw new __1.DisTubeError("INVALID_TYPE", "boolean", options.savePreviousSongs, "DisTubeOptions.savePreviousSongs");
|
|
54
|
-
}
|
|
55
|
-
if (typeof options.youtubeCookie !== "undefined" && typeof options.youtubeCookie !== "string") {
|
|
56
|
-
throw new __1.DisTubeError("INVALID_TYPE", "string", options.youtubeCookie, "DisTubeOptions.youtubeCookie");
|
|
57
|
-
}
|
|
58
|
-
if (typeof options.youtubeIdentityToken !== "undefined" && typeof options.youtubeIdentityToken !== "string") {
|
|
59
|
-
throw new __1.DisTubeError("INVALID_TYPE", "string", options.youtubeIdentityToken, "DisTubeOptions.youtubeIdentityToken");
|
|
60
|
-
}
|
|
61
|
-
if ((typeof options.customFilters !== "undefined" && typeof options.customFilters !== "object") ||
|
|
62
|
-
Array.isArray(options.customFilters)) {
|
|
63
|
-
throw new __1.DisTubeError("INVALID_TYPE", "object", options.customFilters, "DisTubeOptions.customFilters");
|
|
64
|
-
}
|
|
65
|
-
if (typeof options.ytdlOptions !== "object" || Array.isArray(options.ytdlOptions)) {
|
|
66
|
-
throw new __1.DisTubeError("INVALID_TYPE", "object", options.ytdlOptions, "DisTubeOptions.ytdlOptions");
|
|
67
|
-
}
|
|
68
|
-
if (typeof options.searchCooldown !== "number" || isNaN(options.searchCooldown)) {
|
|
69
|
-
throw new __1.DisTubeError("INVALID_TYPE", "number", options.searchCooldown, "DisTubeOptions.searchCooldown");
|
|
70
|
-
}
|
|
71
|
-
if (typeof options.emptyCooldown !== "number" || isNaN(options.emptyCooldown)) {
|
|
72
|
-
throw new __1.DisTubeError("INVALID_TYPE", "number", options.emptyCooldown, "DisTubeOptions.emptyCooldown");
|
|
73
|
-
}
|
|
74
|
-
if (typeof options.searchSongs !== "number" || isNaN(options.searchSongs)) {
|
|
75
|
-
throw new __1.DisTubeError("INVALID_TYPE", "number", options.searchSongs, "DisTubeOptions.searchSongs");
|
|
76
|
-
}
|
|
77
|
-
if (!Array.isArray(options.plugins)) {
|
|
78
|
-
throw new __1.DisTubeError("INVALID_TYPE", "Array<Plugin>", options.plugins, "DisTubeOptions.plugins");
|
|
79
|
-
}
|
|
80
|
-
if (typeof options.nsfw !== "boolean") {
|
|
81
|
-
throw new __1.DisTubeError("INVALID_TYPE", "boolean", options.nsfw, "DisTubeOptions.nsfw");
|
|
82
|
-
}
|
|
83
|
-
if (typeof options.emitAddSongWhenCreatingQueue !== "boolean") {
|
|
84
|
-
throw new __1.DisTubeError("INVALID_TYPE", "boolean", options.emitAddSongWhenCreatingQueue, "DisTubeOptions.emitAddSongWhenCreatingQueue");
|
|
85
|
-
}
|
|
86
|
-
if (typeof options.emitAddListWhenCreatingQueue !== "boolean") {
|
|
87
|
-
throw new __1.DisTubeError("INVALID_TYPE", "boolean", options.emitAddListWhenCreatingQueue, "DisTubeOptions.emitAddListWhenCreatingQueue");
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
//# sourceMappingURL=DisTubeOptions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DisTubeOptions.js","sourceRoot":"","sources":["../../src/core/DisTubeOptions.ts"],"names":[],"mappings":"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","sourcesContent":["import { DisTubeError, checkInvalidKey, defaultOptions } from \"..\";\nimport type ytdl from \"@distube/ytdl-core\";\nimport type { CustomPlugin, DisTubeOptions, ExtractorPlugin, Filters } from \"..\";\n\nexport class Options {\n plugins: (CustomPlugin | ExtractorPlugin)[];\n emitNewSongOnly: boolean;\n leaveOnFinish: boolean;\n leaveOnStop: boolean;\n leaveOnEmpty: boolean;\n emptyCooldown: number;\n savePreviousSongs: boolean;\n searchSongs: number;\n searchCooldown: number;\n youtubeCookie?: string;\n youtubeIdentityToken?: string;\n customFilters?: Filters;\n ytdlOptions: ytdl.getInfoOptions;\n nsfw: boolean;\n emitAddSongWhenCreatingQueue: boolean;\n emitAddListWhenCreatingQueue: boolean;\n constructor(options: DisTubeOptions) {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"object\", options, \"DisTubeOptions\");\n }\n const opts = { ...defaultOptions, ...options };\n this.plugins = opts.plugins;\n this.emitNewSongOnly = opts.emitNewSongOnly;\n this.leaveOnEmpty = opts.leaveOnEmpty;\n this.leaveOnFinish = opts.leaveOnFinish;\n this.leaveOnStop = opts.leaveOnStop;\n this.savePreviousSongs = opts.savePreviousSongs;\n this.searchSongs = opts.searchSongs;\n this.youtubeCookie = opts.youtubeCookie;\n this.youtubeIdentityToken = opts.youtubeIdentityToken;\n this.customFilters = opts.customFilters;\n this.ytdlOptions = opts.ytdlOptions;\n this.searchCooldown = opts.searchCooldown;\n this.emptyCooldown = opts.emptyCooldown;\n this.nsfw = opts.nsfw;\n this.emitAddSongWhenCreatingQueue = opts.emitAddSongWhenCreatingQueue;\n this.emitAddListWhenCreatingQueue = opts.emitAddListWhenCreatingQueue;\n checkInvalidKey(opts, this, \"DisTubeOptions\");\n this.#validateOptions();\n }\n\n #validateOptions(options = this) {\n if (typeof options.emitNewSongOnly !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", options.emitNewSongOnly, \"DisTubeOptions.emitNewSongOnly\");\n }\n if (typeof options.leaveOnEmpty !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", options.leaveOnEmpty, \"DisTubeOptions.leaveOnEmpty\");\n }\n if (typeof options.leaveOnFinish !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", options.leaveOnFinish, \"DisTubeOptions.leaveOnFinish\");\n }\n if (typeof options.leaveOnStop !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", options.leaveOnStop, \"DisTubeOptions.leaveOnStop\");\n }\n if (typeof options.savePreviousSongs !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", options.savePreviousSongs, \"DisTubeOptions.savePreviousSongs\");\n }\n if (typeof options.youtubeCookie !== \"undefined\" && typeof options.youtubeCookie !== \"string\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"string\", options.youtubeCookie, \"DisTubeOptions.youtubeCookie\");\n }\n if (typeof options.youtubeIdentityToken !== \"undefined\" && typeof options.youtubeIdentityToken !== \"string\") {\n throw new DisTubeError(\n \"INVALID_TYPE\",\n \"string\",\n options.youtubeIdentityToken,\n \"DisTubeOptions.youtubeIdentityToken\",\n );\n }\n if (\n (typeof options.customFilters !== \"undefined\" && typeof options.customFilters !== \"object\") ||\n Array.isArray(options.customFilters)\n ) {\n throw new DisTubeError(\"INVALID_TYPE\", \"object\", options.customFilters, \"DisTubeOptions.customFilters\");\n }\n if (typeof options.ytdlOptions !== \"object\" || Array.isArray(options.ytdlOptions)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"object\", options.ytdlOptions, \"DisTubeOptions.ytdlOptions\");\n }\n if (typeof options.searchCooldown !== \"number\" || isNaN(options.searchCooldown)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"number\", options.searchCooldown, \"DisTubeOptions.searchCooldown\");\n }\n if (typeof options.emptyCooldown !== \"number\" || isNaN(options.emptyCooldown)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"number\", options.emptyCooldown, \"DisTubeOptions.emptyCooldown\");\n }\n if (typeof options.searchSongs !== \"number\" || isNaN(options.searchSongs)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"number\", options.searchSongs, \"DisTubeOptions.searchSongs\");\n }\n if (!Array.isArray(options.plugins)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"Array<Plugin>\", options.plugins, \"DisTubeOptions.plugins\");\n }\n if (typeof options.nsfw !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", options.nsfw, \"DisTubeOptions.nsfw\");\n }\n if (typeof options.emitAddSongWhenCreatingQueue !== \"boolean\") {\n throw new DisTubeError(\n \"INVALID_TYPE\",\n \"boolean\",\n options.emitAddSongWhenCreatingQueue,\n \"DisTubeOptions.emitAddSongWhenCreatingQueue\",\n );\n }\n if (typeof options.emitAddListWhenCreatingQueue !== \"boolean\") {\n throw new DisTubeError(\n \"INVALID_TYPE\",\n \"boolean\",\n options.emitAddListWhenCreatingQueue,\n \"DisTubeOptions.emitAddListWhenCreatingQueue\",\n );\n }\n }\n}\n"]}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { FFmpeg } from "prism-media";
|
|
2
|
-
import { StreamType } from "@discordjs/voice";
|
|
3
|
-
import type ytdl from "@distube/ytdl-core";
|
|
4
|
-
interface StreamOptions {
|
|
5
|
-
seek?: number;
|
|
6
|
-
ffmpegArgs?: string[];
|
|
7
|
-
isLive?: boolean;
|
|
8
|
-
}
|
|
9
|
-
export declare const chooseBestVideoFormat: (formats: ytdl.videoFormat[], isLive?: boolean) => ytdl.videoFormat;
|
|
10
|
-
export declare class DisTubeStream {
|
|
11
|
-
static YouTube(formats: ytdl.videoFormat[] | undefined, options?: StreamOptions): DisTubeStream;
|
|
12
|
-
static DirectLink(url: string, options?: StreamOptions): DisTubeStream;
|
|
13
|
-
type: StreamType.Raw;
|
|
14
|
-
stream: FFmpeg;
|
|
15
|
-
url: string;
|
|
16
|
-
constructor(url: string, options: StreamOptions);
|
|
17
|
-
}
|
|
18
|
-
export {};
|
|
19
|
-
//# sourceMappingURL=DisTubeStream.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DisTubeStream.d.ts","sourceRoot":"","sources":["../../src/core/DisTubeStream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAE3C,UAAU,aAAa;IAIrB,IAAI,CAAC,EAAE,MAAM,CAAC;IAId,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAItB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,qBAAqB,YAAa,KAAK,WAAW,EAAE,uCAOhE,CAAC;AAMF,qBAAa,aAAa;IAQxB,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,SAAS,EAAE,OAAO,GAAE,aAAkB,GAAG,aAAa;IAgBnG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,aAAa;IAS1E,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;gBAOA,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;CA2ChD"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DisTubeStream = exports.chooseBestVideoFormat = void 0;
|
|
4
|
-
const __1 = require("..");
|
|
5
|
-
const prism_media_1 = require("prism-media");
|
|
6
|
-
const struct_1 = require("../struct");
|
|
7
|
-
const voice_1 = require("@discordjs/voice");
|
|
8
|
-
const chooseBestVideoFormat = (formats, isLive = false) => {
|
|
9
|
-
let filter = (format) => format.hasAudio;
|
|
10
|
-
if (isLive)
|
|
11
|
-
filter = (format) => format.hasAudio && format.isHLS;
|
|
12
|
-
formats = formats
|
|
13
|
-
.filter(filter)
|
|
14
|
-
.sort((a, b) => Number(b.audioBitrate) - Number(a.audioBitrate) || Number(a.bitrate) - Number(b.bitrate));
|
|
15
|
-
return formats.find(format => !format.hasVideo) || formats.sort((a, b) => Number(a.bitrate) - Number(b.bitrate))[0];
|
|
16
|
-
};
|
|
17
|
-
exports.chooseBestVideoFormat = chooseBestVideoFormat;
|
|
18
|
-
class DisTubeStream {
|
|
19
|
-
constructor(url, options) {
|
|
20
|
-
this.url = url;
|
|
21
|
-
this.type = voice_1.StreamType.Raw;
|
|
22
|
-
const args = [
|
|
23
|
-
"-reconnect",
|
|
24
|
-
"1",
|
|
25
|
-
"-reconnect_streamed",
|
|
26
|
-
"1",
|
|
27
|
-
"-reconnect_delay_max",
|
|
28
|
-
"5",
|
|
29
|
-
"-i",
|
|
30
|
-
url,
|
|
31
|
-
"-analyzeduration",
|
|
32
|
-
"0",
|
|
33
|
-
"-loglevel",
|
|
34
|
-
"0",
|
|
35
|
-
"-ar",
|
|
36
|
-
"48000",
|
|
37
|
-
"-ac",
|
|
38
|
-
"2",
|
|
39
|
-
"-f",
|
|
40
|
-
"s16le",
|
|
41
|
-
];
|
|
42
|
-
if (typeof options.seek === "number" && options.seek > 0) {
|
|
43
|
-
args.unshift("-ss", options.seek.toString());
|
|
44
|
-
}
|
|
45
|
-
if (Array.isArray(options.ffmpegArgs)) {
|
|
46
|
-
args.push(...options.ffmpegArgs);
|
|
47
|
-
}
|
|
48
|
-
this.stream = new prism_media_1.FFmpeg({ args, shell: false });
|
|
49
|
-
}
|
|
50
|
-
static YouTube(formats, options = {}) {
|
|
51
|
-
if (!formats || !formats.length)
|
|
52
|
-
throw new struct_1.DisTubeError("UNAVAILABLE_VIDEO");
|
|
53
|
-
if (!options || typeof options !== "object" || Array.isArray(options)) {
|
|
54
|
-
throw new struct_1.DisTubeError("INVALID_TYPE", "object", options, "options");
|
|
55
|
-
}
|
|
56
|
-
const bestFormat = (0, exports.chooseBestVideoFormat)(formats, options.isLive);
|
|
57
|
-
if (!bestFormat)
|
|
58
|
-
throw new struct_1.DisTubeError("UNPLAYABLE_FORMATS");
|
|
59
|
-
return new DisTubeStream(bestFormat.url, options);
|
|
60
|
-
}
|
|
61
|
-
static DirectLink(url, options = {}) {
|
|
62
|
-
if (!options || typeof options !== "object" || Array.isArray(options)) {
|
|
63
|
-
throw new struct_1.DisTubeError("INVALID_TYPE", "object", options, "options");
|
|
64
|
-
}
|
|
65
|
-
if (typeof url !== "string" || !(0, __1.isURL)(url)) {
|
|
66
|
-
throw new struct_1.DisTubeError("INVALID_TYPE", "an URL", url);
|
|
67
|
-
}
|
|
68
|
-
return new DisTubeStream(url, options);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
exports.DisTubeStream = DisTubeStream;
|
|
72
|
-
//# sourceMappingURL=DisTubeStream.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DisTubeStream.js","sourceRoot":"","sources":["../../src/core/DisTubeStream.ts"],"names":[],"mappings":"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","sourcesContent":["import { isURL } from \"..\";\nimport { FFmpeg } from \"prism-media\";\nimport { DisTubeError } from \"../struct\";\nimport { StreamType } from \"@discordjs/voice\";\nimport type ytdl from \"@distube/ytdl-core\";\n\ninterface StreamOptions {\n /**\n * Time to seek in seconds\n */\n seek?: number;\n /**\n * Additional FFmpeg arguments\n */\n ffmpegArgs?: string[];\n /**\n * If the stream url is live\n */\n isLive?: boolean;\n}\n\nexport const chooseBestVideoFormat = (formats: ytdl.videoFormat[], isLive = false) => {\n let filter = (format: ytdl.videoFormat) => format.hasAudio;\n if (isLive) filter = (format: ytdl.videoFormat) => format.hasAudio && format.isHLS;\n formats = formats\n .filter(filter)\n .sort((a, b) => Number(b.audioBitrate) - Number(a.audioBitrate) || Number(a.bitrate) - Number(b.bitrate));\n return formats.find(format => !format.hasVideo) || formats.sort((a, b) => Number(a.bitrate) - Number(b.bitrate))[0];\n};\n\n/**\n * Create a stream to play with {@link DisTubeVoice}\n * @private\n */\nexport class DisTubeStream {\n /**\n * Create a stream from ytdl video formats\n * @param {ytdl.videoFormat[]} formats ytdl video formats\n * @param {StreamOptions} options options\n * @returns {DisTubeStream}\n * @private\n */\n static YouTube(formats: ytdl.videoFormat[] | undefined, options: StreamOptions = {}): DisTubeStream {\n if (!formats || !formats.length) throw new DisTubeError(\"UNAVAILABLE_VIDEO\");\n if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"object\", options, \"options\");\n }\n const bestFormat = chooseBestVideoFormat(formats, options.isLive);\n if (!bestFormat) throw new DisTubeError(\"UNPLAYABLE_FORMATS\");\n return new DisTubeStream(bestFormat.url, options);\n }\n /**\n * Create a stream from a stream url\n * @param {string} url stream url\n * @param {StreamOptions} options options\n * @returns {DisTubeStream}\n * @private\n */\n static DirectLink(url: string, options: StreamOptions = {}): DisTubeStream {\n if (!options || typeof options !== \"object\" || Array.isArray(options)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"object\", options, \"options\");\n }\n if (typeof url !== \"string\" || !isURL(url)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"an URL\", url);\n }\n return new DisTubeStream(url, options);\n }\n type: StreamType.Raw;\n stream: FFmpeg;\n url: string;\n /**\n * Create a DisTubeStream to play with {@link DisTubeVoice}\n * @param {string} url Stream URL\n * @param {StreamOptions} options Stream options\n * @private\n */\n constructor(url: string, options: StreamOptions) {\n /**\n * Stream URL\n * @type {string}\n */\n this.url = url;\n /**\n * Stream type\n * @type {DiscordVoice.StreamType.Raw}\n */\n this.type = StreamType.Raw;\n const args = [\n \"-reconnect\",\n \"1\",\n \"-reconnect_streamed\",\n \"1\",\n \"-reconnect_delay_max\",\n \"5\",\n \"-i\",\n url,\n \"-analyzeduration\",\n \"0\",\n \"-loglevel\",\n \"0\",\n \"-ar\",\n \"48000\",\n \"-ac\",\n \"2\",\n \"-f\",\n \"s16le\",\n ];\n if (typeof options.seek === \"number\" && options.seek > 0) {\n args.unshift(\"-ss\", options.seek.toString());\n }\n if (Array.isArray(options.ffmpegArgs)) {\n args.push(...options.ffmpegArgs);\n }\n /**\n * FFmpeg stream (Duplex)\n * @type {FFmpeg}\n */\n this.stream = new FFmpeg({ args, shell: false });\n }\n}\n"]}
|
package/dist/core/index.d.ts
DELETED
package/dist/core/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC"}
|
package/dist/core/index.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
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("./DisTubeOptions"), exports);
|
|
14
|
-
__exportStar(require("./DisTubeBase"), exports);
|
|
15
|
-
__exportStar(require("./DisTubeStream"), exports);
|
|
16
|
-
__exportStar(require("./manager"), exports);
|
|
17
|
-
__exportStar(require("./voice"), exports);
|
|
18
|
-
__exportStar(require("./DisTubeHandler"), exports);
|
|
19
|
-
//# sourceMappingURL=index.js.map
|
package/dist/core/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAAiC;AACjC,gDAA8B;AAC9B,kDAAgC;AAChC,4CAA0B;AAC1B,0CAAwB;AACxB,mDAAiC","sourcesContent":["export * from \"./DisTubeOptions\";\nexport * from \"./DisTubeBase\";\nexport * from \"./DisTubeStream\";\nexport * from \"./manager\";\nexport * from \"./voice\";\nexport * from \"./DisTubeHandler\";\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BaseManager.d.ts","sourceRoot":"","sources":["../../../src/core/manager/BaseManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQxC,8BAAsB,WAAW,CAAC,CAAC,CAAE,SAAQ,WAAW;IAKtD,UAAU,wBAA+B;IAMzC,IAAI,IAAI,WAEP;CACF"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BaseManager = void 0;
|
|
4
|
-
const __1 = require("..");
|
|
5
|
-
const discord_js_1 = require("discord.js");
|
|
6
|
-
class BaseManager extends __1.DisTubeBase {
|
|
7
|
-
constructor() {
|
|
8
|
-
super(...arguments);
|
|
9
|
-
this.collection = new discord_js_1.Collection();
|
|
10
|
-
}
|
|
11
|
-
get size() {
|
|
12
|
-
return this.collection.size;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
exports.BaseManager = BaseManager;
|
|
16
|
-
//# sourceMappingURL=BaseManager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BaseManager.js","sourceRoot":"","sources":["../../../src/core/manager/BaseManager.ts"],"names":[],"mappings":";;;AAAA,0BAAiC;AACjC,2CAAwC;AAQxC,MAAsB,WAAe,SAAQ,eAAW;IAAxD;;QAKE,eAAU,GAAG,IAAI,uBAAU,EAAa,CAAC;IAS3C,CAAC;IAHC,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IAC9B,CAAC;CACF;AAdD,kCAcC","sourcesContent":["import { DisTubeBase } from \"..\";\nimport { Collection } from \"discord.js\";\n\n/**\n * Manages the collection of a data model.\n * @abstract\n * @private\n * @extends DisTubeBase\n */\nexport abstract class BaseManager<V> extends DisTubeBase {\n /**\n * The collection of items for this manager.\n * @type {Discord.Collection}\n */\n collection = new Collection<string, V>();\n /**\n * The size of the collection.\n * @type {Discord.Collection}\n * @abstract\n */\n get size() {\n return this.collection.size;\n }\n}\n"]}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { BaseManager } from ".";
|
|
2
|
-
import type { DisTube, FilterResolvable, Queue } from "../..";
|
|
3
|
-
export declare class FilterManager extends BaseManager<FilterResolvable> {
|
|
4
|
-
#private;
|
|
5
|
-
queue: Queue;
|
|
6
|
-
constructor(distube: DisTube, queue: Queue);
|
|
7
|
-
add(filterOrFilters: FilterResolvable | FilterResolvable[], override?: boolean): this;
|
|
8
|
-
clear(): this;
|
|
9
|
-
set(filters: FilterResolvable[]): this;
|
|
10
|
-
remove(filterOrFilters: FilterResolvable | FilterResolvable[]): this;
|
|
11
|
-
has(filter: FilterResolvable): boolean;
|
|
12
|
-
get names(): string[];
|
|
13
|
-
get values(): string[];
|
|
14
|
-
toString(): string;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=FilterManager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FilterManager.d.ts","sourceRoot":"","sources":["../../../src/core/manager/FilterManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC;AAEhC,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAM9D,qBAAa,aAAc,SAAQ,WAAW,CAAC,gBAAgB,CAAC;;IAC9D,KAAK,EAAE,KAAK,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK;IAmC1C,GAAG,CAAC,eAAe,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,EAAE,QAAQ,UAAQ;IA2B5E,KAAK;IASL,GAAG,CAAC,OAAO,EAAE,gBAAgB,EAAE;IAe/B,MAAM,CAAC,eAAe,EAAE,gBAAgB,GAAG,gBAAgB,EAAE;IAa7D,GAAG,CAAC,MAAM,EAAE,gBAAgB;IAS5B,IAAI,KAAK,aAER;IAED,IAAI,MAAM,aAET;IAED,QAAQ;CAGT"}
|