From 05738d97ac129a2651543cd4364a19db9dfc544a Mon Sep 17 00:00:00 2001 From: Donald Shan Date: Sat, 10 Dec 2022 18:27:06 -0800 Subject: Added recursive queue --- src/main/java/Main.java | 4 ++ src/main/java/audio/Music.java | 68 +++++++++++++++++++++++++++--- src/main/java/commands/CommandManager.java | 3 ++ src/main/java/commands/UIPusher.java | 33 --------------- src/main/java/utility/YouTubeAPI.java | 20 +++++++++ 5 files changed, 89 insertions(+), 39 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 0446a86..30983d9 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -40,6 +40,10 @@ public class Main extends ListenerAdapter { jda.upsertCommand(new CommandData("play","Adds a song to the queue with a URL or search terms"). addOption(OptionType.STRING,"term","The link or search terms of the music to queue") ).queue(); + jda.upsertCommand(new CommandData("queue-recursive","Adds a set amount of random songs from a playlist"). + addOption(OptionType.STRING,"url","The link of the playlist") + .addOption(OptionType.INTEGER,"amount","The amount of songs to queue") + ).queue(); jda.upsertCommand(new CommandData("leave","Clears the queue and disconnects the bot from voice channel")).queue(); jda.upsertCommand(new CommandData("showqueue","Shows the current queue")).queue(); jda.upsertCommand(new CommandData("pause","Pauses the player")).queue(); diff --git a/src/main/java/audio/Music.java b/src/main/java/audio/Music.java index d85a4bc..26c7773 100644 --- a/src/main/java/audio/Music.java +++ b/src/main/java/audio/Music.java @@ -19,6 +19,8 @@ import net.dv8tion.jda.api.events.interaction.SelectionMenuEvent; import net.dv8tion.jda.api.events.interaction.SlashCommandEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; +import net.dv8tion.jda.api.interactions.components.selections.SelectOption; +import net.dv8tion.jda.api.interactions.components.selections.SelectionMenu; import net.dv8tion.jda.api.managers.AudioManager; import org.jetbrains.annotations.NotNull; import se.michaelthelin.spotify.model_objects.specification.PlaylistTrack; @@ -30,6 +32,7 @@ import java.awt.*; import java.io.*; import java.net.MalformedURLException; import java.net.URL; +import java.util.List; import java.util.Queue; import java.util.*; import java.util.concurrent.BlockingQueue; @@ -38,7 +41,6 @@ import java.util.concurrent.LinkedBlockingQueue; public class Music extends ListenerAdapter { ArrayList currentlyLoadedPlaylist = new ArrayList<>(); String ytapiKey; - private final YouTubeAPI youtubeAPI = new YouTubeAPI(ytapiKey); static String append = "$"; private final URLChecker urlCheck = new URLChecker(); UIPusher uiPusher = new UIPusher(); @@ -124,19 +126,53 @@ public class Music extends ListenerAdapter { if((append+"holoadd").equals(command[0])){ event.getChannel().sendMessage("The url has been successfully added to the database").queue(); } - else if("!dev".equals(command[0])){ + /* else if("!dev".equals(command[0])){ try { - System.out.println("Attempting to play"); + YouTubeAPI youTubeAPI = new YouTubeAPI(ytapiKey); + youTubeAPI.getAllURLPlaylist("PLQmVFdwvZgfXlb2RDXWV1NaPXgYPu786G"); } catch (Exception e){ } - } + }*/ super.onGuildMessageReceived(event); } public void showQueueMenu(SlashCommandEvent event, String param, String instruction){ - uiPusher.showQueueMenu(event,param,instruction,getGuildAudioPlayer(event.getGuild())); + Guild guild = event.getGuild(); + GuildMusicManager mng = getGuildAudioPlayer(guild); + Queue queue = getGuildAudioPlayer(event.getGuild()).scheduler.queue; + List trackMenuOptions = new ArrayList(); + synchronized (queue) + { + if (queue.isEmpty()) + { + event.reply("The queue is currently empty!").queue(); + } + else + { + int trackCount = 0; + for (AudioTrack track : queue) + { + if (trackCount != 25) + { + SelectOption option = SelectOption.of(track.getInfo().title,param+" "+track.getInfo().title); + trackMenuOptions.add(option); + trackCount++; + } + } + SelectionMenu menu = SelectionMenu.create("menu:class") + .setPlaceholder("-Select a track-") // shows the placeholder indicating what this menu is for + .setRequiredRange(1,1)// only one can be selected + .addOptions(trackMenuOptions) + .build(); + event.reply(instruction) + .setEphemeral(true) + .addActionRow(menu) + .queue(); + + } + } } public void showControls(SlashCommandEvent event){ uiPusher.showControls(event); @@ -164,6 +200,7 @@ public class Music extends ListenerAdapter { } public void playMusic(SlashCommandEvent event){ + final YouTubeAPI youtubeAPI = new YouTubeAPI(ytapiKey); try { String userQuery = event.getOption("term").getAsString(); if (urlCheck.isURL(userQuery) && !urlCheck.getURLType(userQuery).equals("spotify")&&!urlCheck.getURLType(userQuery).equals("spotify-playlist")) { //The term is a URL @@ -449,6 +486,26 @@ public class Music extends ListenerAdapter { } + } + public void recursiveQueue(SlashCommandEvent event, String playlistUrl,int amount){ + final YouTubeAPI youtubeAPI = new YouTubeAPI(ytapiKey); + System.out.println(urlCheck.getURLType(playlistUrl)); + if(urlCheck.isURL(playlistUrl) && urlCheck.getURLType(playlistUrl).equals("spotify-playlist")){ + event.deferReply().queue(); + try { + for(int i = 0;i queue = musicManager.scheduler.queue; - List trackMenuOptions = new ArrayList(); - synchronized (queue) - { - if (queue.isEmpty()) - { - event.reply("The queue is currently empty!").queue(); - } - else - { - int trackCount = 0; - for (AudioTrack track : queue) - { - if (trackCount != 25) - { - SelectOption option = SelectOption.of(track.getInfo().title,param+" "+track.getInfo().title); - trackMenuOptions.add(option); - trackCount++; - } - } - SelectionMenu menu = SelectionMenu.create("menu:class") - .setPlaceholder("-Select a track-") // shows the placeholder indicating what this menu is for - .setRequiredRange(1,1)// only one can be selected - .addOptions(trackMenuOptions) - .build(); - event.reply(instruction) - .setEphemeral(true) - .addActionRow(menu) - .queue(); - } - } - } } diff --git a/src/main/java/utility/YouTubeAPI.java b/src/main/java/utility/YouTubeAPI.java index ea3896b..61b48ed 100644 --- a/src/main/java/utility/YouTubeAPI.java +++ b/src/main/java/utility/YouTubeAPI.java @@ -5,6 +5,7 @@ import org.json.JSONObject; import org.jsoup.Jsoup; import java.io.IOException; +import java.util.ArrayList; public class YouTubeAPI { private String ytapiKey = ""; @@ -25,4 +26,23 @@ public class YouTubeAPI { } return "https://www.youtube.com/watch?v="+videoID; } + public void getAllURLPlaylist(String playlistID){ + try { + String url = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=50&playlistId="+playlistID+"&key="+ytapiKey; + System.out.println(url); + url = url.replaceAll(" ", "%20"); + String data = Jsoup.connect(url).ignoreContentType(true).execute().body(); + JSONObject obj = new JSONObject(data); + JSONArray arr = obj.getJSONArray("items"); + //print arr + for (int i = 0; i < arr.length(); i++) { + String videoID = arr.getJSONObject(i).getJSONObject("id").getString("videoId"); + System.out.println("Parsed ID " + videoID); + } + + } + catch (IOException e) { + e.printStackTrace(); + } + } } -- cgit v1.2.3