diff --git a/pom.xml b/pom.xml
index 9a003bf..28098f4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -96,6 +96,12 @@
https://jitpack.io
+
+ arbjergDev-snapshots
+ Lavalink Repository
+ https://maven.lavalink.dev/snapshots
+
+
@@ -113,7 +119,7 @@
dev.arbjerg
lavaplayer
- 2.1.1
+ 0eaeee195f0315b2617587aa3537fa202df07ddc-SNAPSHOT
@@ -167,7 +173,7 @@
org.apache.logging.log4j
- log4j-slf4j2-impl
+ log4j-slf4j-impl
2.23.1
diff --git a/src/main/java/netneutrality/core/LogHandler.java b/src/main/java/netneutrality/core/LogHandler.java
index ba11ac9..47363cb 100644
--- a/src/main/java/netneutrality/core/LogHandler.java
+++ b/src/main/java/netneutrality/core/LogHandler.java
@@ -27,16 +27,18 @@ public class LogHandler {
* @param e The exceptions to log
*/
public static void log(Exception e) {
- if (e instanceof CommandExecutionException) {
- Sentry.captureException(e);
- logInternally((CommandExecutionException) e);
- tryLogToDebugChannel((CommandExecutionException) e);
- tryGracefulSlashContextError((CommandExecutionException) e);
+ Sentry.captureException(e);
+
+ if (e instanceof CommandExecutionException exception) {
+ CommandContext context = exception.getCommandContext();
+
+ logInternally(exception, context);
+ tryLogToDebugChannel(exception, context);
+ tryGracefulSlashContextError(exception, context);
return;
}
- Sentry.captureException(e);
logger.error(e.getMessage(), e);
}
@@ -59,14 +61,11 @@ public class LogHandler {
}
}
- private static void logInternally(CommandException error) {
- CommandContext context = error.getCommandContext();
- logger.error("Exception thrown from command [{}] in guild [{}]: {}", context.getCommand().getCommandName(), context.getGuild().getId(), error.getMessage(), error);
+ private static void logInternally(CommandException exception, CommandContext context) {
+ logger.error("Exception thrown from command [{}] in guild [{}]: {}", context.getCommand().getCommandName(), context.getGuild().getId(), exception.getMessage(), exception);
}
- private static void tryLogToDebugChannel(CommandException error) {
- CommandContext context = error.getCommandContext();
-
+ private static void tryLogToDebugChannel(CommandException exception, CommandContext context) {
if (context.getGuild() != null) {
if (GuildManager.getManager(context.getGuild()).isDebugEnabled()) {
context.getGuild()
@@ -74,16 +73,14 @@ public class LogHandler {
.stream()
.filter(textChannel -> textChannel.getName().equals("debug") || textChannel.getName().equals("log"))
.filter(TextChannel::canTalk)
- .forEach(textChannel -> textChannel.sendMessageEmbeds(MessageFunction.buildDebugMessage(context, error)).queue());
+ .forEach(textChannel -> textChannel.sendMessageEmbeds(MessageFunction.buildDebugMessage(context, exception)).queue());
}
}
}
- private static void tryGracefulSlashContextError(CommandExecutionException error) {
- CommandContext context = error.getCommandContext();
-
+ private static void tryGracefulSlashContextError(CommandException exception, CommandContext context) {
if (context instanceof SlashCommandContext slashCommandContext) {
- slashCommandContext.replyEphemeral("Error during command execution");
+ slashCommandContext.reply(MessageFunction.buildSentryErrorMessage(exception.getMessage()));
}
}
}
diff --git a/src/main/java/netneutrality/core/context/CommandContext.java b/src/main/java/netneutrality/core/context/CommandContext.java
index 4e2db05..ff2d737 100644
--- a/src/main/java/netneutrality/core/context/CommandContext.java
+++ b/src/main/java/netneutrality/core/context/CommandContext.java
@@ -53,5 +53,9 @@ public interface CommandContext {
replyToMessage(String.format(format, arguments));
}
+ default void replyToMessage(MessageEmbed... embeds) {
+ replyToMessage(MessageCreateData.fromEmbeds(embeds));
+ }
+
void dispatchToCommand(String commandName);
}
diff --git a/src/main/java/netneutrality/core/context/SlashCommandContext.java b/src/main/java/netneutrality/core/context/SlashCommandContext.java
index 775301f..9684e3c 100644
--- a/src/main/java/netneutrality/core/context/SlashCommandContext.java
+++ b/src/main/java/netneutrality/core/context/SlashCommandContext.java
@@ -138,6 +138,10 @@ public class SlashCommandContext implements CommandContext {
event.reply(message).setEphemeral(true).queue();
}
+ public void replyEphemeral(MessageEmbed... embeds) {
+ replyEphemeral(MessageCreateData.fromEmbeds(embeds));
+ }
+
public void replyEphemeral(String format, Object... arguments) {
replyEphemeral(String.format(format, arguments));
}
diff --git a/src/main/java/netneutrality/music/TrackLoadingHandler.java b/src/main/java/netneutrality/music/TrackLoadingHandler.java
index 52b467f..ccd5151 100644
--- a/src/main/java/netneutrality/music/TrackLoadingHandler.java
+++ b/src/main/java/netneutrality/music/TrackLoadingHandler.java
@@ -56,9 +56,8 @@ public class TrackLoadingHandler implements AudioLoadResultHandler {
loadConsumer.accept(true);
}
- if (loadingDisabled) {
+ if (loadingDisabled)
return;
- }
context.deleteMessage();
@@ -76,9 +75,9 @@ public class TrackLoadingHandler implements AudioLoadResultHandler {
loadConsumer.accept(true);
}
- if (loadingDisabled) {
+ if (loadingDisabled)
return;
- }
+
logger.debug("Guild {}: playlist loaded: {}", guild.getId(), identifier);
if (!playlist.getTracks().isEmpty()) {
@@ -110,24 +109,22 @@ public class TrackLoadingHandler implements AudioLoadResultHandler {
@Override
public void noMatches() {
- logger.debug("Guild {}: no matches for identifier {}", guild.getId(), identifier);
+ if (loadConsumer != null)
+ loadConsumer.accept(false);
if (!silent)
context.replyToMessage("No matches found");
-
- if (loadConsumer != null)
- loadConsumer.accept(false);
}
@Override
public void loadFailed(FriendlyException e) {
+ if (loadConsumer != null)
+ loadConsumer.accept(false);
+
logger.debug("Guild {}: load failed for identifier {}", guild.getId(), identifier, e);
LogHandler.log(e);
if (!silent)
- context.replyToMessage("Failed to load track: " + e.getMessage());
-
- if (loadConsumer != null)
- loadConsumer.accept(false);
+ context.replyToMessage(MessageFunction.buildSentryErrorMessage("Failed to load track: " + e.getMessage()));
}
}
diff --git a/src/main/java/netneutrality/music/TrackScheduler.java b/src/main/java/netneutrality/music/TrackScheduler.java
index 1b471d9..5e7bc1d 100644
--- a/src/main/java/netneutrality/music/TrackScheduler.java
+++ b/src/main/java/netneutrality/music/TrackScheduler.java
@@ -16,6 +16,7 @@ import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
import netneutrality.core.LogHandler;
+import netneutrality.utils.MessageFunction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -119,7 +120,7 @@ public class TrackScheduler extends AudioEventAdapter {
public void onTrackException(AudioPlayer player, AudioTrack track, FriendlyException exception) {
logger.debug("Guild {}: exception while playing track [{}]: {}", guild.getId(), track.getIdentifier(), exception.getMessage());
LogHandler.log(exception);
- sendMessageToChannel("Error while playing track [" + track.getInfo().title + "]: " + exception.getMessage());
+ sendMessageToChannel(MessageFunction.buildSentryErrorMessage(String.format("Error while playing track [%s]: %s", track.getInfo().title, exception.getMessage())));
}
@Override
diff --git a/src/main/java/netneutrality/utils/MessageFunction.java b/src/main/java/netneutrality/utils/MessageFunction.java
index 77c4a50..1b8f941 100644
--- a/src/main/java/netneutrality/utils/MessageFunction.java
+++ b/src/main/java/netneutrality/utils/MessageFunction.java
@@ -10,6 +10,7 @@ package netneutrality.utils;
import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
import com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo;
+import io.sentry.Sentry;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
@@ -208,6 +209,17 @@ public class MessageFunction {
return messages;
}
+ public static MessageEmbed buildSentryErrorMessage(String error) {
+ EmbedBuilder message = new EmbedBuilder();
+ message.setColor(Color.RED);
+ message.setTitle(":warning: Error during execution :warning:");
+ message.addField("Error message:", error, false);
+ message.addField("Error ID:", Sentry.getLastEventId().toString(), false);
+ message.setTimestamp(OffsetDateTime.now());
+
+ return message.build();
+ }
+
public static MessageEmbed buildDebugMessage(CommandContext context, CommandException error) {
EmbedBuilder message = new EmbedBuilder();
message.setColor(Color.RED);
diff --git a/src/main/java/netneutrality/utils/MusicUtils.java b/src/main/java/netneutrality/utils/MusicUtils.java
index 3f5fa2a..71a1046 100644
--- a/src/main/java/netneutrality/utils/MusicUtils.java
+++ b/src/main/java/netneutrality/utils/MusicUtils.java
@@ -16,7 +16,6 @@ public class MusicUtils {
public static boolean checkIfConnected(MusicManager manager, CommandContext context) {
if (context.getGuildUser().getVoiceState() == null) {
- context.reply("Voice state is null, this should not happen");
throw new CommandExecutionException("Voice state is null, this should not happen", context, null);
}