From 37d50ab240e23d2035bec5705fdac47c2e85a800 Mon Sep 17 00:00:00 2001 From: loki5512344 Date: Mon, 13 Jul 2026 00:30:16 +0200 Subject: [PATCH] fix: increase radio connect timeout from 5s to 30s, wait for voice+player before loading track --- .../loki/feature/radio/RadioManager.java | 50 ++++++++----------- 1 file changed, 21 insertions(+), 29 deletions(-) diff --git a/src/main/java/creator/loki/feature/radio/RadioManager.java b/src/main/java/creator/loki/feature/radio/RadioManager.java index 6ea72c5..86d1642 100644 --- a/src/main/java/creator/loki/feature/radio/RadioManager.java +++ b/src/main/java/creator/loki/feature/radio/RadioManager.java @@ -22,7 +22,7 @@ import org.slf4j.LoggerFactory; @Singleton public class RadioManager { private static final Logger logger = LoggerFactory.getLogger(RadioManager.class); - private static final long VOICE_TIMEOUT_MS = 5000; + private static final long CONNECT_TIMEOUT_MS = 30000; private final Map radioStates = new ConcurrentHashMap<>(); private final QueueRepository queueRepository; @@ -72,16 +72,6 @@ public class RadioManager { logger.warn("Radio: guild {} not found in radio bot cache", guildId); return; } - var client = lavalinkManager.getClient(); - if (client != null - && !VoiceHelper.waitForCondition( - () -> client.getNodes().stream().anyMatch(n -> n.getSessionId() != null), - VOICE_TIMEOUT_MS, - TimeUnit.MILLISECONDS)) { - LoggerDecorator.warn( - logger, "Radio: Lavalink node not ready for guild " + guildId); - return; - } var vc = guild.getVoiceChannelById(channelId); if (vc == null) { logger.warn("Radio: voice channel {} not found in guild {}", channelId, guildId); @@ -100,27 +90,29 @@ public class RadioManager { if (!guild.getAudioManager().isConnected()) { guild.getAudioManager().openAudioConnection(vc); } - // Ждём голосовой статус (не прерываемся если не дождались — дальше создаём плеер) - var inChannel = VoiceHelper.waitForCondition( - () -> self.getVoiceState().inAudioChannel(), VOICE_TIMEOUT_MS, TimeUnit.MILLISECONDS); - if (!inChannel) { - logger.warn( - "Radio: voice connection timeout for guild {} (channel: {}), continuing...", - guildId, - self.getVoiceState().getChannel() != null - ? self.getVoiceState().getChannel().getId() - : "null"); - } var link = lavalinkManager.getOrCreateLink(guildId); - var playerReady = VoiceHelper.waitForCondition( - () -> link.getCachedPlayer() != null, VOICE_TIMEOUT_MS, TimeUnit.MILLISECONDS); - if (!playerReady) { - LoggerDecorator.warn(logger, "Radio: Lavalink player timeout for guild " + guildId); + + VoiceHelper.waitForCondition( + () -> self.getVoiceState().inAudioChannel(), CONNECT_TIMEOUT_MS, TimeUnit.MILLISECONDS); + if (self.getVoiceState().inAudioChannel()) { + logger.info("Radio: voice connected for guild {}", guildId); + } else { + logger.warn("Radio: voice not connected after {}ms for guild {}", CONNECT_TIMEOUT_MS, guildId); } - if (!inChannel || !playerReady) { - LoggerDecorator.warn( - logger, "Radio: problems connecting, but trying to load stream for guild " + guildId); + + VoiceHelper.waitForCondition( + () -> link.getCachedPlayer() != null, CONNECT_TIMEOUT_MS, TimeUnit.MILLISECONDS); + if (link.getCachedPlayer() != null) { + logger.info("Radio: player created for guild {}", guildId); + } else { + logger.warn("Radio: no player after {}ms for guild {}", CONNECT_TIMEOUT_MS, guildId); } + + if (!self.getVoiceState().inAudioChannel() || link.getCachedPlayer() == null) { + LoggerDecorator.warn(logger, "Radio: skipping — no voice or player for guild " + guildId); + return; + } + var mm = new GuildMusicManager(guildId, lavalinkManager, queueRepository); int vol = finalState.volume; var url = finalState.streamUrl;