From 0122bacdbb5ba5327d00429bbeffb26c38250644 Mon Sep 17 00:00:00 2001 From: Anthony Date: Sun, 11 Mar 2018 23:50:29 -0400 Subject: [PATCH] Added command and updated music player Added enum with available source to play from --- .../command/music/DeleteQueueCommand.java | 68 +++++++++++++++++++ .../netneutrality/music/MusicManager.java | 25 +++++-- .../netneutrality/music/SourceFinder.java | 52 ++++++++++++++ 3 files changed, 139 insertions(+), 6 deletions(-) create mode 100644 src/main/java/netneutrality/command/music/DeleteQueueCommand.java create mode 100644 src/main/java/netneutrality/music/SourceFinder.java diff --git a/src/main/java/netneutrality/command/music/DeleteQueueCommand.java b/src/main/java/netneutrality/command/music/DeleteQueueCommand.java new file mode 100644 index 0000000..b7a96dd --- /dev/null +++ b/src/main/java/netneutrality/command/music/DeleteQueueCommand.java @@ -0,0 +1,68 @@ +package netneutrality.command.music; + +/* + * Copyright (c) anthorob + * + * This file is closed-source. It should not be distributed or copied in any way or form + */ + +import net.dv8tion.jda.core.entities.Member; +import net.dv8tion.jda.core.entities.VoiceChannel; +import net.dv8tion.jda.core.events.message.MessageReceivedEvent; +import netneutrality.command.AbstractCommand; +import netneutrality.command.Visibility; +import netneutrality.music.MusicManager; + +public class DeleteQueueCommand extends AbstractCommand { + @Override + public boolean needAdmin() { + return true; + } + + @Override + public boolean isEnabled() { + return true; + } + + @Override + public String getCommand() { + return "deletequeue"; + } + + @Override + public String[] getAlias() { + return new String[]{"delq"}; + } + + @Override + public String getUsage() { + return null; + } + + @Override + public Visibility getVisibility() { + return Visibility.CHANNEL; + } + + @Override + public String execute(MessageReceivedEvent event, String args) { + Member member = event.getMember(); + MusicManager player = MusicManager.get(event.getGuild()); + + if (member.getVoiceState().inVoiceChannel()) { + VoiceChannel vChannel = member.getVoiceState().getChannel(); + + if (player.isConnected()) { + if (player.isConnectedTo(vChannel)) { + player.getScheduler().queue.clear(); + } else + event.getTextChannel().sendMessage("Not in your voice channel").queue(); + } else { + event.getTextChannel().sendMessage("Not in a voice channel").queue(); + } + } else + event.getTextChannel().sendMessage("You are not in a voice channel").queue(); + + return null; + } +} diff --git a/src/main/java/netneutrality/music/MusicManager.java b/src/main/java/netneutrality/music/MusicManager.java index a2ad70a..3760911 100644 --- a/src/main/java/netneutrality/music/MusicManager.java +++ b/src/main/java/netneutrality/music/MusicManager.java @@ -21,15 +21,17 @@ import netneutrality.MusicBot; import netneutrality.handler.LogHandler; import netneutrality.utils.YoutubeClass; +import java.util.LinkedList; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class MusicManager { - private AudioPlayerManager playerManager = new DefaultAudioPlayerManager(); + private final static AudioPlayerManager playerManager = new DefaultAudioPlayerManager(); private AudioPlayer player; private TrackScheduler scheduler; - private static Map managers = new ConcurrentHashMap<>(); + private final static Map managers = new ConcurrentHashMap<>(); private long guildId; private boolean isPlaying = false; @@ -87,7 +89,9 @@ public class MusicManager { } public synchronized void stopMusic() { - scheduler.getTextChannel().getManager().setTopic("").queue(); + if (scheduler.getTextChannel() != null) + scheduler.getTextChannel().getManager().setTopic("").queue(); + player.destroy(); } @@ -99,10 +103,9 @@ public class MusicManager { public synchronized void play(String url, TextChannel channel, boolean silent ) { - String youtubeCode = YoutubeClass.getCodeFromUrl(url); - System.out.println(youtubeCode); + String youtubeCode = SourceFinder.getIdentifier(url); scheduler.setTextChannel(channel); - if (!youtubeCode.isEmpty()) { + if (youtubeCode != null) { playerManager.loadItem(youtubeCode, new AudioLoadResultHandler() { @Override public void trackLoaded(AudioTrack audioTrack) { @@ -145,4 +148,14 @@ public class MusicManager { public void setVolume(int volume) { player.setVolume(volume); } + + public TrackScheduler getScheduler() { + return scheduler; + } + + public List getAllQueuedTrack() { + List queuedTracks = new LinkedList<>(); + scheduler.queue.forEach((a) -> queuedTracks.add(a.getInfo().title)); + return queuedTracks; + } } diff --git a/src/main/java/netneutrality/music/SourceFinder.java b/src/main/java/netneutrality/music/SourceFinder.java new file mode 100644 index 0000000..cdc59b1 --- /dev/null +++ b/src/main/java/netneutrality/music/SourceFinder.java @@ -0,0 +1,52 @@ +package netneutrality.music; + +import netneutrality.utils.YoutubeClass; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/* + * Copyright (c) anthorob + * + * This file is closed-source. It should not be distributed or copied in any way or form + */ +enum SourceEnum { + Youtube, + Soundcloud, + Bandcamp, + Vimeo, + Nothing + +} + +public class SourceFinder { + private static Pattern youtubePattern = Pattern.compile("^(?:https?://)?(?:(?:www\\.)?)?(?:youtube\\.com|youtu\\.be)/.*?(?:embed|e|v|watch.*?v=)?/?([-_a-z0-9]{10,})?(?:&?index=\\d+)?(?>(?:playlist\\?|&)?list=([^#\\\\&\\?]{12,}))?", Pattern.CASE_INSENSITIVE); + private static Matcher youtubeMatcher; + private static Matcher soudcloudMatcher; + private static Matcher BandcampMatcher; + private static Matcher vimeoMatcher; + + public static SourceEnum getSource(String url) { + youtubeMatcher = youtubePattern.matcher(url); + + if (youtubeMatcher.find()) + return SourceEnum.Youtube; + + return SourceEnum.Nothing; + } + + public static String getIdentifier(String url) { + String identifier = ""; + + switch (getSource(url)) { + + case Youtube: + return youtubeMatcher.group(1); + case Nothing: + identifier = null; + break; + } + + return identifier; + } +}