UNPKG

discord-portable-player

Version:

Easy to use, framework to facilitate music commands using discord.js

78 lines (77 loc) 3.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.QueryResolver = void 0; const ytdl_core_1 = require("ytdl-core"); const youtube_sr_1 = require("youtube-sr"); const types_1 = require("../types/types"); // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore const soundcloud_scraper_1 = require("soundcloud-scraper"); // scary things below *sigh* const spotifySongRegex = /https?:\/\/(?:embed\.|open\.)(?:spotify\.com\/)(?:track\/|\?uri=spotify:track:)((\w|-){22})/; const spotifyPlaylistRegex = /https?:\/\/(?:embed\.|open\.)(?:spotify\.com\/)(?:playlist\/|\?uri=spotify:playlist:)((\w|-){22})/; const spotifyAlbumRegex = /https?:\/\/(?:embed\.|open\.)(?:spotify\.com\/)(?:album\/|\?uri=spotify:album:)((\w|-){22})/; const vimeoRegex = /(http|https)?:\/\/(www\.|player\.)?vimeo\.com\/(?:channels\/(?:\w+\/)?|groups\/([^/]*)\/videos\/|video\/|)(\d+)(?:|\/\?)/; const facebookRegex = /(https?:\/\/)(www\.|m\.)?(facebook|fb).com\/.*\/videos\/.*/; const reverbnationRegex = /https:\/\/(www.)?reverbnation.com\/(.+)\/song\/(.+)/; const appleMusicTrack = /https?:\/\/music\.apple\.com\/.+?\/album\/.+?\/.+?\?i=([0-9]+)/; const appleMusicPlaylist = /https?:\/\/music\.apple\.com\/.+?\/playlist\//; const appleMusicAlbum = /https?:\/\/music\.apple\.com\/.+?\/album\//; const attachmentRegex = /^(?:(?:https?|ftp):\/\/)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/\S*)?$/; // scary things above *sigh* class QueryResolver { /** * Query resolver */ constructor() { } // eslint-disable-line @typescript-eslint/no-empty-function /** * Resolves the given search query * @param {string} query The query * @returns {QueryType} */ static resolve(query) { if ((0, soundcloud_scraper_1.validateURL)(query, "track")) return types_1.QueryType.SoundCloudTrack; if ((0, soundcloud_scraper_1.validateURL)(query, "playlist") || query.includes("/sets/")) return types_1.QueryType.SoundCloudPlaylist; if (youtube_sr_1.YouTube.isPlaylist(query)) return types_1.QueryType.YouTubePlaylist; if ((0, ytdl_core_1.validateID)(query) || (0, ytdl_core_1.validateURL)(query)) return types_1.QueryType.YouTubeVideo; if (spotifySongRegex.test(query)) return types_1.QueryType.SpotifySong; if (spotifyPlaylistRegex.test(query)) return types_1.QueryType.SpotifyPlaylist; if (spotifyAlbumRegex.test(query)) return types_1.QueryType.SpotifyAlbum; if (vimeoRegex.test(query)) return types_1.QueryType.Vimeo; if (facebookRegex.test(query)) return types_1.QueryType.Facebook; if (reverbnationRegex.test(query)) return types_1.QueryType.Reverbnation; if (attachmentRegex.test(query)) return types_1.QueryType.Arbitrary; if (appleMusicTrack.test(query)) return types_1.QueryType.AppleMusicTrack; if (appleMusicPlaylist.test(query)) return types_1.QueryType.AppleMusicPlaylist; if (appleMusicAlbum.test(query)) return types_1.QueryType.AppleMusicAlbum; return types_1.QueryType.YouTubeSearch; } /** * Parses vimeo id from url * @param {string} query The query * @returns {string} */ static getVimeoID(query) { return QueryResolver.resolve(query) === types_1.QueryType.Vimeo ? query .split("/") .filter((x) => !!x) .pop() : null; } } exports.QueryResolver = QueryResolver;