diff --git a/common/src/main/java/dev/lavalink/youtube/ClientInformation.java b/common/src/main/java/dev/lavalink/youtube/ClientInformation.java new file mode 100644 index 0000000..67f7614 --- /dev/null +++ b/common/src/main/java/dev/lavalink/youtube/ClientInformation.java @@ -0,0 +1,18 @@ +package dev.lavalink.youtube; + +import com.sedmelluq.discord.lavaplayer.tools.exception.DetailMessageBuilder; +import dev.lavalink.youtube.clients.skeleton.Client; + +public class ClientInformation extends Exception { + private ClientInformation(String message) { + super(message, null, false, false); + } + + public static ClientInformation create(Client client) { + DetailMessageBuilder builder = new DetailMessageBuilder(); + builder.appendField("yts.version", YoutubeSource.VERSION); + builder.appendField("client.identifier", client.getIdentifier()); + builder.appendField("client.options", client.getOptions()); + return new ClientInformation(builder.toString()); + } +} diff --git a/common/src/main/java/dev/lavalink/youtube/YoutubeAudioSourceManager.java b/common/src/main/java/dev/lavalink/youtube/YoutubeAudioSourceManager.java index 121d126..0eaadda 100644 --- a/common/src/main/java/dev/lavalink/youtube/YoutubeAudioSourceManager.java +++ b/common/src/main/java/dev/lavalink/youtube/YoutubeAudioSourceManager.java @@ -198,6 +198,7 @@ protected AudioItem loadItemOnce(@NotNull AudioReference reference) { throw ExceptionTools.wrapUnfriendlyExceptions("This video cannot be loaded.", Severity.SUSPICIOUS, cbl.getCause()); } catch (Throwable t) { log.debug("Client \"{}\" threw a non-fatal exception, storing and proceeding...", client.getIdentifier(), t); + t.addSuppressed(ClientInformation.create(client)); lastException = t; } } diff --git a/common/src/main/java/dev/lavalink/youtube/track/YoutubeAudioTrack.java b/common/src/main/java/dev/lavalink/youtube/track/YoutubeAudioTrack.java index 22e786d..9d2db92 100644 --- a/common/src/main/java/dev/lavalink/youtube/track/YoutubeAudioTrack.java +++ b/common/src/main/java/dev/lavalink/youtube/track/YoutubeAudioTrack.java @@ -12,6 +12,7 @@ import com.sedmelluq.discord.lavaplayer.track.DelegatedAudioTrack; import com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor; import dev.lavalink.youtube.CannotBeLoaded; +import dev.lavalink.youtube.ClientInformation; import dev.lavalink.youtube.UrlTools; import dev.lavalink.youtube.UrlTools.UrlInfo; import dev.lavalink.youtube.YoutubeAudioSourceManager; @@ -70,14 +71,18 @@ public void process(LocalAudioTrackExecutor localExecutor) throws Exception { try { processWithClient(localExecutor, httpInterface, client, 0); return; // stream played through successfully, short-circuit. - } catch (FriendlyException e) { - // usually thrown by getPlayabilityStatus when loading formats. - // these aren't considered fatal, so we just store them and continue. - lastException = e; } catch (RuntimeException e) { // store exception so it can be thrown if we run out of clients to // load formats with. + e.addSuppressed(ClientInformation.create(client)); lastException = e; + + if (e instanceof FriendlyException) { + // usually thrown by getPlayabilityStatus when loading formats. + // these aren't considered fatal, so we just store them and continue. + continue; + } + String message = e.getMessage(); if ("Not success status code: 403".equals(message) ||