distube 3.1.1 → 3.2.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/dist/DisTube.d.ts +38 -31
- package/dist/DisTube.d.ts.map +1 -1
- package/dist/DisTube.js +37 -26
- package/dist/DisTube.js.map +1 -1
- package/dist/constant.d.ts +5 -5
- package/dist/constant.js +5 -5
- package/dist/constant.js.map +1 -1
- package/dist/core/DisTubeHandler.js +8 -13
- package/dist/core/DisTubeHandler.js.map +1 -1
- package/dist/core/DisTubeOptions.d.ts.map +1 -1
- package/dist/core/DisTubeOptions.js +3 -0
- package/dist/core/DisTubeOptions.js.map +1 -1
- package/dist/core/manager/BaseManager.d.ts +4 -4
- package/dist/core/manager/BaseManager.js +3 -3
- package/dist/core/manager/BaseManager.js.map +1 -1
- package/dist/core/manager/QueueManager.d.ts.map +1 -1
- package/dist/core/manager/QueueManager.js +6 -4
- package/dist/core/manager/QueueManager.js.map +1 -1
- package/dist/core/voice/DJSAdapter.js +4 -7
- package/dist/core/voice/DJSAdapter.js.map +1 -1
- package/dist/core/voice/DisTubeVoice.js +4 -8
- package/dist/core/voice/DisTubeVoice.js.map +1 -1
- package/dist/core/voice/DisTubeVoiceManager.d.ts +4 -4
- package/dist/core/voice/DisTubeVoiceManager.js +3 -3
- package/dist/core/voice/DisTubeVoiceManager.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/plugin/https.js +1 -1
- package/dist/plugin/https.js.map +1 -1
- package/dist/plugin/youtube-dl.js +1 -2
- package/dist/plugin/youtube-dl.js.map +1 -1
- package/dist/struct/Playlist.js +3 -6
- package/dist/struct/Playlist.js.map +1 -1
- package/dist/struct/Plugin.d.ts +8 -1
- package/dist/struct/Plugin.d.ts.map +1 -1
- package/dist/struct/Plugin.js +9 -0
- package/dist/struct/Plugin.js.map +1 -1
- package/dist/struct/Queue.d.ts +3 -3
- package/dist/struct/Queue.d.ts.map +1 -1
- package/dist/struct/Queue.js +5 -8
- package/dist/struct/Queue.js.map +1 -1
- package/dist/struct/SearchResult.js +2 -3
- package/dist/struct/SearchResult.js.map +1 -1
- package/dist/struct/Song.d.ts +3 -3
- package/dist/struct/Song.d.ts.map +1 -1
- package/dist/struct/Song.js +35 -30
- package/dist/struct/Song.js.map +1 -1
- package/dist/struct/TaskQueue.js +1 -2
- package/dist/struct/TaskQueue.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/type.d.ts +7 -3
- package/dist/type.d.ts.map +1 -1
- package/dist/type.js.map +1 -1
- package/dist/util.d.ts +3 -2
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +23 -23
- package/dist/util.js.map +1 -1
- package/package.json +14 -14
package/dist/util.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.entersState = exports.checkInvalidKey = exports.isClientInstance = exports.resolveGuildID = exports.isGuildInstance = exports.isSupportedVoiceChannel = exports.isMessageInstance = exports.isTextChannelInstance = exports.isMemberInstance = exports.isSnowflake = exports.isVoiceChannelEmpty = exports.checkIntents = exports.isURL = exports.parseNumber = exports.toSecond = exports.formatDuration = void 0;
|
|
3
|
+
exports.entersState = exports.checkInvalidKey = exports.isClientInstance = exports.resolveGuildID = exports.resolveGuildId = exports.isGuildInstance = exports.isSupportedVoiceChannel = exports.isMessageInstance = exports.isTextChannelInstance = exports.isMemberInstance = exports.isSnowflake = exports.isVoiceChannelEmpty = exports.checkIntents = exports.isURL = exports.parseNumber = exports.toSecond = exports.formatDuration = void 0;
|
|
4
4
|
const url_1 = require("url");
|
|
5
5
|
const _1 = require(".");
|
|
6
6
|
const discord_js_1 = require("discord.js");
|
|
@@ -83,9 +83,8 @@ exports.isURL = isURL;
|
|
|
83
83
|
* @param {ClientOptions} options options
|
|
84
84
|
*/
|
|
85
85
|
function checkIntents(options) {
|
|
86
|
-
var _a, _b;
|
|
87
86
|
const requiredIntents = ["GUILD_VOICE_STATES"];
|
|
88
|
-
const bitfield =
|
|
87
|
+
const bitfield = options.intents ?? options?.ws?.intents;
|
|
89
88
|
if (typeof bitfield === "undefined")
|
|
90
89
|
return;
|
|
91
90
|
const intents = new discord_js_1.Intents(bitfield);
|
|
@@ -101,8 +100,7 @@ exports.checkIntents = checkIntents;
|
|
|
101
100
|
* @returns {boolean}
|
|
102
101
|
*/
|
|
103
102
|
function isVoiceChannelEmpty(voiceState) {
|
|
104
|
-
|
|
105
|
-
const voiceChannel = (_c = (_b = (_a = voiceState.guild) === null || _a === void 0 ? void 0 : _a.me) === null || _b === void 0 ? void 0 : _b.voice) === null || _c === void 0 ? void 0 : _c.channel;
|
|
103
|
+
const voiceChannel = voiceState.guild?.me?.voice?.channel;
|
|
106
104
|
if (!voiceChannel)
|
|
107
105
|
return false;
|
|
108
106
|
const members = voiceChannel.members.filter(m => !m.user.bot);
|
|
@@ -119,32 +117,29 @@ function isSnowflake(id) {
|
|
|
119
117
|
}
|
|
120
118
|
exports.isSnowflake = isSnowflake;
|
|
121
119
|
function isMemberInstance(member) {
|
|
122
|
-
var _a, _b;
|
|
123
120
|
return (!!member &&
|
|
124
121
|
isSnowflake(member.id) &&
|
|
125
|
-
isSnowflake(
|
|
126
|
-
isSnowflake(
|
|
122
|
+
isSnowflake(member.guild?.id) &&
|
|
123
|
+
isSnowflake(member.user?.id) &&
|
|
127
124
|
member.id === member.user.id);
|
|
128
125
|
}
|
|
129
126
|
exports.isMemberInstance = isMemberInstance;
|
|
130
127
|
function isTextChannelInstance(channel) {
|
|
131
|
-
var _a;
|
|
132
128
|
return (!!channel &&
|
|
133
129
|
isSnowflake(channel.id) &&
|
|
134
|
-
isSnowflake(
|
|
130
|
+
isSnowflake(channel.guild?.id) &&
|
|
135
131
|
typeof channel.send === "function" &&
|
|
136
132
|
typeof channel.awaitMessages === "function");
|
|
137
133
|
}
|
|
138
134
|
exports.isTextChannelInstance = isTextChannelInstance;
|
|
139
135
|
function isMessageInstance(message) {
|
|
140
|
-
var _a, _b;
|
|
141
136
|
// Simple check for using distube normally
|
|
142
137
|
return (!!message &&
|
|
143
138
|
isSnowflake(message.id) &&
|
|
144
|
-
isSnowflake(
|
|
139
|
+
isSnowflake(message.guild?.id) &&
|
|
145
140
|
isTextChannelInstance(message.channel) &&
|
|
146
141
|
isMemberInstance(message.member) &&
|
|
147
|
-
isSnowflake(
|
|
142
|
+
isSnowflake(message.author?.id) &&
|
|
148
143
|
message.member.id === message.author.id &&
|
|
149
144
|
message.guild.id === message.channel.guild.id);
|
|
150
145
|
}
|
|
@@ -153,7 +148,7 @@ function isSupportedVoiceChannel(channel) {
|
|
|
153
148
|
return (!!channel &&
|
|
154
149
|
typeof channel.joinable === "boolean" &&
|
|
155
150
|
isSnowflake(channel.id) &&
|
|
156
|
-
isSnowflake(channel.
|
|
151
|
+
isSnowflake(channel.guild?.id) &&
|
|
157
152
|
typeof channel.full === "boolean" &&
|
|
158
153
|
[
|
|
159
154
|
// Djs v12
|
|
@@ -169,22 +164,27 @@ function isGuildInstance(guild) {
|
|
|
169
164
|
return !!guild && isSnowflake(guild.id) && typeof guild.fetchAuditLogs === "function";
|
|
170
165
|
}
|
|
171
166
|
exports.isGuildInstance = isGuildInstance;
|
|
172
|
-
function
|
|
173
|
-
let
|
|
167
|
+
function resolveGuildId(resolvable) {
|
|
168
|
+
let guildId;
|
|
174
169
|
if (typeof resolvable === "string") {
|
|
175
|
-
|
|
170
|
+
guildId = resolvable;
|
|
176
171
|
}
|
|
177
172
|
else if (typeof resolvable === "object") {
|
|
178
173
|
if (resolvable instanceof _1.Queue || resolvable instanceof _1.DisTubeVoice)
|
|
179
|
-
|
|
174
|
+
guildId = resolvable.id;
|
|
180
175
|
else if ("guild" in resolvable && isGuildInstance(resolvable.guild))
|
|
181
|
-
|
|
176
|
+
guildId = resolvable.guild.id;
|
|
182
177
|
else if ("id" in resolvable && isGuildInstance(resolvable))
|
|
183
|
-
|
|
178
|
+
guildId = resolvable.id;
|
|
184
179
|
}
|
|
185
|
-
if (!isSnowflake(
|
|
186
|
-
throw new _1.DisTubeError("INVALID_TYPE", "
|
|
187
|
-
return
|
|
180
|
+
if (!isSnowflake(guildId))
|
|
181
|
+
throw new _1.DisTubeError("INVALID_TYPE", "GuildIdResolvable", resolvable);
|
|
182
|
+
return guildId;
|
|
183
|
+
}
|
|
184
|
+
exports.resolveGuildId = resolveGuildId;
|
|
185
|
+
function resolveGuildID(resolvable) {
|
|
186
|
+
process.emitWarning("resolveGuildID() is deprecated, use resolveGuildId() instead.", "DeprecationWarning");
|
|
187
|
+
return resolveGuildId(resolvable);
|
|
188
188
|
}
|
|
189
189
|
exports.resolveGuildID = resolveGuildID;
|
|
190
190
|
function isClientInstance(client) {
|
package/dist/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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","sourcesContent":["import { URL } from \"url\";\nimport { DisTubeError, DisTubeVoice, Queue } from \".\";\nimport { Intents, SnowflakeUtil } from \"discord.js\";\nimport type { GuildIDResolvable } from \".\";\nimport type { EventEmitter } from \"node:events\";\nimport type { AudioPlayer, AudioPlayerStatus, VoiceConnection, VoiceConnectionStatus } from \"@discordjs/voice\";\nimport type {\n BitFieldResolvable,\n Client,\n ClientOptions,\n Guild,\n GuildMember,\n GuildTextBasedChannel,\n IntentsString,\n Message,\n Snowflake,\n VoiceBasedChannel,\n VoiceState,\n} from \"discord.js\";\n\nconst formatInt = (int: number) => (int < 10 ? `0${int}` : int);\n\n/**\n * Format duration to string\n * @param {number} sec Duration in seconds\n * @returns {string}\n */\nexport function formatDuration(sec: number): string {\n if (!sec || !Number(sec)) return \"00:00\";\n const seconds = Math.round(sec % 60);\n const minutes = Math.floor((sec % 3600) / 60);\n const hours = Math.floor(sec / 3600);\n if (hours > 0) return `${formatInt(hours)}:${formatInt(minutes)}:${formatInt(seconds)}`;\n if (minutes > 0) return `${formatInt(minutes)}:${formatInt(seconds)}`;\n return `00:${formatInt(seconds)}`;\n}\n/**\n * Convert formatted duration to seconds\n * @param {*} input Formatted duration string\n * @returns {number}\n */\nexport function toSecond(input: any): number {\n if (!input) return 0;\n if (typeof input !== \"string\") return Number(input) || 0;\n if (input.match(/:/g)) {\n const time = input.split(\":\").reverse();\n let s = 0;\n for (let i = 0; i < 3; i++) if (time[i]) s += Number(time[i].replace(/[^\\d.]+/g, \"\")) * Math.pow(60, i);\n if (time.length > 3) s += Number(time[3].replace(/[^\\d.]+/g, \"\")) * 24 * 60 * 60;\n return s;\n } else {\n return Number(input.replace(/[^\\d.]+/g, \"\")) || 0;\n }\n}\n/**\n * Parse number from input\n * @param {*} input Any\n * @returns {number}\n */\nexport function parseNumber(input: any): number {\n if (typeof input === \"string\") return Number(input.replace(/[^\\d.]+/g, \"\")) || 0;\n return Number(input) || 0;\n}\n/**\n * Check if the string is an URL\n * @param {string} input input\n * @returns {boolean}\n */\nexport function isURL(input: any): boolean {\n if (typeof input !== \"string\" || input.includes(\" \")) return false;\n try {\n const url = new URL(input);\n if (![\"https:\", \"http:\"].includes(url.protocol) || !url.host) return false;\n } catch {\n return false;\n }\n return true;\n}\n/**\n * Check if the Client has enough intents to using DisTube\n * @param {ClientOptions} options options\n */\nexport function checkIntents(options: ClientOptions): void {\n const requiredIntents: BitFieldResolvable<IntentsString, number>[] = [\"GUILD_VOICE_STATES\"];\n const bitfield: BitFieldResolvable<IntentsString, number> = options.intents ?? (options?.ws as any)?.intents;\n if (typeof bitfield === \"undefined\") return;\n const intents = new Intents(bitfield);\n for (const intent of requiredIntents) {\n if (!intents.has(intent)) throw new DisTubeError(\"MISSING_INTENTS\", intent.toString());\n }\n}\n\n/**\n * Check if the voice channel is empty\n * @param {Discord.VoiceState} voiceState voiceState\n * @returns {boolean}\n */\nexport function isVoiceChannelEmpty(voiceState: VoiceState): boolean {\n const voiceChannel = voiceState.guild?.me?.voice?.channel;\n if (!voiceChannel) return false;\n const members = voiceChannel.members.filter(m => !m.user.bot);\n return !members.size;\n}\n\nexport function isSnowflake(id: any): id is Snowflake {\n try {\n return SnowflakeUtil.deconstruct(id).timestamp > SnowflakeUtil.EPOCH;\n } catch {\n return false;\n }\n}\n\nexport function isMemberInstance(member: any): member is GuildMember {\n return (\n !!member &&\n isSnowflake(member.id) &&\n isSnowflake(member.guild?.id) &&\n isSnowflake(member.user?.id) &&\n member.id === member.user.id\n );\n}\n\nexport function isTextChannelInstance(channel: any): channel is GuildTextBasedChannel {\n return (\n !!channel &&\n isSnowflake(channel.id) &&\n isSnowflake(channel.guild?.id) &&\n typeof channel.send === \"function\" &&\n typeof channel.awaitMessages === \"function\"\n );\n}\n\nexport function isMessageInstance(message: any): message is Message<true> {\n // Simple check for using distube normally\n return (\n !!message &&\n isSnowflake(message.id) &&\n isSnowflake(message.guild?.id) &&\n isTextChannelInstance(message.channel) &&\n isMemberInstance(message.member) &&\n isSnowflake(message.author?.id) &&\n message.member.id === message.author.id &&\n message.guild.id === message.channel.guild.id\n );\n}\n\nexport function isSupportedVoiceChannel(channel: any): channel is VoiceBasedChannel {\n return (\n !!channel &&\n typeof channel.joinable === \"boolean\" &&\n isSnowflake(channel.id) &&\n isSnowflake(channel.guildId) &&\n typeof channel.full === \"boolean\" &&\n [\n // Djs v12\n \"voice\",\n \"stage\",\n // Djs v13\n \"GUILD_VOICE\",\n \"GUILD_STAGE_VOICE\",\n ].includes(channel.type)\n );\n}\n\nexport function isGuildInstance(guild: any): guild is Guild {\n return !!guild && isSnowflake(guild.id) && typeof guild.fetchAuditLogs === \"function\";\n}\n\nexport function resolveGuildID(resolvable: GuildIDResolvable): Snowflake {\n let guildID: string | undefined;\n if (typeof resolvable === \"string\") {\n guildID = resolvable;\n } else if (typeof resolvable === \"object\") {\n if (resolvable instanceof Queue || resolvable instanceof DisTubeVoice) guildID = resolvable.id;\n else if (\"guild\" in resolvable && isGuildInstance(resolvable.guild)) guildID = resolvable.guild.id;\n else if (\"id\" in resolvable && isGuildInstance(resolvable)) guildID = resolvable.id;\n }\n if (!isSnowflake(guildID)) throw new DisTubeError(\"INVALID_TYPE\", \"GuildIDResolvable\", resolvable);\n return guildID;\n}\n\nexport function isClientInstance(client: any): client is Client {\n return !!client && typeof client.login === \"function\";\n}\n\nexport function checkInvalidKey(\n target: Record<string, any>,\n source: Record<string, any> | string[],\n sourceName: string,\n) {\n if (typeof target !== \"object\" || Array.isArray(target)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"object\", target, sourceName);\n }\n const sourceKeys = Array.isArray(source) ? source : Object.keys(source);\n const invalidKey = Object.keys(target).find(key => !sourceKeys.includes(key));\n if (invalidKey) throw new DisTubeError(\"INVALID_KEY\", sourceName, invalidKey);\n}\n\nasync function waitEvent(target: EventEmitter, status: string, maxTime: number) {\n let cleanup = () => undefined as any;\n try {\n await new Promise((resolve, reject) => {\n const timeout = setTimeout(() => reject(new Error(`Didn't trigger ${status} within ${maxTime}ms`)), maxTime);\n target.once(status, resolve);\n target.once(\"error\", reject);\n cleanup = () => {\n clearTimeout(timeout);\n target.off(status, resolve);\n target.off(\"error\", reject);\n };\n });\n return target;\n } finally {\n cleanup();\n }\n}\n\nexport async function entersState<T extends VoiceConnection | AudioPlayer>(\n target: T,\n status: T extends VoiceConnection ? VoiceConnectionStatus : AudioPlayerStatus,\n maxTime: number,\n) {\n if (target.state.status === status) return target;\n return waitEvent(target, status, maxTime) as Promise<T>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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","sourcesContent":["import { URL } from \"url\";\nimport { DisTubeError, DisTubeVoice, Queue } from \".\";\nimport { Intents, SnowflakeUtil } from \"discord.js\";\nimport type { GuildIdResolvable } from \".\";\nimport type { EventEmitter } from \"node:events\";\nimport type { AudioPlayer, AudioPlayerStatus, VoiceConnection, VoiceConnectionStatus } from \"@discordjs/voice\";\nimport type {\n BitFieldResolvable,\n Client,\n ClientOptions,\n Guild,\n GuildMember,\n GuildTextBasedChannel,\n IntentsString,\n Message,\n Snowflake,\n VoiceBasedChannel,\n VoiceState,\n} from \"discord.js\";\n\nconst formatInt = (int: number) => (int < 10 ? `0${int}` : int);\n\n/**\n * Format duration to string\n * @param {number} sec Duration in seconds\n * @returns {string}\n */\nexport function formatDuration(sec: number): string {\n if (!sec || !Number(sec)) return \"00:00\";\n const seconds = Math.round(sec % 60);\n const minutes = Math.floor((sec % 3600) / 60);\n const hours = Math.floor(sec / 3600);\n if (hours > 0) return `${formatInt(hours)}:${formatInt(minutes)}:${formatInt(seconds)}`;\n if (minutes > 0) return `${formatInt(minutes)}:${formatInt(seconds)}`;\n return `00:${formatInt(seconds)}`;\n}\n/**\n * Convert formatted duration to seconds\n * @param {*} input Formatted duration string\n * @returns {number}\n */\nexport function toSecond(input: any): number {\n if (!input) return 0;\n if (typeof input !== \"string\") return Number(input) || 0;\n if (input.match(/:/g)) {\n const time = input.split(\":\").reverse();\n let s = 0;\n for (let i = 0; i < 3; i++) if (time[i]) s += Number(time[i].replace(/[^\\d.]+/g, \"\")) * Math.pow(60, i);\n if (time.length > 3) s += Number(time[3].replace(/[^\\d.]+/g, \"\")) * 24 * 60 * 60;\n return s;\n } else {\n return Number(input.replace(/[^\\d.]+/g, \"\")) || 0;\n }\n}\n/**\n * Parse number from input\n * @param {*} input Any\n * @returns {number}\n */\nexport function parseNumber(input: any): number {\n if (typeof input === \"string\") return Number(input.replace(/[^\\d.]+/g, \"\")) || 0;\n return Number(input) || 0;\n}\n/**\n * Check if the string is an URL\n * @param {string} input input\n * @returns {boolean}\n */\nexport function isURL(input: any): boolean {\n if (typeof input !== \"string\" || input.includes(\" \")) return false;\n try {\n const url = new URL(input);\n if (![\"https:\", \"http:\"].includes(url.protocol) || !url.host) return false;\n } catch {\n return false;\n }\n return true;\n}\n/**\n * Check if the Client has enough intents to using DisTube\n * @param {ClientOptions} options options\n */\nexport function checkIntents(options: ClientOptions): void {\n const requiredIntents: BitFieldResolvable<IntentsString, number>[] = [\"GUILD_VOICE_STATES\"];\n const bitfield: BitFieldResolvable<IntentsString, number> = options.intents ?? (options?.ws as any)?.intents;\n if (typeof bitfield === \"undefined\") return;\n const intents = new Intents(bitfield);\n for (const intent of requiredIntents) {\n if (!intents.has(intent)) throw new DisTubeError(\"MISSING_INTENTS\", intent.toString());\n }\n}\n\n/**\n * Check if the voice channel is empty\n * @param {Discord.VoiceState} voiceState voiceState\n * @returns {boolean}\n */\nexport function isVoiceChannelEmpty(voiceState: VoiceState): boolean {\n const voiceChannel = voiceState.guild?.me?.voice?.channel;\n if (!voiceChannel) return false;\n const members = voiceChannel.members.filter(m => !m.user.bot);\n return !members.size;\n}\n\nexport function isSnowflake(id: any): id is Snowflake {\n try {\n return SnowflakeUtil.deconstruct(id).timestamp > SnowflakeUtil.EPOCH;\n } catch {\n return false;\n }\n}\n\nexport function isMemberInstance(member: any): member is GuildMember {\n return (\n !!member &&\n isSnowflake(member.id) &&\n isSnowflake(member.guild?.id) &&\n isSnowflake(member.user?.id) &&\n member.id === member.user.id\n );\n}\n\nexport function isTextChannelInstance(channel: any): channel is GuildTextBasedChannel {\n return (\n !!channel &&\n isSnowflake(channel.id) &&\n isSnowflake(channel.guild?.id) &&\n typeof channel.send === \"function\" &&\n typeof channel.awaitMessages === \"function\"\n );\n}\n\nexport function isMessageInstance(message: any): message is Message<true> {\n // Simple check for using distube normally\n return (\n !!message &&\n isSnowflake(message.id) &&\n isSnowflake(message.guild?.id) &&\n isTextChannelInstance(message.channel) &&\n isMemberInstance(message.member) &&\n isSnowflake(message.author?.id) &&\n message.member.id === message.author.id &&\n message.guild.id === message.channel.guild.id\n );\n}\n\nexport function isSupportedVoiceChannel(channel: any): channel is VoiceBasedChannel {\n return (\n !!channel &&\n typeof channel.joinable === \"boolean\" &&\n isSnowflake(channel.id) &&\n isSnowflake(channel.guild?.id) &&\n typeof channel.full === \"boolean\" &&\n [\n // Djs v12\n \"voice\",\n \"stage\",\n // Djs v13\n \"GUILD_VOICE\",\n \"GUILD_STAGE_VOICE\",\n ].includes(channel.type)\n );\n}\n\nexport function isGuildInstance(guild: any): guild is Guild {\n return !!guild && isSnowflake(guild.id) && typeof guild.fetchAuditLogs === \"function\";\n}\n\nexport function resolveGuildId(resolvable: GuildIdResolvable): Snowflake {\n let guildId: string | undefined;\n if (typeof resolvable === \"string\") {\n guildId = resolvable;\n } else if (typeof resolvable === \"object\") {\n if (resolvable instanceof Queue || resolvable instanceof DisTubeVoice) guildId = resolvable.id;\n else if (\"guild\" in resolvable && isGuildInstance(resolvable.guild)) guildId = resolvable.guild.id;\n else if (\"id\" in resolvable && isGuildInstance(resolvable)) guildId = resolvable.id;\n }\n if (!isSnowflake(guildId)) throw new DisTubeError(\"INVALID_TYPE\", \"GuildIdResolvable\", resolvable);\n return guildId;\n}\n\nexport function resolveGuildID(resolvable: GuildIdResolvable): Snowflake {\n process.emitWarning(\"resolveGuildID() is deprecated, use resolveGuildId() instead.\", \"DeprecationWarning\");\n return resolveGuildId(resolvable);\n}\n\nexport function isClientInstance(client: any): client is Client {\n return !!client && typeof client.login === \"function\";\n}\n\nexport function checkInvalidKey(\n target: Record<string, any>,\n source: Record<string, any> | string[],\n sourceName: string,\n) {\n if (typeof target !== \"object\" || Array.isArray(target)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"object\", target, sourceName);\n }\n const sourceKeys = Array.isArray(source) ? source : Object.keys(source);\n const invalidKey = Object.keys(target).find(key => !sourceKeys.includes(key));\n if (invalidKey) throw new DisTubeError(\"INVALID_KEY\", sourceName, invalidKey);\n}\n\nasync function waitEvent(target: EventEmitter, status: string, maxTime: number) {\n let cleanup = () => undefined as any;\n try {\n await new Promise((resolve, reject) => {\n const timeout = setTimeout(() => reject(new Error(`Didn't trigger ${status} within ${maxTime}ms`)), maxTime);\n target.once(status, resolve);\n target.once(\"error\", reject);\n cleanup = () => {\n clearTimeout(timeout);\n target.off(status, resolve);\n target.off(\"error\", reject);\n };\n });\n return target;\n } finally {\n cleanup();\n }\n}\n\nexport async function entersState<T extends VoiceConnection | AudioPlayer>(\n target: T,\n status: T extends VoiceConnection ? VoiceConnectionStatus : AudioPlayerStatus,\n maxTime: number,\n) {\n if (target.state.status === status) return target;\n return waitEvent(target, status, maxTime) as Promise<T>;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "distube",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.3",
|
|
4
4
|
"description": "A Discord.js module to simplify your music commands and play songs with audio filters on Discord without any API key. Support YouTube, SoundCloud, Bandcamp, Facebook, and 700+ more sites",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"typings": "dist/index.d.ts",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"music-bot",
|
|
36
36
|
"discord-js"
|
|
37
37
|
],
|
|
38
|
-
"author": "Skick (https://github.com/skick1234
|
|
38
|
+
"author": "Skick (https://github.com/skick1234)",
|
|
39
39
|
"license": "MIT",
|
|
40
40
|
"bugs": {
|
|
41
41
|
"url": "https://github.com/skick1234/DisTube/issues"
|
|
@@ -49,34 +49,34 @@
|
|
|
49
49
|
"@distube/ytdl-core": "^4.9.4",
|
|
50
50
|
"@distube/ytpl": "^1.1.1",
|
|
51
51
|
"@distube/ytsr": "^1.1.5",
|
|
52
|
-
"prism-media": "https://codeload.github.com/distubejs/prism-media/tar.gz/main",
|
|
52
|
+
"prism-media": "https://codeload.github.com/distubejs/prism-media/tar.gz/main#workaround.tar.gz",
|
|
53
53
|
"tiny-typed-emitter": "^2.1.0"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@babel/core": "^7.16.
|
|
56
|
+
"@babel/core": "^7.16.12",
|
|
57
57
|
"@babel/plugin-proposal-class-properties": "^7.16.7",
|
|
58
58
|
"@babel/plugin-proposal-object-rest-spread": "^7.16.7",
|
|
59
|
-
"@babel/preset-env": "^7.16.
|
|
59
|
+
"@babel/preset-env": "^7.16.11",
|
|
60
60
|
"@babel/preset-typescript": "^7.16.7",
|
|
61
|
-
"@commitlint/cli": "^16.0
|
|
61
|
+
"@commitlint/cli": "^16.1.0",
|
|
62
62
|
"@commitlint/config-conventional": "^16.0.0",
|
|
63
|
-
"@discordjs/voice": "^0.
|
|
63
|
+
"@discordjs/voice": "^0.8.0",
|
|
64
64
|
"@distube/docgen": "github:distubejs/docgen",
|
|
65
65
|
"@types/jest": "^27.4.0",
|
|
66
|
-
"@types/node": "^
|
|
67
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
66
|
+
"@types/node": "^17.0.13",
|
|
67
|
+
"@typescript-eslint/eslint-plugin": "^5.10.1",
|
|
68
68
|
"babel-jest": "^27.4.6",
|
|
69
|
-
"discord.js": "^13.
|
|
70
|
-
"eslint": "^8.
|
|
69
|
+
"discord.js": "^13.6.0",
|
|
70
|
+
"eslint": "^8.8.0",
|
|
71
71
|
"eslint-config-distube": "^1.6.3",
|
|
72
72
|
"husky": "^7.0.4",
|
|
73
73
|
"jest": "^27.4.7",
|
|
74
74
|
"jsdoc-babel": "^0.5.0",
|
|
75
|
-
"lint-staged": "^12.
|
|
76
|
-
"npm-check-updates": "^12.1
|
|
75
|
+
"lint-staged": "^12.3.2",
|
|
76
|
+
"npm-check-updates": "^12.2.1",
|
|
77
77
|
"pinst": "^2.1.6",
|
|
78
78
|
"prettier": "^2.5.1",
|
|
79
|
-
"typescript": "^4.5.
|
|
79
|
+
"typescript": "^4.5.5"
|
|
80
80
|
},
|
|
81
81
|
"peerDependencies": {
|
|
82
82
|
"@discordjs/opus": "*",
|