Updated audio handling logic
This commit is contained in:
26
pom.xml
26
pom.xml
@@ -3,7 +3,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.bensherriff</groupId>
|
||||
<artifactId>siren</artifactId>
|
||||
<version>0.1.0</version>
|
||||
<version>0.1.1</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<repositories>
|
||||
@@ -21,6 +21,11 @@
|
||||
</repositories>
|
||||
|
||||
<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>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
<maven.compiler.target>17</maven.compiler.target>
|
||||
@@ -32,39 +37,44 @@
|
||||
<groupId>net.dv8tion</groupId>
|
||||
<artifactId>JDA</artifactId>
|
||||
<!-- <version>5.0.0-beta.2</version>-->
|
||||
<version>4.2.1_253</version>
|
||||
<version>${jda.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sedmelluq</groupId>
|
||||
<artifactId>lavaplayer</artifactId>
|
||||
<version>1.3.77</version>
|
||||
<version>${lavaplayer.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-core</artifactId>
|
||||
<version>2.14.0</version>
|
||||
<version>${jackson.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
<version>2.14.0</version>
|
||||
<version>${jackson.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Logging -->
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<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>
|
||||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-api</artifactId>
|
||||
<version>2.19.0</version>
|
||||
<version>${log4j.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-core</artifactId>
|
||||
<version>2.19.0</version>
|
||||
<version>${log4j.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
</Console>
|
||||
</Appenders>
|
||||
<Loggers>
|
||||
<Root level="info">
|
||||
<Root level="debug">
|
||||
<AppenderRef ref="Console"/>
|
||||
</Root>
|
||||
</Loggers>
|
||||
|
||||
Reference in New Issue
Block a user