diff options
| author | Donald Shan <xxpinapelzxx@gmail.com> | 2022-12-10 18:27:06 -0800 |
|---|---|---|
| committer | Donald Shan <xxpinapelzxx@gmail.com> | 2022-12-10 18:27:06 -0800 |
| commit | 05738d97ac129a2651543cd4364a19db9dfc544a (patch) | |
| tree | db9806e6ebd63cb2accb0e04d670323ce542e3ad /src | |
| parent | 17793af2f1dfd56f596d348fb5677f655baf8892 (diff) | |
Added recursive queue
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/Main.java | 4 | ||||
| -rw-r--r-- | src/main/java/audio/Music.java | 68 | ||||
| -rw-r--r-- | src/main/java/commands/CommandManager.java | 3 | ||||
| -rw-r--r-- | src/main/java/commands/UIPusher.java | 33 | ||||
| -rw-r--r-- | 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<String> 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<AudioTrack> queue = getGuildAudioPlayer(event.getGuild()).scheduler.queue;
+ List<SelectOption> trackMenuOptions = new ArrayList<SelectOption>();
+ 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
@@ -450,6 +487,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<amount;i++) {
+ String randomSong = spotifyAPI.getRandomPlaylistTrack_Sync(urlCheck.getSpotifyPlaylistID(playlistUrl));
+ loadAndPlay((TextChannel) event.getChannel(), youtubeAPI.returnTopVideoURL(spotifyAPI.getSearchTerm_sync(randomSong)), false);
+ }
+ event.getHook().sendMessage("Queueing " + amount + " songs recursively").queue();
+ }
+ catch(Exception e){
+ event.getHook().sendMessage("Error: " + e.getMessage()).queue();
+ }
+ System.out.println("Spotify Playlist Recursive");
+ }
+
+
+ }
public void loadAndPlay(final @NotNull TextChannel channel, final String trackUrl, boolean returnMessage) {
GuildMusicManager musicManager = getGuildAudioPlayer(channel.getGuild());
playerManager.loadItemOrdered(musicManager, trackUrl, new AudioLoadResultHandler() {
@@ -466,7 +523,6 @@ public class Music extends ListenerAdapter { @Override
public void playlistLoaded(AudioPlaylist playlist) {
AudioTrack firstTrack = playlist.getSelectedTrack();
-
if (firstTrack == null) {
firstTrack = playlist.getTracks().get(0);
}
diff --git a/src/main/java/commands/CommandManager.java b/src/main/java/commands/CommandManager.java index 05e501a..b8f4596 100644 --- a/src/main/java/commands/CommandManager.java +++ b/src/main/java/commands/CommandManager.java @@ -24,6 +24,9 @@ public class CommandManager extends ListenerAdapter { event.getGuild().getAudioManager().closeAudioConnection();
event.reply("OtsuRose! See you later!").queue();
break;
+ case "queue-recursive":
+ music.recursiveQueue(event, event.getOption("url").getAsString(), Integer.parseInt(event.getOption("amount").getAsString()));
+ break;
case "vtmusic":
event.deferReply().queue();
music.queueTrackFromLoadedList(event, Integer.parseInt(Objects.requireNonNull(event.getOption("number")).getAsString()), "VTubermusic.txt",vTuberSongDatabase);
diff --git a/src/main/java/commands/UIPusher.java b/src/main/java/commands/UIPusher.java index 6ebe61a..91f5dbf 100644 --- a/src/main/java/commands/UIPusher.java +++ b/src/main/java/commands/UIPusher.java @@ -27,38 +27,5 @@ public class UIPusher { )
.queue();
}
- public void showQueueMenu(SlashCommandEvent event, String param, String instruction,GuildMusicManager musicManager){
- Queue<AudioTrack> queue = musicManager.scheduler.queue;
- List<SelectOption> trackMenuOptions = new ArrayList<SelectOption>();
- 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();
+ }
+ }
}
|
