Added command and updated music player

Added enum with available source to play from
This commit is contained in:
Anthony committed 2018-03-11 23:50:29 -04:00
1 parent ae5e4176bf
commit 0122bacdbb
3 files changed
+138 -5

No files matched your search

@@ -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;
}
}
@@ -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<String, MusicManager> managers = new ConcurrentHashMap<>();
private final static Map<String, MusicManager> managers = new ConcurrentHashMap<>();
private long guildId;
private boolean isPlaying = false;
@@ -87,7 +89,9 @@ public class MusicManager {
}
public synchronized void stopMusic() {
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<String> getAllQueuedTrack() {
List<String> queuedTracks = new LinkedList<>();
scheduler.queue.forEach((a) -> queuedTracks.add(a.getInfo().title));
return queuedTracks;
}
}
@@ -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;
}
}