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 @@ - +