Updated audio handling logic
This commit is contained in:
26
pom.xml
26
pom.xml
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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() {
|
||||||
@@ -51,15 +56,43 @@ public class AudioHandler extends AudioEventAdapter implements AudioSendHandler
|
|||||||
player.setVolume(volume);
|
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
|
@Override
|
||||||
public void onTrackEnd(AudioPlayer player, AudioTrack track, AudioTrackEndReason endReason) {
|
public void onTrackEnd(AudioPlayer player, AudioTrack track, AudioTrackEndReason endReason) {
|
||||||
if (endReason.mayStartNext) {
|
// LOGGER.debug("Track ended: " + endReason.name() + "; starting next: " + endReason.mayStartNext);
|
||||||
nextTrack();
|
if (queue.isEmpty()) {
|
||||||
} else if (queue.isEmpty()) {
|
|
||||||
manager.getBot().closeAudioConnection(guildID);
|
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
|
||||||
public boolean canProvide() {
|
public boolean canProvide() {
|
||||||
// returns true if audio was provided
|
// returns true if audio was provided
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user