diff --git a/maven-build.properties b/maven-build.properties
index 08435a7..d855348 100644
--- a/maven-build.properties
+++ b/maven-build.properties
@@ -12,7 +12,7 @@ maven.settings.offline=false
maven.settings.interactiveMode=true
maven.build.srcDir.0=src/main/java
maven.compiler.target=11
-lavaplayer.version=1.3.67
+lavalink.version=4.0.0
maven.build.outputDir=${maven.build.dir}/classes
project.build.outputDirectory=${maven.build.outputDir}
maven.build.testResourceDir.0=src/test/resources
diff --git a/pom.xml b/pom.xml
index 13a1a8f..387435f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,7 +12,7 @@
11
11
4.2.0_249
- 1.3.67
+ 4.0.0
@@ -113,11 +113,11 @@
trove4j
3.0.3
-
+
- com.sedmelluq
- lavaplayer
- ${lavaplayer.version}
+ dev.arbjerg
+ lavalink-client
+ ${lavalink.version}
diff --git a/src/main/java/de/yjulian/merly/bot/eventslistener/AudioEventListener.java b/src/main/java/de/yjulian/merly/bot/eventslistener/AudioEventListener.java
index 6b528a1..8a1a8ce 100644
--- a/src/main/java/de/yjulian/merly/bot/eventslistener/AudioEventListener.java
+++ b/src/main/java/de/yjulian/merly/bot/eventslistener/AudioEventListener.java
@@ -1,11 +1,12 @@
package de.yjulian.merly.bot.eventslistener;
-import com.sedmelluq.discord.lavaplayer.player.event.AudioEvent;
-import com.sedmelluq.discord.lavaplayer.player.event.AudioEventAdapter;
+// TODO: update listener to Lavalink API
+import lavalink.client.player.event.PlayerEvent;
+import lavalink.client.player.event.PlayerEventAdapter;
import de.yjulian.merly.events.AudioSystemEvent;
import de.yjulian.merly.events.EventManager;
-public class AudioEventListener extends AudioEventAdapter {
+public class AudioEventListener extends PlayerEventAdapter {
private final EventManager eventManager;
@@ -14,7 +15,7 @@ public AudioEventListener(EventManager eventManager) {
}
@Override
- public void onEvent(AudioEvent event) {
+ public void onEvent(PlayerEvent event) {
this.eventManager.fireEvent(new AudioSystemEvent(event));
}
}
diff --git a/src/main/java/de/yjulian/merly/events/AudioSystemEvent.java b/src/main/java/de/yjulian/merly/events/AudioSystemEvent.java
index a6e0897..6769d96 100644
--- a/src/main/java/de/yjulian/merly/events/AudioSystemEvent.java
+++ b/src/main/java/de/yjulian/merly/events/AudioSystemEvent.java
@@ -1,16 +1,17 @@
package de.yjulian.merly.events;
-import com.sedmelluq.discord.lavaplayer.player.event.AudioEvent;
+// TODO: replace with Lavalink player event
+import lavalink.client.player.event.PlayerEvent;
public class AudioSystemEvent implements Event {
- private final AudioEvent event;
+ private final PlayerEvent event;
- public AudioSystemEvent(AudioEvent event) {
+ public AudioSystemEvent(PlayerEvent event) {
this.event = event;
}
- public AudioEvent getEvent() {
+ public PlayerEvent getEvent() {
return event;
}
}
diff --git a/src/main/java/de/yjulian/merly/subsystem/audio/AudioHandler.java b/src/main/java/de/yjulian/merly/subsystem/audio/AudioHandler.java
index b4e464b..0132dff 100644
--- a/src/main/java/de/yjulian/merly/subsystem/audio/AudioHandler.java
+++ b/src/main/java/de/yjulian/merly/subsystem/audio/AudioHandler.java
@@ -1,7 +1,8 @@
package de.yjulian.merly.subsystem.audio;
-import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
-import com.sedmelluq.discord.lavaplayer.track.playback.AudioFrame;
+// TODO: use Lavalink player classes
+import lavalink.client.player.LavalinkPlayer;
+import lavalink.client.player.event.Frame;
import net.dv8tion.jda.api.audio.AudioSendHandler;
import org.jetbrains.annotations.Nullable;
@@ -10,15 +11,15 @@
public class AudioHandler implements AudioSendHandler {
private static final boolean OPUS_FRAME = true;
- private final AudioPlayer player;
- private AudioFrame lastFrame;
+ private final LavalinkPlayer player;
+ private Frame lastFrame;
/**
* Create a new AudioPlayer handler with a provided {@link AudioPlayer}.
*
* @param player the player.
*/
- public AudioHandler(AudioPlayer player) {
+ public AudioHandler(LavalinkPlayer player) {
this.player = player;
}
@@ -32,7 +33,8 @@ public AudioHandler(AudioPlayer player) {
*/
@Override
public boolean canProvide() {
- lastFrame = player.provide();
+ // TODO: get frame from Lavalink player
+ lastFrame = null;
return lastFrame != null;
}
@@ -58,7 +60,7 @@ public boolean canProvide() {
@Nullable
@Override
public ByteBuffer provide20MsAudio() {
- return ByteBuffer.wrap(lastFrame.getData());
+ return lastFrame != null ? ByteBuffer.wrap(lastFrame.getData()) : null;
}
/**
diff --git a/src/main/java/de/yjulian/merly/subsystem/audio/AudioManager.java b/src/main/java/de/yjulian/merly/subsystem/audio/AudioManager.java
index 7c8030f..301d71a 100644
--- a/src/main/java/de/yjulian/merly/subsystem/audio/AudioManager.java
+++ b/src/main/java/de/yjulian/merly/subsystem/audio/AudioManager.java
@@ -1,10 +1,8 @@
package de.yjulian.merly.subsystem.audio;
-import com.sedmelluq.discord.lavaplayer.player.*;
-import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
-import com.sedmelluq.discord.lavaplayer.track.AudioItem;
-import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
-import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
+// TODO: Replace lavaplayer imports with lavalink client equivalents
+import lavalink.client.player.LavalinkPlayer;
+import lavalink.client.player.event.PlayerEvent;
import de.yjulian.merly.bot.MerlyBot;
import de.yjulian.merly.exceptions.BotUnavailableException;
import de.yjulian.merly.util.EnumUtils;
@@ -17,43 +15,23 @@
public class AudioManager {
- private final AudioPlayerManager manager;
+ // TODO: use appropriate Lavalink client class
+ private final LavalinkPlayer manager;
private final HashMap audioQueues = new HashMap<>();
public AudioManager() {
- this.manager = new DefaultAudioPlayerManager();
+ // TODO: initialize Lavalink player
+ this.manager = null;
init();
}
private void init() {
MerlyBot.getLogger().info("Initializing Merly Bot - Audio Manager");
- AudioConfiguration.ResamplingQuality resamplingQuality = EnumUtils
- .getOrDefault(AudioConfiguration.ResamplingQuality.class,
- System.getenv("MERLY_RESAMPLING_QUALITY"),
- AudioConfiguration.ResamplingQuality.MEDIUM
- );
- MerlyBot.getLogger().info(String.format("Audio Resampling Quality: %s", resamplingQuality.name()));
-
+ // TODO: configure Lavalink connection
MerlyBot.getLogger().info("Initializing Merly Bot - Finished");
- setCurrentQuality(resamplingQuality);
- }
-
- public AudioConfiguration.ResamplingQuality getCurrentQuality() {
- return getConfiguration().getResamplingQuality();
- }
-
- public void setCurrentQuality(AudioConfiguration.ResamplingQuality quality) {
- getConfiguration().setResamplingQuality(quality);
- MerlyBot.getLogger().debug(String.format("Audio Resampling Quality updated to %s", quality.name()));
}
- /**
- * Get the current audio configuration.
- * @return the current configuration.
- */
- public AudioConfiguration getConfiguration() {
- return this.manager.getConfiguration();
- }
+ // TODO: implement Lavalink audio configuration methods if needed
/**
* Get a audio queue for the voice channel provided. If no player is available the method with throw
@@ -81,39 +59,17 @@ public AudioQueue getAudioQueue(VoiceChannel voiceChannel) {
}
}
- AudioPlayer player = manager.createPlayer();
+ // TODO: create Lavalink player instance
+ LavalinkPlayer player = manager;
AudioQueueImpl audioQueue = new AudioQueueImpl(player, voiceChannel);
audioQueues.put(guild, audioQueue);
return audioQueue;
}
- void getTrack(String identifier, Consumer itemConsumer, Consumer result) {
- manager.loadItem(identifier, new AudioLoadResultHandler() {
- @Override
- public void trackLoaded(AudioTrack track) {
- itemConsumer.accept(track);
- result.accept(new TrackLoadResult(null, TrackLoadResult.State.TRACK, track));
- }
-
- @Override
- public void playlistLoaded(AudioPlaylist playlist) {
- itemConsumer.accept(playlist);
- result.accept(new TrackLoadResult(null, TrackLoadResult.State.PLAYLIST, playlist));
- }
-
- @Override
- public void noMatches() {
- itemConsumer.accept(null);
- result.accept(new TrackLoadResult(null, TrackLoadResult.State.NOTHING_FOUND, null));
- }
-
- @Override
- public void loadFailed(FriendlyException exception) {
- itemConsumer.accept(null);
- result.accept(new TrackLoadResult(exception, TrackLoadResult.State.EXCEPTION, null));
- }
- });
+ // TODO: implement track loading via Lavalink client
+ void getTrack(String identifier, Consumer