From 84c8748731424ac1886a7cbdfa3b9c34ba7ef2b5 Mon Sep 17 00:00:00 2001 From: Anthony Date: Thu, 22 Feb 2018 13:30:11 -0500 Subject: [PATCH] Added join and leave command --- .../command/music/JoinCommand.java | 68 +++++++++++++++++++ .../command/music/LeaveCommand.java | 59 ++++++++++++++++ .../netneutrality/music/MusicManager.java | 38 ++++++++++- 3 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 src/main/java/netneutrality/command/music/JoinCommand.java create mode 100644 src/main/java/netneutrality/command/music/LeaveCommand.java diff --git a/src/main/java/netneutrality/command/music/JoinCommand.java b/src/main/java/netneutrality/command/music/JoinCommand.java new file mode 100644 index 0000000..78ef23e --- /dev/null +++ b/src/main/java/netneutrality/command/music/JoinCommand.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 JoinCommand extends AbstractCommand { + @Override + public boolean needAdmin() { + return true; + } + + @Override + public boolean isEnabled() { + return true; + } + + @Override + public String getCommand() { + return "join"; + } + + @Override + public String[] getAlias() { + return new String[0]; + } + + @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.connect(vChannel); + } else + event.getTextChannel().sendMessage("Already in a voice channel").queue(); + } else + event.getTextChannel().sendMessage("Already 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/command/music/LeaveCommand.java b/src/main/java/netneutrality/command/music/LeaveCommand.java new file mode 100644 index 0000000..8794c4e --- /dev/null +++ b/src/main/java/netneutrality/command/music/LeaveCommand.java @@ -0,0 +1,59 @@ +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 LeaveCommand extends AbstractCommand { + @Override + public boolean needAdmin() { + return true; + } + + @Override + public boolean isEnabled() { + return true; + } + + @Override + public String getCommand() { + return "leave"; + } + + @Override + public String[] getAlias() { + return new String[0]; + } + + @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()); + VoiceChannel vChannel = member.getVoiceState().getChannel(); + + if (player.isConnectedTo(vChannel)) { + player.leave(); + } + + return null; + } +} diff --git a/src/main/java/netneutrality/music/MusicManager.java b/src/main/java/netneutrality/music/MusicManager.java index 3b5dc23..0c34c1c 100644 --- a/src/main/java/netneutrality/music/MusicManager.java +++ b/src/main/java/netneutrality/music/MusicManager.java @@ -11,7 +11,8 @@ import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager; import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager; import com.sedmelluq.discord.lavaplayer.source.AudioSourceManagers; import net.dv8tion.jda.core.entities.Guild; -import net.dv8tion.jda.core.managers.AudioManager; +import net.dv8tion.jda.core.entities.VoiceChannel; +import netneutrality.MusicBot; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -23,6 +24,7 @@ public class MusicManager { private TrackScheduler scheduler; private static Map managers = new ConcurrentHashMap<>(); private long guildId; + private boolean isPlaying = false; private MusicManager(Guild guild) { @@ -43,4 +45,38 @@ public class MusicManager { return new MusicManager(guild); } } + + public boolean isConnectedTo(VoiceChannel vChannel) { + return vChannel != null && vChannel.equals(MusicBot.getJDA().getGuildById(guildId).getAudioManager().getConnectedChannel()); + } + + public void connect(VoiceChannel vChannel) { + if (vChannel != null && !isConnectedTo(vChannel)) { + Guild guild = MusicBot.getJDA().getGuildById(guildId); + guild.getAudioManager().openAudioConnection(vChannel); + } else + MusicBot.LOGGER.debug("Error connecting!"); + } + + public boolean isConnected() { + Guild guild = MusicBot.getJDA().getGuildById(guildId); + return guild != null && guild.getAudioManager().getConnectedChannel() != null; + } + + public boolean leave() { + if (isConnected()) { + stopMusic(); + } + + Guild guild = MusicBot.getJDA().getGuildById(guildId); + if (guild != null) { + guild.getAudioManager().closeAudioConnection(); + } + + return true; + } + + public synchronized void stopMusic() { + player.destroy(); + } }