diff --git a/docker-compose.yml b/docker-compose.yml
index 0616418..f9b0008 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -9,7 +9,7 @@ services:
dockerfile: ./Dockerfile
args:
- JAVA_VERSION=17
- - VERSION=0.1.5
+ - VERSION=0.1.6
volumes:
- ./data:/app
restart: unless-stopped
diff --git a/pom.xml b/pom.xml
index da35b95..f3269de 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.bensherriff
siren
- 0.1.5
+ 0.1.6
jar
diff --git a/src/main/java/com/bensherriff/siren/MusicBot.java b/src/main/java/com/bensherriff/siren/MusicBot.java
index 295f7a9..cb0faac 100644
--- a/src/main/java/com/bensherriff/siren/MusicBot.java
+++ b/src/main/java/com/bensherriff/siren/MusicBot.java
@@ -36,11 +36,16 @@ public class MusicBot {
}
private static void start() throws IOException {
- SettingsManager settingsManager = new SettingsManager();
- Settings settings = settingsManager.load();
+ Settings settings = SettingsManager.load();
Listener textListener = new TextListener(settings);
// Listener slashListener = new SlashListener(settings);
+ if (settings.getToken() == null || settings.getToken().isEmpty()) {
+ throw new IOException("Token field may not be empty, please set the value in " + SettingsManager.PATH);
+ } else if (settings.getOwner() == null || settings.getOwner().isEmpty()) {
+ throw new IOException("Owner field may not be empty, please set the value in " + SettingsManager.PATH);
+ }
+
JDA jda = JDABuilder.create(settings.getToken(), Arrays.asList(INTENTS))
.enableCache(Arrays.asList(ENABLED_FLAGS))
.disableCache(Arrays.asList(DISABLED_FLAGS))
diff --git a/src/main/java/com/bensherriff/siren/audio/AudioHandler.java b/src/main/java/com/bensherriff/siren/audio/AudioHandler.java
index 0dca326..ceb5c58 100644
--- a/src/main/java/com/bensherriff/siren/audio/AudioHandler.java
+++ b/src/main/java/com/bensherriff/siren/audio/AudioHandler.java
@@ -83,13 +83,13 @@ public class AudioHandler extends AudioEventAdapter implements AudioSendHandler
@Override
public void onTrackException(AudioPlayer player, AudioTrack track, FriendlyException exception) {
- LOGGER.warn("Exception on track" + track.getInfo().title + ": " + exception.getMessage());
+ 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");
+ LOGGER.warn("{} - 'track {}' is stuck", guildID, track.getInfo().title);
super.onTrackStuck(player, track, thresholdMs);
}
diff --git a/src/main/java/com/bensherriff/siren/listener/Listener.java b/src/main/java/com/bensherriff/siren/listener/Listener.java
index 6a50c45..04e4921 100644
--- a/src/main/java/com/bensherriff/siren/listener/Listener.java
+++ b/src/main/java/com/bensherriff/siren/listener/Listener.java
@@ -17,6 +17,7 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jetbrains.annotations.NotNull;
+import java.io.IOException;
import java.util.*;
public abstract class Listener extends ListenerAdapter {
@@ -61,7 +62,7 @@ public abstract class Listener extends ListenerAdapter {
AudioHandler audioHandler = musicManagers.get(guildId);
if (audioHandler == null) {
- LOGGER.info("Creating Audio Handler for guild " + guildId);
+ LOGGER.info("Creating Audio Handler for guild {}", guildId);
audioHandler = new AudioHandler(playerManager, guildId);
musicManagers.put(guildId, audioHandler);
}
@@ -104,7 +105,7 @@ public abstract class Listener extends ListenerAdapter {
audioHandler.setPaused(false);
}
- protected void changeVolume(Guild guild, int volume) {
+ protected void changeVolume(Guild guild, int volume) throws IOException {
AudioHandler audioHandler = getGuildAudioPlayer(guild);
getSettings().setVolume(volume);
audioHandler.setVolume(volume);
diff --git a/src/main/java/com/bensherriff/siren/listener/SlashListener.java b/src/main/java/com/bensherriff/siren/listener/SlashListener.java
index b079eb3..a71ecb4 100644
--- a/src/main/java/com/bensherriff/siren/listener/SlashListener.java
+++ b/src/main/java/com/bensherriff/siren/listener/SlashListener.java
@@ -13,6 +13,7 @@ import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.interactions.commands.build.Commands;
import org.jetbrains.annotations.NotNull;
+import java.io.IOException;
import java.util.Objects;
public class SlashListener extends Listener {
@@ -61,7 +62,12 @@ public class SlashListener extends Listener {
}
case "volume" -> {
int volume = Objects.requireNonNull(event.getOption("volume")).getAsInt();
- changeVolume(guild, volume);
+ 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" -> {
diff --git a/src/main/java/com/bensherriff/siren/listener/TextListener.java b/src/main/java/com/bensherriff/siren/listener/TextListener.java
index 98581c1..8f08860 100644
--- a/src/main/java/com/bensherriff/siren/listener/TextListener.java
+++ b/src/main/java/com/bensherriff/siren/listener/TextListener.java
@@ -12,6 +12,7 @@ import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.jetbrains.annotations.NotNull;
+import java.io.IOException;
import java.util.Arrays;
public class TextListener extends Listener {
@@ -47,7 +48,12 @@ public class TextListener extends Listener {
channel.sendMessage("Stopped track and cleared queue").queue();
} else if ("!volume".equals(command[0]) && command.length == 2) {
int volume = Integer.parseInt(command[1]);
- changeVolume(guild, volume);
+ 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);
diff --git a/src/main/java/com/bensherriff/siren/settings/Settings.java b/src/main/java/com/bensherriff/siren/settings/Settings.java
index fd39ffb..e0643b1 100644
--- a/src/main/java/com/bensherriff/siren/settings/Settings.java
+++ b/src/main/java/com/bensherriff/siren/settings/Settings.java
@@ -1,5 +1,7 @@
package com.bensherriff.siren.settings;
+import java.io.IOException;
+
public class Settings {
private String token = "";
@@ -36,7 +38,8 @@ public class Settings {
return volume;
}
- public void setVolume(int volume) {
+ public void setVolume(int volume) throws IOException {
this.volume = volume;
+ SettingsManager.write(this);
}
}
diff --git a/src/main/java/com/bensherriff/siren/settings/SettingsManager.java b/src/main/java/com/bensherriff/siren/settings/SettingsManager.java
index afe189c..0f73ba5 100644
--- a/src/main/java/com/bensherriff/siren/settings/SettingsManager.java
+++ b/src/main/java/com/bensherriff/siren/settings/SettingsManager.java
@@ -1,24 +1,49 @@
package com.bensherriff.siren.settings;
+import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import java.io.File;
+import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class SettingsManager {
private static final Logger LOGGER = LogManager.getLogger(SettingsManager.class);
- private final ObjectMapper mapper = new ObjectMapper();
+ public static final String SEPARATOR = File.separator;
+ public static final String PATH = String.join(SEPARATOR, System.getProperty("user.dir"), "settings.json");
+ private static final ObjectMapper mapper = new ObjectMapper();
+ private static final ObjectWriter writer = mapper.writer(new DefaultPrettyPrinter());
- public Settings load() throws IOException {
+ public static Settings load() throws IOException {
+ return load(PATH);
+ }
+
+ public static Settings load(String path) throws IOException {
// If settings is not available, create new default settings
- try(InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("settings.json")) {
+// try(InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("settings.json")) {
+// return mapper.readValue(inputStream, Settings.class);
+// }
+ File file = new File(path);
+ if (!file.exists()) {
+ LOGGER.warn("Settings file does not exist, creating new file at: {}", file.getPath());
+ write(new Settings());
+ }
+ LOGGER.info("Reading settings from {}", file.getPath());
+ try (InputStream inputStream = new FileInputStream(file)) {
return mapper.readValue(inputStream, Settings.class);
}
}
- public void write(Settings settings) throws IOException {
+ public static void write(Settings settings) throws IOException {
+ write(PATH, settings);
+ }
+ public static void write(String path, Settings settings) throws IOException {
+ File file = new File(path);
+ writer.writeValue(file, settings);
}
}
diff --git a/src/main/resources/settings.json b/src/main/resources/settings.json
deleted file mode 100644
index 47c7c93..0000000
--- a/src/main/resources/settings.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "token": "OTMyMzAxMjQ4NTQ2MzYxMzQ2.YeQ_Mg.n4H8Cl3dQ1u5aFL1ZvTmfcGwpEY",
- "owner": "250842261221277697",
- "prefix": "!",
- "volume": 30
-}
\ No newline at end of file