Added the ability to load an entire playlist from youtube.
This commit is contained in:
parent
d4163bbbea
commit
b33762f80d
2
pom.xml
2
pom.xml
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<groupId>com.github.andrewlalis</groupId>
|
<groupId>com.github.andrewlalis</groupId>
|
||||||
<artifactId>HandieBot</artifactId>
|
<artifactId>HandieBot</artifactId>
|
||||||
<version>1.5.3</version>
|
<version>1.6.0</version>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
|
|
|
@ -1,19 +1,26 @@
|
||||||
package handiebot.command.commands.music;
|
package handiebot.command.commands.music;
|
||||||
|
|
||||||
import com.google.api.services.youtube.model.Video;
|
import com.google.api.services.youtube.model.Video;
|
||||||
|
import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler;
|
||||||
|
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
|
||||||
|
import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
|
||||||
|
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
||||||
import handiebot.HandieBot;
|
import handiebot.HandieBot;
|
||||||
import handiebot.command.CommandContext;
|
import handiebot.command.CommandContext;
|
||||||
|
import handiebot.command.Commands;
|
||||||
import handiebot.command.ReactionHandler;
|
import handiebot.command.ReactionHandler;
|
||||||
import handiebot.command.reactionListeners.YoutubePlayListener;
|
import handiebot.command.reactionListeners.YoutubePlayListener;
|
||||||
import handiebot.command.types.ContextCommand;
|
import handiebot.command.types.ContextCommand;
|
||||||
import handiebot.lavaplayer.playlist.UnloadedTrack;
|
import handiebot.lavaplayer.playlist.UnloadedTrack;
|
||||||
import handiebot.utils.MessageUtils;
|
import handiebot.utils.MessageUtils;
|
||||||
import handiebot.utils.YoutubeSearch;
|
import handiebot.utils.YoutubeSearch;
|
||||||
|
import handiebot.view.BotLog;
|
||||||
import sx.blah.discord.handle.obj.IMessage;
|
import sx.blah.discord.handle.obj.IMessage;
|
||||||
|
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
import static handiebot.HandieBot.resourceBundle;
|
import static handiebot.HandieBot.resourceBundle;
|
||||||
import static handiebot.utils.MessageUtils.sendMessage;
|
import static handiebot.utils.MessageUtils.sendMessage;
|
||||||
|
@ -39,11 +46,50 @@ public class PlayCommand extends ContextCommand {
|
||||||
} else {
|
} else {
|
||||||
//Check if an actual URL is used, and if not, create a youtube request.
|
//Check if an actual URL is used, and if not, create a youtube request.
|
||||||
if (context.getArgs()[0].startsWith("http")) {
|
if (context.getArgs()[0].startsWith("http")) {
|
||||||
try {
|
if (context.getArgs()[0].contains("list") && Commands.hasPermission(context, 8)){
|
||||||
HandieBot.musicPlayer.addToQueue(context.getGuild(), new UnloadedTrack(context.getArgs()[0]), context.getUser());
|
try {
|
||||||
} catch (Exception e) {
|
HandieBot.musicPlayer.getPlayerManager().loadItem(context.getArgs()[0], new AudioLoadResultHandler() {
|
||||||
sendMessage(MessageFormat.format(resourceBundle.getString("commands.command.play.songAddError"), context.getArgs()[0]), context.getChannel());
|
@Override
|
||||||
e.printStackTrace();
|
public void trackLoaded(AudioTrack track) {
|
||||||
|
//This should not happen.
|
||||||
|
HandieBot.log.log(BotLog.TYPE.ERROR, "Loaded song while attempting to load playlist.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void playlistLoaded(AudioPlaylist playlist) {
|
||||||
|
//This is expected to happen.
|
||||||
|
HandieBot.log.log(BotLog.TYPE.MUSIC, "Loading a playlist named: "+playlist.getName()+" with "+playlist.getTracks().size()+" tracks.");
|
||||||
|
MessageUtils.sendMessage("Songs from the playlist **"+playlist.getName()+"** have been added to the queue.", context.getChannel());
|
||||||
|
HandieBot.musicPlayer.getMusicManager(context.getGuild()).scheduler.clearQueue();
|
||||||
|
for (AudioTrack track : playlist.getTracks()){
|
||||||
|
HandieBot.log.log(BotLog.TYPE.MUSIC, "Added song from playlist: "+track.getInfo().title);
|
||||||
|
HandieBot.musicPlayer.getMusicManager(context.getGuild()).scheduler.getActivePlaylist().addTrack(new UnloadedTrack(track));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void noMatches() {
|
||||||
|
//Error that nothing was found.
|
||||||
|
HandieBot.log.log(BotLog.TYPE.ERROR, "No matches while loading playlist.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void loadFailed(FriendlyException exception) {
|
||||||
|
//Error that loading failed.
|
||||||
|
HandieBot.log.log(BotLog.TYPE.ERROR, "Loading failed while loading playlist.");
|
||||||
|
}
|
||||||
|
}).get();
|
||||||
|
HandieBot.musicPlayer.playQueue(context.getGuild());
|
||||||
|
} catch (InterruptedException | ExecutionException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
HandieBot.musicPlayer.addToQueue(context.getGuild(), new UnloadedTrack(context.getArgs()[0]), context.getUser());
|
||||||
|
} catch (Exception e) {
|
||||||
|
sendMessage(MessageFormat.format(resourceBundle.getString("commands.command.play.songAddError"), context.getArgs()[0]), context.getChannel());
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//Construct a Youtube song choice.
|
//Construct a Youtube song choice.
|
||||||
|
|
|
@ -37,6 +37,7 @@ public class QueueCommand extends ContextCommand {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(CommandContext context) {
|
public void execute(CommandContext context) {
|
||||||
|
//TODO: Ensure that queue embed never runs out of space.
|
||||||
if (context.getArgs().length > 0){
|
if (context.getArgs().length > 0){
|
||||||
switch (context.getArgs()[0]){
|
switch (context.getArgs()[0]){
|
||||||
case ("all"):
|
case ("all"):
|
||||||
|
@ -74,6 +75,7 @@ public class QueueCommand extends ContextCommand {
|
||||||
} else {
|
} else {
|
||||||
sendMessage(resourceBundle.getString("commands.command.queue.remove.error"), context.getChannel());
|
sendMessage(resourceBundle.getString("commands.command.queue.remove.error"), context.getChannel());
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
case ("move"):
|
case ("move"):
|
||||||
if (context.getArgs().length == 3 && Commands.hasPermission(context, 8)){
|
if (context.getArgs().length == 3 && Commands.hasPermission(context, 8)){
|
||||||
int startIndex = Integer.parseInt(context.getArgs()[1]);
|
int startIndex = Integer.parseInt(context.getArgs()[1]);
|
||||||
|
@ -92,6 +94,7 @@ public class QueueCommand extends ContextCommand {
|
||||||
} else {
|
} else {
|
||||||
sendMessage(resourceBundle.getString("commands.command.queue.move.error"), context.getChannel());
|
sendMessage(resourceBundle.getString("commands.command.queue.move.error"), context.getChannel());
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
HandieBot.musicPlayer.showQueueList(context.getGuild(), false);
|
HandieBot.musicPlayer.showQueueList(context.getGuild(), false);
|
||||||
|
|
|
@ -17,7 +17,7 @@ import static handiebot.HandieBot.log;
|
||||||
* This is useful for quickly loading playlists and only loading a track when it is needed.
|
* This is useful for quickly loading playlists and only loading a track when it is needed.
|
||||||
*/
|
*/
|
||||||
public class UnloadedTrack implements Cloneable {
|
public class UnloadedTrack implements Cloneable {
|
||||||
|
//TODO: Externalize strings.
|
||||||
private String title;
|
private String title;
|
||||||
private String url;
|
private String url;
|
||||||
private long duration;
|
private long duration;
|
||||||
|
|
Loading…
Reference in New Issue