From 3f5d52830420a85818f1c8405ae17ca2b92b5806 Mon Sep 17 00:00:00 2001 From: Yuzu Date: Sun, 27 Feb 2022 21:40:59 +0700 Subject: [PATCH] Support YouTube playlist --- src/discord/MusicPlayer/Play.ts | 11 +++++++++++ src/providers/DiscordMusicPlayer.ts | 11 ++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/discord/MusicPlayer/Play.ts b/src/discord/MusicPlayer/Play.ts index 5b0b8ba..417033f 100644 --- a/src/discord/MusicPlayer/Play.ts +++ b/src/discord/MusicPlayer/Play.ts @@ -256,6 +256,17 @@ export default class Play { if (DiscordMusicPlayer.isYouTubeLink(query)) { let linkData = DiscordMusicPlayer.parseYouTubeLink(query); + + if(linkData.videoId === "" && linkData.list) { + let playlist = await DiscordMusicPlayer.getYouTubeSongsInPlayList(query); + const songs = await playlist.all_videos(); + + for(let song of songs) { + instance.addTrackToQueue(song); + } + return await sendMessageOrInteractionResponse(data, { embeds: [EMBEDS.ADDED_SONGS_QUEUE(data, songs)] }, true); + } + let result = await DiscordMusicPlayer.searchYouTubeByYouTubeLink(linkData); if (!result) return; diff --git a/src/providers/DiscordMusicPlayer.ts b/src/providers/DiscordMusicPlayer.ts index a1c8732..54cdf29 100644 --- a/src/providers/DiscordMusicPlayer.ts +++ b/src/providers/DiscordMusicPlayer.ts @@ -303,7 +303,9 @@ class DiscordMusicPlayer { } public async getYouTubeSongsInPlayList(youtubeLink: string) { - return await playdl.playlist_info(youtubeLink); + return await playdl.playlist_info(youtubeLink, { + incomplete: true + }); } public isYouTubeLink(link: string): boolean { @@ -336,6 +338,13 @@ class DiscordMusicPlayer { videoId: videoId } } + else if (query.startsWith('https://www.youtube.com/playlist?list=') || query.startsWith('http://www.youtube.com/playlist?list=')) { + let listId = query.split('?list=')[1]; + return { + videoId: "", + list: listId + } + } else { throw new Error('YouTube link is invalid'); }