Remove Lavaplayer and migrate to Lavalink
Replaced the bot's audio handling system by removing Lavaplayer dependencies and migrating to a Lavalink v4 node. Updated `MusicManager`, `TrackScheduler`, and related classes to utilize the `LavalinkClient`. Refactored playlist and track loading logic, task integrations, and event dispatch to integrate with the remote node. Deprecated the custom Udio source, preserving references for a future plugin port. Documented configuration and deployment details for the new audio architecture.
This commit is contained in:
1 parent
01bfe22d22
commit
4cf7c47645
34 files changed
+1187
-479
No files matched your search
@@ -0,0 +1,80 @@
|
||||
package me.bobert.netneutrality.music.source;
|
||||
/*
|
||||
* Copyright (c) anthorob
|
||||
*
|
||||
* https://discord.gg/qUa6zNFZsd
|
||||
*/
|
||||
|
||||
import com.sedmelluq.discord.lavaplayer.container.mp3.Mp3AudioTrack;
|
||||
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
|
||||
import com.sedmelluq.discord.lavaplayer.tools.JsonBrowser;
|
||||
import com.sedmelluq.discord.lavaplayer.tools.io.HttpClientTools;
|
||||
import com.sedmelluq.discord.lavaplayer.tools.io.HttpInterface;
|
||||
import com.sedmelluq.discord.lavaplayer.tools.io.PersistentHttpStream;
|
||||
import com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo;
|
||||
import com.sedmelluq.discord.lavaplayer.track.DelegatedAudioTrack;
|
||||
import com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import static com.sedmelluq.discord.lavaplayer.tools.FriendlyException.Severity.SUSPICIOUS;
|
||||
|
||||
public class UdioAudioTrack extends DelegatedAudioTrack {
|
||||
|
||||
private static final Logger log = LogManager.getLogger(UdioAudioTrack.class);
|
||||
|
||||
private final UdioAudioSourceManager sourceManager;
|
||||
|
||||
/**
|
||||
* @param trackInfo Track info
|
||||
* @param sourceManager Source manager which was used to find this track
|
||||
*/
|
||||
public UdioAudioTrack(AudioTrackInfo trackInfo, UdioAudioSourceManager sourceManager) {
|
||||
super(trackInfo);
|
||||
|
||||
this.sourceManager = sourceManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void process(LocalAudioTrackExecutor localExecutor) throws Exception {
|
||||
try (HttpInterface httpInterface = sourceManager.getHttpInterface()) {
|
||||
String playbackUrl = loadPlaybackUrl(httpInterface);
|
||||
|
||||
log.debug("Starting Udio track from URL: {}", playbackUrl);
|
||||
|
||||
try (PersistentHttpStream stream = new PersistentHttpStream(httpInterface, new URI(playbackUrl), null)) {
|
||||
processDelegate(new Mp3AudioTrack(trackInfo, stream), localExecutor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String loadPlaybackUrl(HttpInterface httpInterface) throws IOException {
|
||||
JsonBrowser trackInfo = loadTrackInfo(httpInterface);
|
||||
|
||||
if (trackInfo == null) {
|
||||
throw new FriendlyException("Udio: Failed to extract track information from web page.", SUSPICIOUS, null);
|
||||
}
|
||||
|
||||
return trackInfo.get("song_path").text();
|
||||
}
|
||||
|
||||
private JsonBrowser loadTrackInfo(HttpInterface httpInterface) throws IOException {
|
||||
try (CloseableHttpResponse response = httpInterface.execute(new HttpGet(trackInfo.identifier))) {
|
||||
int statusCode = response.getStatusLine().getStatusCode();
|
||||
|
||||
if (!HttpClientTools.isSuccessWithContent(statusCode)) {
|
||||
throw new FriendlyException("Server responded with an error.", SUSPICIOUS,
|
||||
new IllegalStateException("Response code for player config is " + statusCode));
|
||||
}
|
||||
|
||||
return sourceManager.loadTrackInfoFromPageContent(IOUtils.toString(response.getEntity().getContent(), StandardCharsets.UTF_8));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user