aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/soundchan/BotListener/BotListener.java36
-rw-r--r--src/main/java/soundchan/BotListener/Commands.java3
-rw-r--r--src/main/java/soundchan/TrackScheduler.java8
3 files changed, 46 insertions, 1 deletions
diff --git a/src/main/java/soundchan/BotListener/BotListener.java b/src/main/java/soundchan/BotListener/BotListener.java
index b8b4bad..4864ae2 100644
--- a/src/main/java/soundchan/BotListener/BotListener.java
+++ b/src/main/java/soundchan/BotListener/BotListener.java
@@ -13,6 +13,7 @@ import net.dv8tion.jda.core.entities.Guild;
import net.dv8tion.jda.core.entities.MessageChannel;
import net.dv8tion.jda.core.entities.VoiceChannel;
import net.dv8tion.jda.core.events.guild.voice.GuildVoiceJoinEvent;
+import net.dv8tion.jda.core.events.guild.voice.GuildVoiceLeaveEvent;
import net.dv8tion.jda.core.events.guild.voice.GuildVoiceMoveEvent;
import net.dv8tion.jda.core.events.message.MessageReceivedEvent;
import net.dv8tion.jda.core.hooks.ListenerAdapter;
@@ -35,6 +36,8 @@ public class BotListener extends ListenerAdapter{
private final Map<Long, GuildMusicManager> musicManagers;
private BotListenerHelpers helper = new BotListenerHelpers();
private Map<String, Future<?> > otherTasks;
+ private boolean hasAudience;
+ private Timer timer;
// From configuration file
private static String followingUser;
@@ -48,6 +51,8 @@ public class BotListener extends ListenerAdapter{
AudioSourceManagers.registerRemoteSources(playerManager);
AudioSourceManagers.registerLocalSource(playerManager);
+ hasAudience = false;
+ timer = new Timer();
loadProperties(properties);
}
@@ -151,6 +156,7 @@ public class BotListener extends ListenerAdapter{
});
}
}
+ hasAudience = true;
super.onGuildVoiceJoin(event);
}
@@ -167,6 +173,25 @@ public class BotListener extends ListenerAdapter{
}
@Override
+ public void onGuildVoiceLeave(GuildVoiceLeaveEvent event) {
+ if(event.getChannelLeft().getMembers().size() == 1) { // If only member in chat is SoundChan
+ hasAudience = false;
+ getGuildAudioPlayer().player.setPaused(true);
+ timer.schedule(new TimerTask() {
+ @Override
+ public void run() {
+ if(!hasAudience) {
+ clearQueue();
+ AudioManager audioManager = monitoredGuild.getAudioManager();
+ audioManager.closeAudioConnection();
+ }
+ }
+ }, 10000); // Wait 10 seconds before leaving channel
+ }
+ super.onGuildVoiceLeave(event);
+ }
+
+ @Override
public void onMessageReceived(MessageReceivedEvent event) {
String[] command = event.getMessage().getContentRaw().split(" ", 2);
@@ -236,9 +261,13 @@ public class BotListener extends ListenerAdapter{
// Print currently playing song with extra info
printCurrentlyPlaying(channel, true);
}else if(enumCommand == Commands.summon){
+ hasAudience = true;
connectToUserVoiceChannel(monitoredGuild.getAudioManager(), event.getMember().getEffectiveName());
}else if(enumCommand == Commands.help){
help(channel);
+ }else if(enumCommand == Commands.dropqueue) {
+ clearQueue();
+ channel.sendMessage("Queue has been cleared").queue();
}
}
@@ -471,4 +500,11 @@ public class BotListener extends ListenerAdapter{
executorService.shutdown();
}
+ /**
+ * Empty out the queue of things to play and stops currently playing audio
+ */
+ private void clearQueue() {
+ getGuildAudioPlayer().scheduler.emptyQueue();
+ }
+
}
diff --git a/src/main/java/soundchan/BotListener/Commands.java b/src/main/java/soundchan/BotListener/Commands.java
index 046bcab..2295fda 100644
--- a/src/main/java/soundchan/BotListener/Commands.java
+++ b/src/main/java/soundchan/BotListener/Commands.java
@@ -13,5 +13,6 @@ public enum Commands {
playingnow,
status,
summon,
- help
+ help,
+ dropqueue
}
diff --git a/src/main/java/soundchan/TrackScheduler.java b/src/main/java/soundchan/TrackScheduler.java
index cf7b1f8..7c14ebc 100644
--- a/src/main/java/soundchan/TrackScheduler.java
+++ b/src/main/java/soundchan/TrackScheduler.java
@@ -80,6 +80,14 @@ public class TrackScheduler extends AudioEventAdapter {
player.startTrack(queue.poll(), false);
}
+ /**
+ * Cleans out the queue of tracks and stops any playing track
+ */
+ public void emptyQueue() {
+ player.stopTrack();
+ queue.clear();
+ }
+
@Override
public void onTrackEnd(AudioPlayer player, AudioTrack track, AudioTrackEndReason endReason) {
// Only start the next track if the end reason is suitable for it (FINISHED or LOAD_FAILED)