v0.1.7 - Settings handling tweaks
This commit is contained in:
@@ -9,7 +9,7 @@ services:
|
||||
dockerfile: ./Dockerfile
|
||||
args:
|
||||
- JAVA_VERSION=17
|
||||
- VERSION=0.1.6
|
||||
- VERSION=0.1.7
|
||||
volumes:
|
||||
- ./data:/app
|
||||
restart: unless-stopped
|
||||
|
||||
2
pom.xml
2
pom.xml
@@ -3,7 +3,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.bensherriff</groupId>
|
||||
<artifactId>siren</artifactId>
|
||||
<version>0.1.6</version>
|
||||
<version>0.1.7</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<repositories>
|
||||
|
||||
@@ -10,6 +10,7 @@ import net.dv8tion.jda.api.audio.AudioSendHandler;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.Buffer;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.concurrent.BlockingQueue;
|
||||
@@ -27,7 +28,7 @@ public class AudioHandler extends AudioEventAdapter implements AudioSendHandler
|
||||
public AudioHandler(PlayerManager manager, long guildID) {
|
||||
this.manager = manager;
|
||||
player = manager.createPlayer();
|
||||
player.setVolume(manager.getListener().getSettings().getVolume());
|
||||
player.setVolume(manager.getListener().getSettings().getGuildSettings().get(guildID).getVolume());
|
||||
player.addListener(this);
|
||||
this.queue = new LinkedBlockingQueue<>();
|
||||
this.buffer = ByteBuffer.allocate(1024);
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.bensherriff.siren.exceptions;
|
||||
|
||||
public class EmptyVoiceChannelException extends Exception {
|
||||
|
||||
public EmptyVoiceChannelException(String errorMessage) {
|
||||
super(errorMessage);
|
||||
}
|
||||
|
||||
public EmptyVoiceChannelException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
}
|
||||
@@ -3,8 +3,10 @@ package com.bensherriff.siren.listener;
|
||||
import com.bensherriff.siren.audio.AudioHandler;
|
||||
import com.bensherriff.siren.audio.PlayerManager;
|
||||
import com.bensherriff.siren.commands.Command;
|
||||
import com.bensherriff.siren.commands.PlayCommand;
|
||||
import com.bensherriff.siren.exceptions.EmptyVoiceChannelException;
|
||||
import com.bensherriff.siren.settings.GuildSettings;
|
||||
import com.bensherriff.siren.settings.Settings;
|
||||
import com.bensherriff.siren.settings.SettingsManager;
|
||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
@@ -57,12 +59,16 @@ public abstract class Listener extends ListenerAdapter {
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized AudioHandler getGuildAudioPlayer(Guild guild) {
|
||||
public synchronized AudioHandler getGuildAudioPlayer(Guild guild) throws IOException {
|
||||
long guildId = Long.parseLong(guild.getId());
|
||||
AudioHandler audioHandler = musicManagers.get(guildId);
|
||||
|
||||
if (audioHandler == null) {
|
||||
LOGGER.info("Creating Audio Handler for guild {}", guildId);
|
||||
if (!settings.getGuildSettings().containsKey(guildId)) {
|
||||
settings.getGuildSettings().put(guildId, new GuildSettings());
|
||||
SettingsManager.write(settings);
|
||||
}
|
||||
audioHandler = new AudioHandler(playerManager, guildId);
|
||||
musicManagers.put(guildId, audioHandler);
|
||||
}
|
||||
@@ -79,44 +85,49 @@ public abstract class Listener extends ListenerAdapter {
|
||||
super.onReady(event);
|
||||
}
|
||||
|
||||
protected void playTrack(Guild guild, String userID, AudioHandler audioHandler, AudioTrack track) {
|
||||
protected void playTrack(Guild guild, String userID, AudioHandler audioHandler, AudioTrack track) throws EmptyVoiceChannelException {
|
||||
connectToVoiceChannel(userID, guild.getAudioManager());
|
||||
audioHandler.addTrack(track);
|
||||
}
|
||||
|
||||
protected void stopTrack(Guild guild) {
|
||||
protected void stopTrack(Guild guild) throws IOException {
|
||||
AudioHandler audioHandler = getGuildAudioPlayer(guild);
|
||||
audioHandler.stopTrack();
|
||||
guild.getAudioManager().closeAudioConnection();
|
||||
}
|
||||
|
||||
protected void skipTrack(Guild guild) {
|
||||
protected void skipTrack(Guild guild) throws IOException {
|
||||
AudioHandler audioHandler = getGuildAudioPlayer(guild);
|
||||
audioHandler.stopTrack();
|
||||
}
|
||||
|
||||
protected void pauseTrack(Guild guild) {
|
||||
protected void pauseTrack(Guild guild) throws IOException {
|
||||
AudioHandler audioHandler = getGuildAudioPlayer(guild);
|
||||
audioHandler.setPaused(true);
|
||||
}
|
||||
|
||||
protected void resumeTrack(Guild guild) {
|
||||
protected void resumeTrack(Guild guild) throws IOException {
|
||||
AudioHandler audioHandler = getGuildAudioPlayer(guild);
|
||||
audioHandler.setPaused(false);
|
||||
}
|
||||
|
||||
protected void changeVolume(Guild guild, int volume) throws IOException {
|
||||
AudioHandler audioHandler = getGuildAudioPlayer(guild);
|
||||
getSettings().setVolume(volume);
|
||||
settings.getGuildSettings().get(guild.getIdLong()).setVolume(volume);
|
||||
SettingsManager.write(getSettings());
|
||||
audioHandler.setVolume(volume);
|
||||
}
|
||||
|
||||
private void connectToVoiceChannel(String userID, AudioManager audioManager) {
|
||||
private void connectToVoiceChannel(String userID, AudioManager audioManager) throws EmptyVoiceChannelException {
|
||||
if (!audioManager.isConnected()) {
|
||||
Member member = audioManager.getGuild().getMemberById(userID);
|
||||
if (member != null && member.getVoiceState() != null && member.getVoiceState().inAudioChannel()) {
|
||||
VoiceChannel voiceChannel = Objects.requireNonNull(member.getVoiceState().getChannel()).asVoiceChannel();
|
||||
audioManager.openAudioConnection(voiceChannel);
|
||||
if (member != null) {
|
||||
if (member.getVoiceState() != null && member.getVoiceState().inAudioChannel()) {
|
||||
VoiceChannel voiceChannel = Objects.requireNonNull(member.getVoiceState().getChannel()).asVoiceChannel();
|
||||
audioManager.openAudioConnection(voiceChannel);
|
||||
} else {
|
||||
throw new EmptyVoiceChannelException("Member {} is not connected to a voice channel");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.bensherriff.siren.listener;
|
||||
|
||||
import com.bensherriff.siren.audio.AudioHandler;
|
||||
import com.bensherriff.siren.exceptions.EmptyVoiceChannelException;
|
||||
import com.bensherriff.siren.settings.Settings;
|
||||
import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler;
|
||||
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
|
||||
@@ -47,50 +48,58 @@ public class SlashListener extends Listener {
|
||||
String command = event.getName();
|
||||
event.deferReply().queue();
|
||||
|
||||
switch (command) {
|
||||
case "play" -> {
|
||||
String trackURL = Objects.requireNonNull(event.getOption("url")).getAsString();
|
||||
loadAndPlay(guild, userId, trackURL, event);
|
||||
}
|
||||
case "skip" -> {
|
||||
skipTrack(guild);
|
||||
event.getHook().sendMessage("Skipped to the next track").queue();
|
||||
}
|
||||
case "stop" -> {
|
||||
stopTrack(guild);
|
||||
event.getHook().sendMessage("Stopped track and cleared queue").queue();
|
||||
}
|
||||
case "volume" -> {
|
||||
int volume = Objects.requireNonNull(event.getOption("volume")).getAsInt();
|
||||
try {
|
||||
changeVolume(guild, volume);
|
||||
} catch (IOException ex) {
|
||||
event.getHook().sendMessage("Unable to set the volume").queue();
|
||||
LOGGER.error(ex.getMessage());
|
||||
try {
|
||||
switch (command) {
|
||||
case "play" -> {
|
||||
String trackURL = Objects.requireNonNull(event.getOption("url")).getAsString();
|
||||
loadAndPlay(guild, userId, trackURL, event);
|
||||
}
|
||||
event.getHook().sendMessage("Set volume to " + volume).queue();
|
||||
case "skip" -> {
|
||||
skipTrack(guild);
|
||||
event.getHook().sendMessage("Skipped to the next track").queue();
|
||||
}
|
||||
case "stop" -> {
|
||||
stopTrack(guild);
|
||||
event.getHook().sendMessage("Stopped track and cleared queue").queue();
|
||||
}
|
||||
case "volume" -> {
|
||||
int volume = Objects.requireNonNull(event.getOption("volume")).getAsInt();
|
||||
try {
|
||||
changeVolume(guild, volume);
|
||||
} catch (IOException ex) {
|
||||
event.getHook().sendMessage("Unable to set the volume").queue();
|
||||
LOGGER.error(ex.getMessage());
|
||||
}
|
||||
event.getHook().sendMessage("Set volume to " + volume).queue();
|
||||
}
|
||||
case "pause" -> {
|
||||
pauseTrack(guild);
|
||||
event.getHook().sendMessage("Pausing track").queue();
|
||||
}
|
||||
case "resume" -> {
|
||||
resumeTrack(guild);
|
||||
event.getHook().sendMessage("Resumed track").queue();
|
||||
}
|
||||
default -> event.getHook().sendMessage("Invalid command").queue();
|
||||
}
|
||||
case "pause" -> {
|
||||
pauseTrack(guild);
|
||||
event.getHook().sendMessage("Pausing track").queue();
|
||||
}
|
||||
case "resume" -> {
|
||||
resumeTrack(guild);
|
||||
event.getHook().sendMessage("Resumed track").queue();
|
||||
}
|
||||
default -> event.getHook().sendMessage("Invalid command").queue();
|
||||
} catch (IOException ex) {
|
||||
LOGGER.error(ex.getMessage());
|
||||
}
|
||||
super.onSlashCommandInteraction(event);
|
||||
}
|
||||
|
||||
private void loadAndPlay(Guild guild, final String userID, final String trackUrl, SlashCommandInteractionEvent event) {
|
||||
private void loadAndPlay(Guild guild, final String userID, final String trackUrl, SlashCommandInteractionEvent event) throws IOException {
|
||||
AudioHandler audioHandler = getGuildAudioPlayer(guild);
|
||||
|
||||
playerManager.loadItemOrdered(audioHandler, trackUrl, new AudioLoadResultHandler() {
|
||||
@Override
|
||||
public void trackLoaded(AudioTrack track) {
|
||||
event.getHook().sendMessage("Adding **" + track.getInfo().title + "** to queue").queue();
|
||||
playTrack(guild, userID, audioHandler, track);
|
||||
try {
|
||||
playTrack(guild, userID, audioHandler, track);
|
||||
event.getHook().sendMessage("Adding **" + track.getInfo().title + "** to queue").queue();
|
||||
} catch (EmptyVoiceChannelException e) {
|
||||
event.getHook().sendMessage("You must connect to a voice channel first!").queue();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -101,8 +110,12 @@ public class SlashListener extends Listener {
|
||||
firstTrack = playlist.getTracks().get(0);
|
||||
}
|
||||
|
||||
event.getHook().sendMessage("Adding **" + firstTrack.getInfo().title + "** to queue (first track of playlist " + playlist.getName() + ")").queue();
|
||||
playTrack(guild, userID, audioHandler, firstTrack);
|
||||
try {
|
||||
playTrack(guild, userID, audioHandler, firstTrack);
|
||||
event.getHook().sendMessage("Adding **" + firstTrack.getInfo().title + "** to queue (first track of playlist " + playlist.getName() + ")").queue();
|
||||
} catch (EmptyVoiceChannelException e) {
|
||||
event.getHook().sendMessage("You must connect to a voice channel first!").queue();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.bensherriff.siren.listener;
|
||||
|
||||
import com.bensherriff.siren.audio.AudioHandler;
|
||||
import com.bensherriff.siren.commands.CommandEvent;
|
||||
import com.bensherriff.siren.exceptions.EmptyVoiceChannelException;
|
||||
import com.bensherriff.siren.settings.Settings;
|
||||
import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler;
|
||||
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
|
||||
@@ -29,51 +30,59 @@ public class TextListener extends Listener {
|
||||
TextChannel channel = event.getChannel().asTextChannel();
|
||||
String userID = event.getAuthor().getId();
|
||||
Guild guild = channel.getGuild();
|
||||
AudioHandler audioHandler = getGuildAudioPlayer(guild);
|
||||
// AudioHandler audioHandler = getGuildAudioPlayer(guild);
|
||||
|
||||
CommandEvent commandEvent = new CommandEvent.CommandBuilder(command[0], userID)
|
||||
.setTextChannel(channel)
|
||||
.setGuild(guild)
|
||||
.setAudioHandler(audioHandler)
|
||||
.setArgs(Arrays.asList(command).subList(1, command.length))
|
||||
.build();
|
||||
// CommandEvent commandEvent = new CommandEvent.CommandBuilder(command[0], userID)
|
||||
// .setTextChannel(channel)
|
||||
// .setGuild(guild)
|
||||
// .setAudioHandler(audioHandler)
|
||||
// .setArgs(Arrays.asList(command).subList(1, command.length))
|
||||
// .build();
|
||||
|
||||
if ("!play".equals(command[0]) && command.length == 2) {
|
||||
loadAndPlay(channel, userID, command[1]);
|
||||
} else if ("!skip".equals(command[0])) {
|
||||
skipTrack(guild);
|
||||
channel.sendMessage("Skipped to the next track").queue();
|
||||
} else if ("!stop".equals(command[0])) {
|
||||
stopTrack(guild);
|
||||
channel.sendMessage("Stopped track and cleared queue").queue();
|
||||
} else if ("!volume".equals(command[0]) && command.length == 2) {
|
||||
int volume = Integer.parseInt(command[1]);
|
||||
try {
|
||||
changeVolume(guild, volume);
|
||||
} catch (IOException ex) {
|
||||
channel.sendMessage("Unable to update the settings file.").queue();
|
||||
LOGGER.error(ex.getMessage());
|
||||
try {
|
||||
if ("!play".equals(command[0]) && command.length == 2) {
|
||||
loadAndPlay(channel, userID, command[1]);
|
||||
} else if ("!skip".equals(command[0])) {
|
||||
skipTrack(guild);
|
||||
channel.sendMessage("Skipped to the next track").queue();
|
||||
} else if ("!stop".equals(command[0])) {
|
||||
stopTrack(guild);
|
||||
channel.sendMessage("Stopped track and cleared queue").queue();
|
||||
} else if ("!volume".equals(command[0]) && command.length == 2) {
|
||||
int volume = Integer.parseInt(command[1]);
|
||||
try {
|
||||
changeVolume(guild, volume);
|
||||
} catch (IOException ex) {
|
||||
channel.sendMessage("Unable to update the settings file.").queue();
|
||||
LOGGER.error(ex.getMessage());
|
||||
}
|
||||
channel.sendMessage("Set volume to " + command[1]).queue();
|
||||
} else if ("!pause".equals(command[0])) {
|
||||
pauseTrack(guild);
|
||||
channel.sendMessage("Paused track").queue();
|
||||
} else if ("!resume".equals(command[0])) {
|
||||
resumeTrack(guild);
|
||||
channel.sendMessage("Resumed track").queue();
|
||||
}
|
||||
channel.sendMessage("Set volume to " + command[1]).queue();
|
||||
} else if ("!pause".equals(command[0])) {
|
||||
pauseTrack(guild);
|
||||
channel.sendMessage("Paused track").queue();
|
||||
} else if ("!resume".equals(command[0])) {
|
||||
resumeTrack(guild);
|
||||
channel.sendMessage("Resumed track").queue();
|
||||
} catch (IOException ex) {
|
||||
LOGGER.error(ex.getMessage());
|
||||
}
|
||||
|
||||
super.onMessageReceived(event);
|
||||
}
|
||||
|
||||
private void loadAndPlay(final TextChannel channel, final String userID, final String trackUrl) {
|
||||
private void loadAndPlay(final TextChannel channel, final String userID, final String trackUrl) throws IOException {
|
||||
AudioHandler audioHandler = getGuildAudioPlayer(channel.getGuild());
|
||||
|
||||
playerManager.loadItemOrdered(audioHandler, trackUrl, new AudioLoadResultHandler() {
|
||||
@Override
|
||||
public void trackLoaded(AudioTrack track) {
|
||||
channel.sendMessage("Adding **" + track.getInfo().title + "** to queue").queue();
|
||||
playTrack(channel.getGuild(), userID, audioHandler, track);
|
||||
try {
|
||||
playTrack(channel.getGuild(), userID, audioHandler, track);
|
||||
channel.sendMessage("Adding **" + track.getInfo().title + "** to queue").queue();
|
||||
} catch (EmptyVoiceChannelException e) {
|
||||
channel.sendMessage("You must connect to a voice channel first!").queue();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -84,8 +93,12 @@ public class TextListener extends Listener {
|
||||
firstTrack = playlist.getTracks().get(0);
|
||||
}
|
||||
|
||||
channel.sendMessage("Adding **" + firstTrack.getInfo().title + "** to queue (first track of playlist " + playlist.getName() + ")").queue();
|
||||
playTrack(channel.getGuild(), userID, audioHandler, firstTrack);
|
||||
try {
|
||||
playTrack(channel.getGuild(), userID, audioHandler, firstTrack);
|
||||
channel.sendMessage("Adding **" + firstTrack.getInfo().title + "** to queue (first track of playlist " + playlist.getName() + ")").queue();
|
||||
} catch (EmptyVoiceChannelException e) {
|
||||
channel.sendMessage("You must connect to a voice channel first!").queue();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.bensherriff.siren.settings;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class GuildSettings {
|
||||
|
||||
private String prefix = "!";
|
||||
private int volume = 100;
|
||||
|
||||
public String getPrefix() {
|
||||
return prefix;
|
||||
}
|
||||
|
||||
public void setPrefix(String prefix) {
|
||||
this.prefix = prefix;
|
||||
}
|
||||
|
||||
public int getVolume() {
|
||||
return volume;
|
||||
}
|
||||
|
||||
public void setVolume(int volume) throws IOException {
|
||||
this.volume = volume;
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,14 @@
|
||||
package com.bensherriff.siren.settings;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class Settings {
|
||||
|
||||
private String token = "";
|
||||
private String owner = "";
|
||||
|
||||
private String prefix = "!";
|
||||
private int volume = 100;
|
||||
private Map<Long, GuildSettings> guildSettings = new HashMap<>();
|
||||
|
||||
public String getToken() {
|
||||
return token;
|
||||
@@ -26,20 +26,11 @@ public class Settings {
|
||||
this.owner = owner;
|
||||
}
|
||||
|
||||
public String getPrefix() {
|
||||
return prefix;
|
||||
public Map<Long, GuildSettings> getGuildSettings() {
|
||||
return guildSettings;
|
||||
}
|
||||
|
||||
public void setPrefix(String prefix) {
|
||||
this.prefix = prefix;
|
||||
}
|
||||
|
||||
public int getVolume() {
|
||||
return volume;
|
||||
}
|
||||
|
||||
public void setVolume(int volume) throws IOException {
|
||||
this.volume = volume;
|
||||
SettingsManager.write(this);
|
||||
public void setGuildSettings(Map<Long, GuildSettings> guildSettings) {
|
||||
this.guildSettings = guildSettings;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user