distube 3.3.2 → 4.0.0-dev.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 +6 -8
- package/dist/DisTube.d.ts +0 -77
- package/dist/DisTube.d.ts.map +1 -1
- package/dist/DisTube.js +42 -129
- package/dist/DisTube.js.map +1 -1
- package/dist/constant.d.ts +0 -4
- package/dist/constant.d.ts.map +1 -1
- package/dist/constant.js +0 -4
- package/dist/constant.js.map +1 -1
- package/dist/core/DisTubeHandler.d.ts +0 -21
- package/dist/core/DisTubeHandler.d.ts.map +1 -1
- package/dist/core/DisTubeHandler.js +8 -56
- package/dist/core/DisTubeHandler.js.map +1 -1
- package/dist/core/DisTubeOptions.d.ts +0 -2
- package/dist/core/DisTubeOptions.d.ts.map +1 -1
- package/dist/core/DisTubeOptions.js +0 -13
- package/dist/core/DisTubeOptions.js.map +1 -1
- package/dist/core/voice/DisTubeVoice.d.ts.map +1 -1
- package/dist/core/voice/DisTubeVoice.js +1 -3
- package/dist/core/voice/DisTubeVoice.js.map +1 -1
- package/dist/core/voice/index.d.ts +0 -1
- package/dist/core/voice/index.d.ts.map +1 -1
- package/dist/core/voice/index.js +0 -1
- package/dist/core/voice/index.js.map +1 -1
- package/dist/plugin/index.d.ts +0 -1
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +0 -1
- package/dist/plugin/index.js.map +1 -1
- package/dist/struct/DisTubeError.d.ts +0 -1
- package/dist/struct/DisTubeError.d.ts.map +1 -1
- package/dist/struct/DisTubeError.js +0 -2
- package/dist/struct/DisTubeError.js.map +1 -1
- package/dist/struct/Playlist.d.ts +0 -7
- package/dist/struct/Playlist.d.ts.map +1 -1
- package/dist/struct/Playlist.js +14 -11
- package/dist/struct/Playlist.js.map +1 -1
- package/dist/struct/Song.d.ts +0 -3
- package/dist/struct/Song.d.ts.map +1 -1
- package/dist/struct/Song.js +11 -9
- package/dist/struct/Song.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/type.d.ts +0 -4
- package/dist/type.d.ts.map +1 -1
- package/dist/type.js.map +1 -1
- package/dist/util.d.ts +0 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +15 -26
- package/dist/util.js.map +1 -1
- package/package.json +14 -15
- package/dist/core/voice/DJSAdapter.d.ts +0 -4
- package/dist/core/voice/DJSAdapter.d.ts.map +0 -1
- package/dist/core/voice/DJSAdapter.js +0 -58
- package/dist/core/voice/DJSAdapter.js.map +0 -1
- package/dist/plugin/youtube-dl.d.ts +0 -12
- package/dist/plugin/youtube-dl.d.ts.map +0 -1
- package/dist/plugin/youtube-dl.js +0 -70
- package/dist/plugin/youtube-dl.js.map +0 -1
package/dist/type.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"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"}
|
package/dist/type.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.js","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"","sourcesContent":["import type ytdl from \"@distube/ytdl-core\";\nimport type { CustomPlugin, DisTubeVoice, ExtractorPlugin, Playlist, Queue, SearchResult, Song } from \".\";\nimport type {\n Guild,\n GuildMember,\n GuildTextBasedChannel,\n Interaction,\n Message,\n Snowflake,\n User,\n VoiceBasedChannel,\n VoiceState,\n} from \"discord.js\";\n\nexport type Awaitable<T = any> = T | PromiseLike<T>;\n\nexport type DisTubeVoiceEvents = {\n disconnect: (error?: Error) => Awaitable;\n error: (error: Error) => Awaitable;\n finish: () => Awaitable;\n};\n\nexport type DisTubeEvents = {\n /** Emitted when DisTube encounters an error. */\n error: (channel: GuildTextBasedChannel, error: Error) => Awaitable;\n /** Emitted after DisTube add a new playlist to the playing {@link Queue}. */\n addList: (queue: Queue, playlist: Playlist) => Awaitable;\n /** Emitted after DisTube add a new song to the playing {@link Queue}. */\n addSong: (queue: Queue, song: Song) => Awaitable;\n /**\n * Emitted when DisTube play a song.\n *\n * If {@link DisTubeOptions.emitNewSongOnly} is `true`,\n * this event is not emitted when looping a song or next song is the previous one.\n */\n playSong: (queue: Queue, song: Song) => Awaitable;\n /** Emitted when DisTube finished a song. */\n finishSong: (queue: Queue, song: Song) => Awaitable;\n\n /**\n * Emitted when there is no user in the voice channel,\n * {@link DisTubeOptions.leaveOnEmpty} is `true` and there is a playing queue.\n *\n * If there is no playing queue (stopped and {@link DisTubeOptions.leaveOnStop} is `false`),\n * it will leave the channel without emitting this event.\n */\n empty: (queue: Queue) => Awaitable;\n /**\n * Emitted when there is no more song in the queue and {@link Queue#autoplay} is `false`.\n * DisTube will leave voice channel if {@link DisTubeOptions.leaveOnFinish} is `true`.\n */\n finish: (queue: Queue) => Awaitable;\n /** Emitted when DisTube initialize a queue to change queue default properties. */\n initQueue: (queue: Queue) => Awaitable;\n /**\n * Emitted when {@link Queue#autoplay} is `true`, {@link Queue#songs} is empty,\n * and DisTube cannot find related songs to play.\n */\n noRelated: (queue: Queue) => Awaitable;\n /** Emitted when the bot is disconnected to a voice channel. */\n disconnect: (queue: Queue) => Awaitable;\n /** Emitted when a {@link Queue} is deleted with any reasons. */\n deleteQueue: (queue: Queue) => Awaitable;\n\n /**\n * Emitted when {@link DisTubeOptions.searchSongs} bigger than 0,\n * and the search canceled due to {@link DisTubeOptions.searchTimeout}.\n */\n searchCancel: (message: Message<true>, query: string) => Awaitable;\n /** Emitted when DisTube cannot find any results for the query. */\n searchNoResult: (message: Message<true>, query: string) => Awaitable;\n\n /**\n * Emitted when {@link DisTubeOptions.searchSongs} bigger than 0,\n * and after the user chose a search result to play.\n */\n searchDone: (message: Message<true>, answer: Message<true>, query: string) => Awaitable;\n /**\n * Emitted when {@link DisTubeOptions.searchSongs} bigger than 0,\n * and the search canceled due to user's next message is not a number or out of results range.\n */\n searchInvalidAnswer: (message: Message<true>, answer: Message<true>, query: string) => Awaitable;\n /**\n * Emitted when {@link DisTubeOptions.searchSongs} bigger than 0,\n * and song param of {@link DisTube#play} is invalid url.\n * DisTube will wait for user's next message to choose a song manually.\n *\n * Safe search is enabled\n * if {@link DisTubeOptions.nsfw} is disabled and the message's channel is not a nsfw channel.\n */\n searchResult: (message: Message<true>, results: SearchResult[], query: string) => Awaitable;\n};\n\nexport type Filters = Record<string, string>;\n\nexport interface DisTubeOptions {\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
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"","sourcesContent":["import type ytdl from \"@distube/ytdl-core\";\nimport type { CustomPlugin, DisTubeVoice, ExtractorPlugin, Playlist, Queue, SearchResult, Song } from \".\";\nimport type {\n Guild,\n GuildMember,\n GuildTextBasedChannel,\n Interaction,\n Message,\n Snowflake,\n User,\n VoiceBasedChannel,\n VoiceState,\n} from \"discord.js\";\n\nexport type Awaitable<T = any> = T | PromiseLike<T>;\n\nexport type DisTubeVoiceEvents = {\n disconnect: (error?: Error) => Awaitable;\n error: (error: Error) => Awaitable;\n finish: () => Awaitable;\n};\n\nexport type DisTubeEvents = {\n /** Emitted when DisTube encounters an error. */\n error: (channel: GuildTextBasedChannel, error: Error) => Awaitable;\n /** Emitted after DisTube add a new playlist to the playing {@link Queue}. */\n addList: (queue: Queue, playlist: Playlist) => Awaitable;\n /** Emitted after DisTube add a new song to the playing {@link Queue}. */\n addSong: (queue: Queue, song: Song) => Awaitable;\n /**\n * Emitted when DisTube play a song.\n *\n * If {@link DisTubeOptions.emitNewSongOnly} is `true`,\n * this event is not emitted when looping a song or next song is the previous one.\n */\n playSong: (queue: Queue, song: Song) => Awaitable;\n /** Emitted when DisTube finished a song. */\n finishSong: (queue: Queue, song: Song) => Awaitable;\n\n /**\n * Emitted when there is no user in the voice channel,\n * {@link DisTubeOptions.leaveOnEmpty} is `true` and there is a playing queue.\n *\n * If there is no playing queue (stopped and {@link DisTubeOptions.leaveOnStop} is `false`),\n * it will leave the channel without emitting this event.\n */\n empty: (queue: Queue) => Awaitable;\n /**\n * Emitted when there is no more song in the queue and {@link Queue#autoplay} is `false`.\n * DisTube will leave voice channel if {@link DisTubeOptions.leaveOnFinish} is `true`.\n */\n finish: (queue: Queue) => Awaitable;\n /** Emitted when DisTube initialize a queue to change queue default properties. */\n initQueue: (queue: Queue) => Awaitable;\n /**\n * Emitted when {@link Queue#autoplay} is `true`, {@link Queue#songs} is empty,\n * and DisTube cannot find related songs to play.\n */\n noRelated: (queue: Queue) => Awaitable;\n /** Emitted when the bot is disconnected to a voice channel. */\n disconnect: (queue: Queue) => Awaitable;\n /** Emitted when a {@link Queue} is deleted with any reasons. */\n deleteQueue: (queue: Queue) => Awaitable;\n\n /**\n * Emitted when {@link DisTubeOptions.searchSongs} bigger than 0,\n * and the search canceled due to {@link DisTubeOptions.searchTimeout}.\n */\n searchCancel: (message: Message<true>, query: string) => Awaitable;\n /** Emitted when DisTube cannot find any results for the query. */\n searchNoResult: (message: Message<true>, query: string) => Awaitable;\n\n /**\n * Emitted when {@link DisTubeOptions.searchSongs} bigger than 0,\n * and after the user chose a search result to play.\n */\n searchDone: (message: Message<true>, answer: Message<true>, query: string) => Awaitable;\n /**\n * Emitted when {@link DisTubeOptions.searchSongs} bigger than 0,\n * and the search canceled due to user's next message is not a number or out of results range.\n */\n searchInvalidAnswer: (message: Message<true>, answer: Message<true>, query: string) => Awaitable;\n /**\n * Emitted when {@link DisTubeOptions.searchSongs} bigger than 0,\n * and song param of {@link DisTube#play} is invalid url.\n * DisTube will wait for user's next message to choose a song manually.\n *\n * Safe search is enabled\n * if {@link DisTubeOptions.nsfw} is disabled and the message's channel is not a nsfw channel.\n */\n searchResult: (message: Message<true>, results: SearchResult[], query: string) => Awaitable;\n};\n\nexport type Filters = Record<string, string>;\n\nexport interface DisTubeOptions {\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.downloadOptions;\n nsfw?: boolean;\n emitAddSongWhenCreatingQueue?: boolean;\n emitAddListWhenCreatingQueue?: boolean;\n}\n\nexport type GuildIdResolvable =\n | Queue\n | DisTubeVoice\n | Snowflake\n | Message\n | GuildTextBasedChannel\n | VoiceBasedChannel\n | VoiceState\n | Guild\n | GuildMember\n | Interaction\n | string;\n\nexport interface OtherSongInfo {\n src?: string;\n id?: string;\n title?: string;\n name?: string;\n is_live?: boolean;\n isLive?: boolean;\n _duration_raw?: string | number;\n duration?: string | number;\n webpage_url?: string;\n url: string;\n thumbnail?: string;\n related?: RelatedSong[];\n view_count?: string | number;\n views?: string | number;\n like_count?: string | number;\n likes?: string | number;\n dislike_count?: string | number;\n dislikes?: string | number;\n repost_count?: string | number;\n reposts?: string | number;\n uploader?: string | { name: string; url: string };\n uploader_url?: string;\n age_limit?: string | number;\n chapters?: Chapter[];\n age_restricted?: boolean;\n}\n\nexport interface Chapter {\n /** Chapter title */\n title: string;\n /** Chapter start time in seconds */\n start_time: number;\n}\n\nexport interface PlaylistInfo {\n /** The source of the playlist */\n source: string;\n /**\n * User requested.\n */\n member?: GuildMember;\n /**\n * User requested.\n */\n user?: User;\n /** Playlist songs. */\n songs: Song[];\n /**\n * Playlist name.\n */\n name?: string;\n /**\n * Playlist URL.\n */\n url?: string;\n /**\n * Playlist thumbnail.\n */\n thumbnail?: string;\n}\n\nexport type RelatedSong = Omit<Song, \"related\">;\n\nexport interface CustomPluginPlayOptions {\n skip?: boolean;\n /** @deprecated Use `options.position` instead */\n unshift?: boolean;\n position?: number;\n member?: GuildMember;\n textChannel?: GuildTextBasedChannel;\n metadata?: any;\n}\n"]}
|
package/dist/util.d.ts
CHANGED
|
@@ -43,7 +43,6 @@ export declare function isMessageInstance(message: any): message is Message<true
|
|
|
43
43
|
export declare function isSupportedVoiceChannel(channel: any): channel is VoiceBasedChannel;
|
|
44
44
|
export declare function isGuildInstance(guild: any): guild is Guild;
|
|
45
45
|
export declare function resolveGuildId(resolvable: GuildIdResolvable): Snowflake;
|
|
46
|
-
export declare function resolveGuildID(resolvable: GuildIdResolvable): Snowflake;
|
|
47
46
|
export declare function isClientInstance(client: any): client is Client;
|
|
48
47
|
export declare function checkInvalidKey(target: Record<string, any>, source: Record<string, any> | string[], sourceName: string): void;
|
|
49
48
|
export declare function entersState<T extends VoiceConnection | AudioPlayer>(target: T, status: T extends VoiceConnection ? VoiceConnectionStatus : AudioPlayerStatus, maxTime: number): Promise<T>;
|
package/dist/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,GAAG,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC/G,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,GAAG,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC/G,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EACb,KAAK,EACL,WAAW,EACX,qBAAqB,EACrB,OAAO,EACP,SAAS,EACT,iBAAiB,EACjB,UAAU,EACX,MAAM,YAAY,CAAC;AAIpB;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQlD;AACD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAY3C;AACD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAG9C;AACD;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CASzC;AACD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAQzD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAKnE;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,SAAS,CAMpD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,WAAW,CAQnE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,IAAI,qBAAqB,CAQpF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAYxE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,IAAI,iBAAiB,CASlF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,KAAK,CAE1D;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,iBAAiB,GAAG,SAAS,CAWvE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,MAAM,CAE9D;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,EAAE,EACtC,UAAU,EAAE,MAAM,QAMnB;AAuBD,wBAAsB,WAAW,CAAC,CAAC,SAAS,eAAe,GAAG,WAAW,EACvE,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,CAAC,SAAS,eAAe,GAAG,qBAAqB,GAAG,iBAAiB,EAC7E,OAAO,EAAE,MAAM,cAIhB;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,MAAM,CAEhD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEjE"}
|
package/dist/util.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isRecord = exports.isObject = exports.entersState = exports.checkInvalidKey = exports.isClientInstance = exports.
|
|
3
|
+
exports.isRecord = exports.isObject = 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;
|
|
4
4
|
const url_1 = require("url");
|
|
5
5
|
const _1 = require(".");
|
|
6
6
|
const discord_js_1 = require("discord.js");
|
|
@@ -83,14 +83,13 @@ exports.isURL = isURL;
|
|
|
83
83
|
* @param {ClientOptions} options options
|
|
84
84
|
*/
|
|
85
85
|
function checkIntents(options) {
|
|
86
|
-
const requiredIntents = [
|
|
87
|
-
const
|
|
88
|
-
if (typeof bitfield === "undefined")
|
|
89
|
-
return;
|
|
90
|
-
const intents = new discord_js_1.Intents(bitfield);
|
|
86
|
+
const requiredIntents = [128 /* GuildVoiceStates */];
|
|
87
|
+
const intents = new discord_js_1.IntentsBitField(options.intents);
|
|
91
88
|
for (const intent of requiredIntents) {
|
|
89
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
90
|
+
// @ts-ignore
|
|
92
91
|
if (!intents.has(intent))
|
|
93
|
-
throw new _1.DisTubeError("MISSING_INTENTS", intent.toString());
|
|
92
|
+
throw new _1.DisTubeError("MISSING_INTENTS", discord_js_1.GatewayIntentBits[intent.toString()]);
|
|
94
93
|
}
|
|
95
94
|
}
|
|
96
95
|
exports.checkIntents = checkIntents;
|
|
@@ -109,7 +108,7 @@ function isVoiceChannelEmpty(voiceState) {
|
|
|
109
108
|
exports.isVoiceChannelEmpty = isVoiceChannelEmpty;
|
|
110
109
|
function isSnowflake(id) {
|
|
111
110
|
try {
|
|
112
|
-
return discord_js_1.SnowflakeUtil.deconstruct(id).timestamp > discord_js_1.SnowflakeUtil.
|
|
111
|
+
return discord_js_1.SnowflakeUtil.deconstruct(id).timestamp > discord_js_1.SnowflakeUtil.epoch;
|
|
113
112
|
}
|
|
114
113
|
catch {
|
|
115
114
|
return false;
|
|
@@ -127,7 +126,7 @@ exports.isMemberInstance = isMemberInstance;
|
|
|
127
126
|
function isTextChannelInstance(channel) {
|
|
128
127
|
return (!!channel &&
|
|
129
128
|
isSnowflake(channel.id) &&
|
|
130
|
-
isSnowflake(channel.
|
|
129
|
+
isSnowflake(channel.guildId) &&
|
|
131
130
|
typeof channel.send === "function" &&
|
|
132
131
|
typeof channel.awaitMessages === "function");
|
|
133
132
|
}
|
|
@@ -136,10 +135,10 @@ function isMessageInstance(message) {
|
|
|
136
135
|
// Simple check for using distube normally
|
|
137
136
|
return (!!message &&
|
|
138
137
|
isSnowflake(message.id) &&
|
|
139
|
-
isSnowflake(message.
|
|
138
|
+
isSnowflake(message.guildId) &&
|
|
140
139
|
isTextChannelInstance(message.channel) &&
|
|
141
140
|
isMemberInstance(message.member) &&
|
|
142
|
-
isSnowflake(message.author
|
|
141
|
+
isSnowflake(message.author.id) &&
|
|
143
142
|
message.member.id === message.author.id &&
|
|
144
143
|
message.guild.id === message.channel.guild.id);
|
|
145
144
|
}
|
|
@@ -148,16 +147,9 @@ function isSupportedVoiceChannel(channel) {
|
|
|
148
147
|
return (!!channel &&
|
|
149
148
|
typeof channel.joinable === "boolean" &&
|
|
150
149
|
isSnowflake(channel.id) &&
|
|
151
|
-
isSnowflake(channel.
|
|
150
|
+
isSnowflake(channel.guildId) &&
|
|
152
151
|
typeof channel.full === "boolean" &&
|
|
153
|
-
|
|
154
|
-
// Djs v12
|
|
155
|
-
"voice",
|
|
156
|
-
"stage",
|
|
157
|
-
// Djs v13
|
|
158
|
-
"GUILD_VOICE",
|
|
159
|
-
"GUILD_STAGE_VOICE",
|
|
160
|
-
].includes(channel.type));
|
|
152
|
+
discord_js_1.Constants.VoiceBasedChannelTypes.includes(channel.type));
|
|
161
153
|
}
|
|
162
154
|
exports.isSupportedVoiceChannel = isSupportedVoiceChannel;
|
|
163
155
|
function isGuildInstance(guild) {
|
|
@@ -182,11 +174,6 @@ function resolveGuildId(resolvable) {
|
|
|
182
174
|
return guildId;
|
|
183
175
|
}
|
|
184
176
|
exports.resolveGuildId = resolveGuildId;
|
|
185
|
-
function resolveGuildID(resolvable) {
|
|
186
|
-
process.emitWarning("resolveGuildID() is deprecated, use resolveGuildId() instead.", "DeprecationWarning");
|
|
187
|
-
return resolveGuildId(resolvable);
|
|
188
|
-
}
|
|
189
|
-
exports.resolveGuildID = resolveGuildID;
|
|
190
177
|
function isClientInstance(client) {
|
|
191
178
|
return !!client && typeof client.login === "function";
|
|
192
179
|
}
|
|
@@ -201,7 +188,9 @@ function checkInvalidKey(target, source, sourceName) {
|
|
|
201
188
|
}
|
|
202
189
|
exports.checkInvalidKey = checkInvalidKey;
|
|
203
190
|
async function waitEvent(target, status, maxTime) {
|
|
204
|
-
let cleanup = () =>
|
|
191
|
+
let cleanup = () => {
|
|
192
|
+
// void
|
|
193
|
+
};
|
|
205
194
|
try {
|
|
206
195
|
await new Promise((resolve, reject) => {
|
|
207
196
|
const timeout = setTimeout(() => reject(new Error(`Didn't trigger ${status} within ${maxTime}ms`)), maxTime);
|
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.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 (isObject(resolvable)) {\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 (!isObject(target)) throw new DisTubeError(\"INVALID_TYPE\", \"object\", target, sourceName);\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\nexport function isObject(obj: any): obj is object {\n return typeof obj === \"object\" && obj !== null && !Array.isArray(obj);\n}\n\nexport function isRecord(obj: any): obj is Record<string, unknown> {\n return isObject(obj);\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 { Constants, GatewayIntentBits, IntentsBitField, 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 Client,\n ClientOptions,\n Guild,\n GuildMember,\n GuildTextBasedChannel,\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 = [GatewayIntentBits.GuildVoiceStates];\n const intents = new IntentsBitField(options.intents);\n for (const intent of requiredIntents) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (!intents.has(intent)) throw new DisTubeError(\"MISSING_INTENTS\", GatewayIntentBits[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.guildId) &&\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.guildId) &&\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 Constants.VoiceBasedChannelTypes.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 (isObject(resolvable)) {\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 (!isObject(target)) throw new DisTubeError(\"INVALID_TYPE\", \"object\", target, sourceName);\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 = () => {\n // void\n };\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\nexport function isObject(obj: any): obj is object {\n return typeof obj === \"object\" && obj !== null && !Array.isArray(obj);\n}\n\nexport function isRecord(obj: any): obj is Record<string, unknown> {\n return isObject(obj);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "distube",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0-dev.0",
|
|
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",
|
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
"docs": "docgen -s src/*.ts src/**/*.ts -o docs/docs.json -c pages/index.yml -g -j .jsconfig.json",
|
|
10
10
|
"lint": "eslint .",
|
|
11
11
|
"lint:fix": "eslint . --fix",
|
|
12
|
-
"prettier": "prettier --write **/*.{js,ts,json,yml,yaml}",
|
|
12
|
+
"prettier": "prettier --write **/*.{js,ts,json,yml,yaml,md}",
|
|
13
13
|
"build": "tsc",
|
|
14
14
|
"build:check": "tsc --noEmit --incremental false",
|
|
15
|
-
"publish:
|
|
15
|
+
"publish:dev": "npm publish --tag dev",
|
|
16
16
|
"ncu": "ncu -u --dep dev,prod",
|
|
17
17
|
"_postinstall": "husky install",
|
|
18
18
|
"prepublishOnly": "pinst -d",
|
|
@@ -45,15 +45,14 @@
|
|
|
45
45
|
},
|
|
46
46
|
"homepage": "https://distube.js.org/",
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@distube/youtube-dl": "^2.2.4",
|
|
49
48
|
"@distube/ytdl-core": "^4.9.4",
|
|
50
49
|
"@distube/ytpl": "^1.1.1",
|
|
51
50
|
"@distube/ytsr": "^1.1.5",
|
|
52
|
-
"prism-media": "https://codeload.github.com/distubejs/prism-media/tar.gz/main
|
|
51
|
+
"prism-media": "https://codeload.github.com/distubejs/prism-media/tar.gz/main",
|
|
53
52
|
"tiny-typed-emitter": "^2.1.0"
|
|
54
53
|
},
|
|
55
54
|
"devDependencies": {
|
|
56
|
-
"@babel/core": "^7.
|
|
55
|
+
"@babel/core": "^7.17.0",
|
|
57
56
|
"@babel/plugin-proposal-class-properties": "^7.16.7",
|
|
58
57
|
"@babel/plugin-proposal-object-rest-spread": "^7.16.7",
|
|
59
58
|
"@babel/preset-env": "^7.16.11",
|
|
@@ -63,16 +62,16 @@
|
|
|
63
62
|
"@discordjs/voice": "^0.8.0",
|
|
64
63
|
"@distube/docgen": "github:distubejs/docgen",
|
|
65
64
|
"@types/jest": "^27.4.0",
|
|
66
|
-
"@types/node": "^17.0.
|
|
67
|
-
"@typescript-eslint/eslint-plugin": "^5.10.
|
|
68
|
-
"babel-jest": "^27.
|
|
69
|
-
"discord.js": "^
|
|
65
|
+
"@types/node": "^17.0.15",
|
|
66
|
+
"@typescript-eslint/eslint-plugin": "^5.10.2",
|
|
67
|
+
"babel-jest": "^27.5.0",
|
|
68
|
+
"discord.js": "^14.0.0-dev.1644006540.cd5c7fa",
|
|
70
69
|
"eslint": "^8.8.0",
|
|
71
70
|
"eslint-config-distube": "^1.6.3",
|
|
72
71
|
"husky": "^7.0.4",
|
|
73
|
-
"jest": "^27.
|
|
72
|
+
"jest": "^27.5.0",
|
|
74
73
|
"jsdoc-babel": "^0.5.0",
|
|
75
|
-
"lint-staged": "^12.3.
|
|
74
|
+
"lint-staged": "^12.3.3",
|
|
76
75
|
"npm-check-updates": "^12.2.1",
|
|
77
76
|
"pinst": "^2.1.6",
|
|
78
77
|
"prettier": "^2.5.1",
|
|
@@ -80,8 +79,8 @@
|
|
|
80
79
|
},
|
|
81
80
|
"peerDependencies": {
|
|
82
81
|
"@discordjs/opus": "*",
|
|
83
|
-
"@discordjs/voice": "
|
|
84
|
-
"discord.js": "
|
|
82
|
+
"@discordjs/voice": "*",
|
|
83
|
+
"discord.js": "14|^14.0.0-dev"
|
|
85
84
|
},
|
|
86
85
|
"peerDependenciesMeta": {
|
|
87
86
|
"@discordjs/opus": {
|
|
@@ -89,6 +88,6 @@
|
|
|
89
88
|
}
|
|
90
89
|
},
|
|
91
90
|
"engines": {
|
|
92
|
-
"node": ">=
|
|
91
|
+
"node": ">=16.6.0"
|
|
93
92
|
}
|
|
94
93
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DJSAdapter.d.ts","sourceRoot":"","sources":["../../../src/core/voice/DJSAdapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAqB,YAAY,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,4BAA4B,EAAuC,MAAM,kBAAkB,CAAC;AAuC1G,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,YAAY,GAAG,4BAA4B,CAkB1F"}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createDiscordJSAdapter = void 0;
|
|
4
|
-
const discord_js_1 = require("discord.js");
|
|
5
|
-
const adapters = new Map();
|
|
6
|
-
const trackedClients = new Set();
|
|
7
|
-
function trackClient(client) {
|
|
8
|
-
if (trackedClients.has(client))
|
|
9
|
-
return;
|
|
10
|
-
trackedClients.add(client);
|
|
11
|
-
client.ws.on(discord_js_1.Constants.WSEvents.VOICE_SERVER_UPDATE, (payload) => {
|
|
12
|
-
adapters.get(payload.guild_id)?.onVoiceServerUpdate(payload);
|
|
13
|
-
});
|
|
14
|
-
client.ws.on(discord_js_1.Constants.WSEvents.VOICE_STATE_UPDATE, (payload) => {
|
|
15
|
-
if (payload.guild_id && payload.session_id && payload.user_id === client.user?.id) {
|
|
16
|
-
adapters.get(payload.guild_id)?.onVoiceStateUpdate(payload);
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
client.on(discord_js_1.Constants.Events.SHARD_DISCONNECT, (_, shardID) => {
|
|
20
|
-
const guilds = trackedShards.get(shardID);
|
|
21
|
-
if (guilds) {
|
|
22
|
-
for (const guildID of guilds.values()) {
|
|
23
|
-
adapters.get(guildID)?.destroy();
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
trackedShards.delete(shardID);
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
const trackedShards = new Map();
|
|
30
|
-
function trackGuild(guild) {
|
|
31
|
-
let guilds = trackedShards.get(guild.shardID);
|
|
32
|
-
if (!guilds) {
|
|
33
|
-
guilds = new Set();
|
|
34
|
-
trackedShards.set(guild.shardID, guilds);
|
|
35
|
-
}
|
|
36
|
-
guilds.add(guild.id);
|
|
37
|
-
}
|
|
38
|
-
function createDiscordJSAdapter(channel) {
|
|
39
|
-
return methods => {
|
|
40
|
-
adapters.set(channel.guild.id, methods);
|
|
41
|
-
trackClient(channel.client);
|
|
42
|
-
trackGuild(channel.guild);
|
|
43
|
-
return {
|
|
44
|
-
sendPayload(data) {
|
|
45
|
-
if (channel.guild.shard.status === discord_js_1.Constants.Status.READY) {
|
|
46
|
-
channel.guild.shard.send(data);
|
|
47
|
-
return true;
|
|
48
|
-
}
|
|
49
|
-
return false;
|
|
50
|
-
},
|
|
51
|
-
destroy() {
|
|
52
|
-
return adapters.delete(channel.guild.id);
|
|
53
|
-
},
|
|
54
|
-
};
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
exports.createDiscordJSAdapter = createDiscordJSAdapter;
|
|
58
|
-
//# sourceMappingURL=DJSAdapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DJSAdapter.js","sourceRoot":"","sources":["../../../src/core/voice/DJSAdapter.ts"],"names":[],"mappings":";;;AAAA,2CAAuC;AAKvC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkD,CAAC;AAC3E,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;AAEzC,SAAS,WAAW,CAAC,MAAc;IACjC,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO;IACvC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,sBAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,OAA6C,EAAE,EAAE;QACrG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,sBAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,OAA4C,EAAE,EAAE;QACnG,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE;YACjF,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;SAC7D;IACH,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,sBAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE;QAC1D,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,MAAM,EAAE;YACV,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE;gBACrC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;aAClC;SACF;QACD,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,aAAa,GAAG,IAAI,GAAG,EAA0B,CAAC;AAExD,SAAS,UAAU,CAAC,KAAU;IAC5B,IAAI,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACnB,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;KAC1C;IACD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACvB,CAAC;AAED,SAAgB,sBAAsB,CAAC,OAAqB;IAC1D,OAAO,OAAO,CAAC,EAAE;QACf,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACxC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5B,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO;YACL,WAAW,CAAC,IAAI;gBACd,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,sBAAS,CAAC,MAAM,CAAC,KAAK,EAAE;oBACzD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC/B,OAAO,IAAI,CAAC;iBACb;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO;gBACL,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3C,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAlBD,wDAkBC","sourcesContent":["import { Constants } from \"discord.js\";\nimport type { Client, Snowflake, VoiceChannel } from \"discord.js\";\nimport type { DiscordGatewayAdapterCreator, DiscordGatewayAdapterLibraryMethods } from \"@discordjs/voice\";\nimport type { GatewayVoiceServerUpdateDispatchData, GatewayVoiceStateUpdateDispatchData } from \"discord-api-types/v9\";\n\nconst adapters = new Map<Snowflake, DiscordGatewayAdapterLibraryMethods>();\nconst trackedClients = new Set<Client>();\n\nfunction trackClient(client: Client) {\n if (trackedClients.has(client)) return;\n trackedClients.add(client);\n client.ws.on(Constants.WSEvents.VOICE_SERVER_UPDATE, (payload: GatewayVoiceServerUpdateDispatchData) => {\n adapters.get(payload.guild_id)?.onVoiceServerUpdate(payload);\n });\n client.ws.on(Constants.WSEvents.VOICE_STATE_UPDATE, (payload: GatewayVoiceStateUpdateDispatchData) => {\n if (payload.guild_id && payload.session_id && payload.user_id === client.user?.id) {\n adapters.get(payload.guild_id)?.onVoiceStateUpdate(payload);\n }\n });\n client.on(Constants.Events.SHARD_DISCONNECT, (_, shardID) => {\n const guilds = trackedShards.get(shardID);\n if (guilds) {\n for (const guildID of guilds.values()) {\n adapters.get(guildID)?.destroy();\n }\n }\n trackedShards.delete(shardID);\n });\n}\n\nconst trackedShards = new Map<number, Set<Snowflake>>();\n\nfunction trackGuild(guild: any) {\n let guilds = trackedShards.get(guild.shardID);\n if (!guilds) {\n guilds = new Set();\n trackedShards.set(guild.shardID, guilds);\n }\n guilds.add(guild.id);\n}\n\nexport function createDiscordJSAdapter(channel: VoiceChannel): DiscordGatewayAdapterCreator {\n return methods => {\n adapters.set(channel.guild.id, methods);\n trackClient(channel.client);\n trackGuild(channel.guild);\n return {\n sendPayload(data) {\n if (channel.guild.shard.status === Constants.Status.READY) {\n channel.guild.shard.send(data);\n return true;\n }\n return false;\n },\n destroy() {\n return adapters.delete(channel.guild.id);\n },\n };\n };\n}\n"]}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { ExtractorPlugin, Playlist, Song } from "..";
|
|
2
|
-
import type { GuildMember } from "discord.js";
|
|
3
|
-
export declare class YouTubeDLPlugin extends ExtractorPlugin {
|
|
4
|
-
constructor(updateYouTubeDL?: boolean);
|
|
5
|
-
validate(): Promise<boolean>;
|
|
6
|
-
resolve(url: string, { member, metadata }: {
|
|
7
|
-
member?: GuildMember;
|
|
8
|
-
metadata?: any;
|
|
9
|
-
}): Promise<Playlist<any> | Song<any>>;
|
|
10
|
-
getStreamURL(url: string): Promise<string>;
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=youtube-dl.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"youtube-dl.d.ts","sourceRoot":"","sources":["../../src/plugin/youtube-dl.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,qBAAa,eAAgB,SAAQ,eAAe;gBACtC,eAAe,UAAO;IAY5B,QAAQ;IAIR,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,QAAQ,CAAC,EAAE,GAAG,CAAA;KAAE;IAkBnF,YAAY,CAAC,GAAG,EAAE,MAAM;CAW/B"}
|
|
@@ -1,70 +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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.YouTubeDLPlugin = void 0;
|
|
23
|
-
const youtube_dl_1 = __importStar(require("@distube/youtube-dl"));
|
|
24
|
-
const __1 = require("..");
|
|
25
|
-
class YouTubeDLPlugin extends __1.ExtractorPlugin {
|
|
26
|
-
constructor(updateYouTubeDL = true) {
|
|
27
|
-
super();
|
|
28
|
-
if (updateYouTubeDL) {
|
|
29
|
-
/* eslint-disable no-console */
|
|
30
|
-
(0, youtube_dl_1.download)()
|
|
31
|
-
.then((version) => console.log(`[DisTube] Updated youtube-dl to ${version}!`))
|
|
32
|
-
.catch(console.error)
|
|
33
|
-
.catch(() => console.warn("[DisTube] Unable to update youtube-dl, using default version."));
|
|
34
|
-
/* eslint-enable no-console */
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
// eslint-disable-next-line @typescript-eslint/require-await
|
|
38
|
-
async validate() {
|
|
39
|
-
return true;
|
|
40
|
-
}
|
|
41
|
-
async resolve(url, { member, metadata }) {
|
|
42
|
-
const info = await (0, youtube_dl_1.default)(url, {
|
|
43
|
-
dumpSingleJson: true,
|
|
44
|
-
noWarnings: true,
|
|
45
|
-
noCallHome: true,
|
|
46
|
-
preferFreeFormats: true,
|
|
47
|
-
}).catch(e => {
|
|
48
|
-
throw new Error(`[youtube-dl] ${e.stderr || e}`);
|
|
49
|
-
});
|
|
50
|
-
if (Array.isArray(info.entries) && info.entries.length > 0) {
|
|
51
|
-
info.source = info.extractor.match(/\w+/)[0];
|
|
52
|
-
info.songs = info.entries.map((i) => new __1.Song(i, { member, source: i.extractor, metadata }));
|
|
53
|
-
return new __1.Playlist(info, { member, metadata, properties: { source: info.songs[0]?.source } });
|
|
54
|
-
}
|
|
55
|
-
return new __1.Song(info, { member, source: info.extractor, metadata });
|
|
56
|
-
}
|
|
57
|
-
async getStreamURL(url) {
|
|
58
|
-
const info = await (0, youtube_dl_1.default)(url, {
|
|
59
|
-
dumpSingleJson: true,
|
|
60
|
-
noWarnings: true,
|
|
61
|
-
noCallHome: true,
|
|
62
|
-
preferFreeFormats: true,
|
|
63
|
-
}).catch(e => {
|
|
64
|
-
throw new Error(`[youtube-dl] ${e.stderr || e}`);
|
|
65
|
-
});
|
|
66
|
-
return info.url;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
exports.YouTubeDLPlugin = YouTubeDLPlugin;
|
|
70
|
-
//# sourceMappingURL=youtube-dl.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"youtube-dl.js","sourceRoot":"","sources":["../../src/plugin/youtube-dl.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,kEAA8D;AAC9D,0BAAqD;AAKrD,MAAa,eAAgB,SAAQ,mBAAe;IAClD,YAAY,eAAe,GAAG,IAAI;QAChC,KAAK,EAAE,CAAC;QACR,IAAI,eAAe,EAAE;YACnB,+BAA+B;YAC/B,IAAA,qBAAQ,GAAE;iBACP,IAAI,CAAC,CAAC,OAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,mCAAmC,OAAO,GAAG,CAAC,CAAC;iBAClF,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;iBACpB,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC,CAAC;YAC9F,8BAA8B;SAC/B;IACH,CAAC;IACD,4DAA4D;IAC5D,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,EAAE,MAAM,EAAE,QAAQ,EAA4C;QACvF,MAAM,IAAI,GAAQ,MAAM,IAAA,oBAAa,EAAC,GAAG,EAAE;YACzC,cAAc,EAAE,IAAI;YACpB,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,IAAI;YAChB,iBAAiB,EAAE,IAAI;SACxB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAC3B,CAAC,CAA6B,EAAE,EAAE,CAAC,IAAI,QAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC,CAC1F,CAAC;YACF,OAAO,IAAI,YAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;SAChG;QACD,OAAO,IAAI,QAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,KAAK,CAAC,YAAY,CAAC,GAAW;QAC5B,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAa,EAAC,GAAG,EAAE;YACpC,cAAc,EAAE,IAAI;YACpB,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,IAAI;YAChB,iBAAiB,EAAE,IAAI;SACxB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;CACF;AA9CD,0CA8CC","sourcesContent":["import youtubeDlExec, { download } from \"@distube/youtube-dl\";\nimport { ExtractorPlugin, Playlist, Song } from \"..\";\nimport type { OtherSongInfo } from \"..\";\nimport type { GuildMember } from \"discord.js\";\nimport type { YtResponse } from \"@distube/youtube-dl\";\n\nexport class YouTubeDLPlugin extends ExtractorPlugin {\n constructor(updateYouTubeDL = true) {\n super();\n if (updateYouTubeDL) {\n /* eslint-disable no-console */\n download()\n .then((version: any) => console.log(`[DisTube] Updated youtube-dl to ${version}!`))\n .catch(console.error)\n .catch(() => console.warn(\"[DisTube] Unable to update youtube-dl, using default version.\"));\n /* eslint-enable no-console */\n }\n }\n // eslint-disable-next-line @typescript-eslint/require-await\n async validate() {\n return true;\n }\n\n async resolve(url: string, { member, metadata }: { member?: GuildMember; metadata?: any }) {\n const info: any = await youtubeDlExec(url, {\n dumpSingleJson: true,\n noWarnings: true,\n noCallHome: true,\n preferFreeFormats: true,\n }).catch(e => {\n throw new Error(`[youtube-dl] ${e.stderr || e}`);\n });\n if (Array.isArray(info.entries) && info.entries.length > 0) {\n info.source = info.extractor.match(/\\w+/)[0];\n info.songs = info.entries.map(\n (i: OtherSongInfo & YtResponse) => new Song(i, { member, source: i.extractor, metadata }),\n );\n return new Playlist(info, { member, metadata, properties: { source: info.songs[0]?.source } });\n }\n return new Song(info, { member, source: info.extractor, metadata });\n }\n async getStreamURL(url: string) {\n const info = await youtubeDlExec(url, {\n dumpSingleJson: true,\n noWarnings: true,\n noCallHome: true,\n preferFreeFormats: true,\n }).catch(e => {\n throw new Error(`[youtube-dl] ${e.stderr || e}`);\n });\n return info.url;\n }\n}\n"]}
|