From e654a194035dce6c1735ecd39b67e6b00a2ecacb Mon Sep 17 00:00:00 2001 From: duncte123 Date: Mon, 30 Sep 2024 08:16:30 +0200 Subject: [PATCH] Filter out empty voice states when transferring --- .../dev/arbjerg/lavalink/client/LavalinkClient.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/kotlin/dev/arbjerg/lavalink/client/LavalinkClient.kt b/src/main/kotlin/dev/arbjerg/lavalink/client/LavalinkClient.kt index 5fb40c4..022d766 100644 --- a/src/main/kotlin/dev/arbjerg/lavalink/client/LavalinkClient.kt +++ b/src/main/kotlin/dev/arbjerg/lavalink/client/LavalinkClient.kt @@ -6,6 +6,7 @@ import dev.arbjerg.lavalink.client.loadbalancing.builtin.DefaultLoadBalancer import dev.arbjerg.lavalink.client.event.ClientEvent import dev.arbjerg.lavalink.client.player.LavalinkPlayer import dev.arbjerg.lavalink.internal.ReconnectTask +import dev.arbjerg.lavalink.protocol.v4.VoiceState import reactor.core.Disposable import reactor.core.publisher.Flux import reactor.core.publisher.Sinks @@ -128,6 +129,7 @@ class LavalinkClient(val userId: Long) : Closeable, Disposable { val orphans = findOrphanedPlayers() orphans.mapNotNull { linkMap[it.guildId] } + .filter { !it.cachedPlayer?.voiceState.isEmpty() } // TODO: do some logging to mark them as skipped? .forEach { link -> link.transferNode(node) } @@ -225,4 +227,12 @@ class LavalinkClient(val userId: Long) : Closeable, Disposable { } } } + + private fun VoiceState?.isEmpty(): Boolean { + if (this == null) { + return true + } + + return this.token.isBlank() || this.endpoint.isBlank() || this.sessionId.isBlank(); + } }