From 355157a75353ec7e99142fcee86882a86c541a83 Mon Sep 17 00:00:00 2001 From: Snowflake107 Date: Mon, 28 Jun 2021 23:59:45 +0545 Subject: [PATCH] revert extractor first --- package.json | 2 +- src/Player.ts | 63 ++++++++++++++++++++++++++++++++++----------------- 2 files changed, 43 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 541194a..ea00c9e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "discord-player", - "version": "4.1.3", + "version": "4.1.4", "description": "Complete framework to facilitate music commands using discord.js", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/src/Player.ts b/src/Player.ts index b966d53..02c2ddb 100644 --- a/src/Player.ts +++ b/src/Player.ts @@ -488,32 +488,53 @@ export class Player extends EventEmitter { if (typeof query === 'string') query = query.replace(/<(.+)>/g, '$1'); let track; - if (query instanceof Track) query = query.url; + if (query instanceof Track) track = query; else { - for (const [_, extractor] of this.Extractors) { - if (extractor.validate(query)) { - const data = await extractor.handle(query); - if (data) { - track = new Track(this, { - title: data.title, - description: data.description, - duration: Util.buildTimeCode(Util.parseMS(data.duration)), - thumbnail: data.thumbnail, - author: data.author, - views: data.views, - engine: data.engine, - source: data.source ?? 'arbitrary', - fromPlaylist: false, - requestedBy: message.author, - url: data.url - }); + if (ytdl.validateURL(query)) { + const info = await ytdl.getBasicInfo(query).catch(() => {}); + if (!info) return void this.emit(PlayerEvents.NO_RESULTS, message, query); + if (info.videoDetails.isLiveContent && !this.options.enableLive) return void this.emit(PlayerEvents.ERROR, PlayerErrorEventCodes.LIVE_VIDEO, message, new PlayerError('Live video is not enabled!')); + const lastThumbnail = info.videoDetails.thumbnails[info.videoDetails.thumbnails.length - 1]; - if (extractor.important) break; + track = new Track(this, { + title: info.videoDetails.title, + description: info.videoDetails.description, + author: info.videoDetails.author.name, + url: info.videoDetails.video_url, + thumbnail: lastThumbnail.url, + duration: Util.buildTimeCode(Util.parseMS(parseInt(info.videoDetails.lengthSeconds) * 1000)), + views: parseInt(info.videoDetails.viewCount), + requestedBy: message.author, + fromPlaylist: false, + source: 'youtube', + live: Boolean(info.videoDetails.isLiveContent) + }); + } else { + for (const [_, extractor] of this.Extractors) { + if (extractor.validate(query)) { + const data = await extractor.handle(query); + if (data) { + track = new Track(this, { + title: data.title, + description: data.description, + duration: Util.buildTimeCode(Util.parseMS(data.duration)), + thumbnail: data.thumbnail, + author: data.author, + views: data.views, + engine: data.engine, + source: data.source ?? 'arbitrary', + fromPlaylist: false, + requestedBy: message.author, + url: data.url + }); + + if (extractor.important) break; + } } } - } - if (!track) track = await this._searchTracks(message, query, firstResult); + if (!track) track = await this._searchTracks(message, query, firstResult); + } } if (track) {