Updated audio handling logic

This commit is contained in:
2023-01-08 16:52:04 -05:00
parent 3c74682ff7
commit 81b0e68232
4 changed files with 83 additions and 24 deletions

26
pom.xml
View File

@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>com.bensherriff</groupId> <groupId>com.bensherriff</groupId>
<artifactId>siren</artifactId> <artifactId>siren</artifactId>
<version>0.1.0</version> <version>0.1.1</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<repositories> <repositories>
@@ -21,6 +21,11 @@
</repositories> </repositories>
<properties> <properties>
<jda.version>4.2.1_253</jda.version>
<lavaplayer.version>1.3.77</lavaplayer.version>
<jackson.version>2.14.0</jackson.version>
<slf4j.version>2.0.6</slf4j.version>
<log4j.version>2.19.0</log4j.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source> <maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target> <maven.compiler.target>17</maven.compiler.target>
@@ -32,39 +37,44 @@
<groupId>net.dv8tion</groupId> <groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId> <artifactId>JDA</artifactId>
<!-- <version>5.0.0-beta.2</version>--> <!-- <version>5.0.0-beta.2</version>-->
<version>4.2.1_253</version> <version>${jda.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.sedmelluq</groupId> <groupId>com.sedmelluq</groupId>
<artifactId>lavaplayer</artifactId> <artifactId>lavaplayer</artifactId>
<version>1.3.77</version> <version>${lavaplayer.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId> <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId> <artifactId>jackson-core</artifactId>
<version>2.14.0</version> <version>${jackson.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId> <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId> <artifactId>jackson-databind</artifactId>
<version>2.14.0</version> <version>${jackson.version}</version>
</dependency> </dependency>
<!-- Logging --> <!-- Logging -->
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
<version>2.0.5</version> <version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>${slf4j.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.logging.log4j</groupId> <groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId> <artifactId>log4j-api</artifactId>
<version>2.19.0</version> <version>${log4j.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.logging.log4j</groupId> <groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId> <artifactId>log4j-core</artifactId>
<version>2.19.0</version> <version>${log4j.version}</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@@ -86,9 +86,9 @@ public class MusicBot extends ListenerAdapter {
@Override @Override
public void onGuildMessageReceived(GuildMessageReceivedEvent event) { public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
String[] command = event.getMessage().getContentRaw().split(" ", 2);
if (event.getAuthor().isBot()) return; if (event.getAuthor().isBot()) return;
String[] command = event.getMessage().getContentRaw().split(" ", 2);
TextChannel channel = event.getChannel(); TextChannel channel = event.getChannel();
if ("!play".equals(command[0]) && command.length == 2) { if ("!play".equals(command[0]) && command.length == 2) {
@@ -96,9 +96,13 @@ public class MusicBot extends ListenerAdapter {
} else if ("!skip".equals(command[0])) { } else if ("!skip".equals(command[0])) {
skipTrack(channel); skipTrack(channel);
} else if ("!stop".equals(command[0])) { } else if ("!stop".equals(command[0])) {
stop(channel); stopTrack(channel);
} else if ("!volume".equals(command[0])) { } else if ("!volume".equals(command[0])) {
changeVolume(channel, command[1]); changeVolume(channel, command[1]);
} else if ("!pause".equals(command[0])) {
pauseTrack(channel);
} else if ("!resume".equals(command[0])) {
resumeTrack(channel);
} }
super.onGuildMessageReceived(event); super.onGuildMessageReceived(event);
@@ -126,7 +130,7 @@ public class MusicBot extends ListenerAdapter {
@Override @Override
public void trackLoaded(AudioTrack track) { public void trackLoaded(AudioTrack track) {
channel.sendMessage("Adding **" + track.getInfo().title + "** to queue").queue(); channel.sendMessage("Adding **" + track.getInfo().title + "** to queue").queue();
play(channel.getGuild(), audioHandler, track); playTrack(channel.getGuild(), audioHandler, track);
} }
@Override @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(); 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 @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()); connectToFirstVoiceChannel(guild.getAudioManager());
audioHandler.addTrack(track); audioHandler.addTrack(track);
} }
private void stop(TextChannel channel) { private void stopTrack(TextChannel channel) {
AudioHandler audioHandler = getGuildAudioPlayer(channel.getGuild()); AudioHandler audioHandler = getGuildAudioPlayer(channel.getGuild());
audioHandler.stopTrack(); audioHandler.stopTrack();
channel.getGuild().getAudioManager().closeAudioConnection(); channel.getGuild().getAudioManager().closeAudioConnection();
@@ -167,10 +171,22 @@ public class MusicBot extends ListenerAdapter {
private void skipTrack(TextChannel channel) { private void skipTrack(TextChannel channel) {
AudioHandler audioHandler = getGuildAudioPlayer(channel.getGuild()); AudioHandler audioHandler = getGuildAudioPlayer(channel.getGuild());
audioHandler.nextTrack(); audioHandler.stopTrack();
channel.sendMessage("Skipped to next track").queue(); 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) { private void changeVolume(TextChannel channel, String vol) {
AudioHandler audioHandler = getGuildAudioPlayer(channel.getGuild()); AudioHandler audioHandler = getGuildAudioPlayer(channel.getGuild());
int volume = Integer.parseInt(vol); int volume = Integer.parseInt(vol);

View File

@@ -2,10 +2,13 @@ package com.bensherriff.siren.audio;
import com.sedmelluq.discord.lavaplayer.player.AudioPlayer; import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
import com.sedmelluq.discord.lavaplayer.player.event.AudioEventAdapter; 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.AudioTrack;
import com.sedmelluq.discord.lavaplayer.track.AudioTrackEndReason; import com.sedmelluq.discord.lavaplayer.track.AudioTrackEndReason;
import com.sedmelluq.discord.lavaplayer.track.playback.MutableAudioFrame; import com.sedmelluq.discord.lavaplayer.track.playback.MutableAudioFrame;
import net.dv8tion.jda.api.audio.AudioSendHandler; 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.Buffer;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
@@ -13,7 +16,7 @@ import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
public class AudioHandler extends AudioEventAdapter implements AudioSendHandler { public class AudioHandler extends AudioEventAdapter implements AudioSendHandler {
private static final Logger LOGGER = LogManager.getLogger(AudioHandler.class);
private final PlayerManager manager; private final PlayerManager manager;
private final AudioPlayer player; private final AudioPlayer player;
private final ByteBuffer buffer; private final ByteBuffer buffer;
@@ -34,13 +37,15 @@ public class AudioHandler extends AudioEventAdapter implements AudioSendHandler
} }
public void addTrack(AudioTrack track) { public void addTrack(AudioTrack track) {
if (!player.startTrack(track, true)) { if (player.getPlayingTrack() == null) {
queue.offer(track); player.playTrack(track);
} else {
queue.add(track);
} }
} }
public void nextTrack() { public void setPaused(boolean paused) {
player.startTrack(queue.poll(), false); player.setPaused(paused);
} }
public void stopTrack() { public void stopTrack() {
@@ -52,12 +57,40 @@ public class AudioHandler extends AudioEventAdapter implements AudioSendHandler
} }
@Override @Override
public void onTrackEnd(AudioPlayer player, AudioTrack track, AudioTrackEndReason endReason) { public void onPlayerPause(AudioPlayer player) {
if (endReason.mayStartNext) { super.onPlayerPause(player);
nextTrack();
} else if (queue.isEmpty()) {
manager.getBot().closeAudioConnection(guildID);
} }
@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) {
// 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 @Override

View File

@@ -6,7 +6,7 @@
</Console> </Console>
</Appenders> </Appenders>
<Loggers> <Loggers>
<Root level="info"> <Root level="debug">
<AppenderRef ref="Console"/> <AppenderRef ref="Console"/>
</Root> </Root>
</Loggers> </Loggers>