diff --git a/pom.xml b/pom.xml
index 7e84762..e862457 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.bensherriff
siren
- 0.1.0
+ 0.1.1
jar
@@ -21,6 +21,11 @@
+ 4.2.1_253
+ 1.3.77
+ 2.14.0
+ 2.0.6
+ 2.19.0
UTF-8
17
17
@@ -32,39 +37,44 @@
net.dv8tion
JDA
- 4.2.1_253
+ ${jda.version}
com.sedmelluq
lavaplayer
- 1.3.77
+ ${lavaplayer.version}
com.fasterxml.jackson.core
jackson-core
- 2.14.0
+ ${jackson.version}
com.fasterxml.jackson.core
jackson-databind
- 2.14.0
+ ${jackson.version}
org.slf4j
slf4j-api
- 2.0.5
+ ${slf4j.version}
+
+
+ org.slf4j
+ slf4j-simple
+ ${slf4j.version}
org.apache.logging.log4j
log4j-api
- 2.19.0
+ ${log4j.version}
org.apache.logging.log4j
log4j-core
- 2.19.0
+ ${log4j.version}
diff --git a/src/main/java/com/bensherriff/siren/MusicBot.java b/src/main/java/com/bensherriff/siren/MusicBot.java
index f1271dd..d4a9bd1 100644
--- a/src/main/java/com/bensherriff/siren/MusicBot.java
+++ b/src/main/java/com/bensherriff/siren/MusicBot.java
@@ -86,9 +86,9 @@ public class MusicBot extends ListenerAdapter {
@Override
public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
- String[] command = event.getMessage().getContentRaw().split(" ", 2);
if (event.getAuthor().isBot()) return;
+ String[] command = event.getMessage().getContentRaw().split(" ", 2);
TextChannel channel = event.getChannel();
if ("!play".equals(command[0]) && command.length == 2) {
@@ -96,9 +96,13 @@ public class MusicBot extends ListenerAdapter {
} else if ("!skip".equals(command[0])) {
skipTrack(channel);
} else if ("!stop".equals(command[0])) {
- stop(channel);
+ stopTrack(channel);
} else if ("!volume".equals(command[0])) {
changeVolume(channel, command[1]);
+ } else if ("!pause".equals(command[0])) {
+ pauseTrack(channel);
+ } else if ("!resume".equals(command[0])) {
+ resumeTrack(channel);
}
super.onGuildMessageReceived(event);
@@ -126,7 +130,7 @@ public class MusicBot extends ListenerAdapter {
@Override
public void trackLoaded(AudioTrack track) {
channel.sendMessage("Adding **" + track.getInfo().title + "** to queue").queue();
- play(channel.getGuild(), audioHandler, track);
+ playTrack(channel.getGuild(), audioHandler, track);
}
@Override
@@ -138,7 +142,7 @@ public class MusicBot extends ListenerAdapter {
}
channel.sendMessage("Adding **" + firstTrack.getInfo().title + "** to queue (first track of playlist " + playlist.getName() + ")").queue();
- play(channel.getGuild(), audioHandler, firstTrack);
+ playTrack(channel.getGuild(), audioHandler, firstTrack);
}
@Override
@@ -153,12 +157,12 @@ public class MusicBot extends ListenerAdapter {
});
}
- private void play(Guild guild, AudioHandler audioHandler, AudioTrack track) {
+ private void playTrack(Guild guild, AudioHandler audioHandler, AudioTrack track) {
connectToFirstVoiceChannel(guild.getAudioManager());
audioHandler.addTrack(track);
}
- private void stop(TextChannel channel) {
+ private void stopTrack(TextChannel channel) {
AudioHandler audioHandler = getGuildAudioPlayer(channel.getGuild());
audioHandler.stopTrack();
channel.getGuild().getAudioManager().closeAudioConnection();
@@ -167,10 +171,22 @@ public class MusicBot extends ListenerAdapter {
private void skipTrack(TextChannel channel) {
AudioHandler audioHandler = getGuildAudioPlayer(channel.getGuild());
- audioHandler.nextTrack();
+ audioHandler.stopTrack();
channel.sendMessage("Skipped to next track").queue();
}
+ private void pauseTrack(TextChannel channel) {
+ AudioHandler audioHandler = getGuildAudioPlayer(channel.getGuild());
+ audioHandler.setPaused(true);
+ channel.sendMessage("Paused track").queue();
+ }
+
+ private void resumeTrack(TextChannel channel) {
+ AudioHandler audioHandler = getGuildAudioPlayer(channel.getGuild());
+ audioHandler.setPaused(false);
+ channel.sendMessage("Resumed track").queue();
+ }
+
private void changeVolume(TextChannel channel, String vol) {
AudioHandler audioHandler = getGuildAudioPlayer(channel.getGuild());
int volume = Integer.parseInt(vol);
diff --git a/src/main/java/com/bensherriff/siren/audio/AudioHandler.java b/src/main/java/com/bensherriff/siren/audio/AudioHandler.java
index f0ff198..25b2179 100644
--- a/src/main/java/com/bensherriff/siren/audio/AudioHandler.java
+++ b/src/main/java/com/bensherriff/siren/audio/AudioHandler.java
@@ -2,10 +2,13 @@ package com.bensherriff.siren.audio;
import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
import com.sedmelluq.discord.lavaplayer.player.event.AudioEventAdapter;
+import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
import com.sedmelluq.discord.lavaplayer.track.AudioTrackEndReason;
import com.sedmelluq.discord.lavaplayer.track.playback.MutableAudioFrame;
import net.dv8tion.jda.api.audio.AudioSendHandler;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import java.nio.Buffer;
import java.nio.ByteBuffer;
@@ -13,7 +16,7 @@ import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
public class AudioHandler extends AudioEventAdapter implements AudioSendHandler {
-
+ private static final Logger LOGGER = LogManager.getLogger(AudioHandler.class);
private final PlayerManager manager;
private final AudioPlayer player;
private final ByteBuffer buffer;
@@ -34,13 +37,15 @@ public class AudioHandler extends AudioEventAdapter implements AudioSendHandler
}
public void addTrack(AudioTrack track) {
- if (!player.startTrack(track, true)) {
- queue.offer(track);
+ if (player.getPlayingTrack() == null) {
+ player.playTrack(track);
+ } else {
+ queue.add(track);
}
}
- public void nextTrack() {
- player.startTrack(queue.poll(), false);
+ public void setPaused(boolean paused) {
+ player.setPaused(paused);
}
public void stopTrack() {
@@ -51,15 +56,43 @@ public class AudioHandler extends AudioEventAdapter implements AudioSendHandler
player.setVolume(volume);
}
+ @Override
+ public void onPlayerPause(AudioPlayer player) {
+ super.onPlayerPause(player);
+ }
+
+ @Override
+ public void onPlayerResume(AudioPlayer player) {
+ super.onPlayerResume(player);
+ }
+
+ @Override
+ public void onTrackStart(AudioPlayer player, AudioTrack track) {
+ super.onTrackStart(player, track);
+ }
+
@Override
public void onTrackEnd(AudioPlayer player, AudioTrack track, AudioTrackEndReason endReason) {
- if (endReason.mayStartNext) {
- nextTrack();
- } else if (queue.isEmpty()) {
+// LOGGER.debug("Track ended: " + endReason.name() + "; starting next: " + endReason.mayStartNext);
+ if (queue.isEmpty()) {
manager.getBot().closeAudioConnection(guildID);
+ } else {
+ player.playTrack(queue.poll());
}
}
+ @Override
+ public void onTrackException(AudioPlayer player, AudioTrack track, FriendlyException exception) {
+ LOGGER.warn("Exception on track" + track.getInfo().title + ": " + exception.getMessage());
+ super.onTrackException(player, track, exception);
+ }
+
+ @Override
+ public void onTrackStuck(AudioPlayer player, AudioTrack track, long thresholdMs) {
+ LOGGER.warn(guildID + " " + track.getInfo().title + " is stuck");
+ super.onTrackStuck(player, track, thresholdMs);
+ }
+
@Override
public boolean canProvide() {
// returns true if audio was provided
diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml
index ba459e6..447b8eb 100644
--- a/src/main/resources/log4j2.xml
+++ b/src/main/resources/log4j2.xml
@@ -6,7 +6,7 @@
-
+