diff --git a/ttstoy/ttstoy.py b/ttstoy/ttstoy.py index 5e96e34..a907b9c 100644 --- a/ttstoy/ttstoy.py +++ b/ttstoy/ttstoy.py @@ -2434,12 +2434,21 @@ class TtsToy(Cog): # Check if user is in a VC - we'll play there if so, but it's not required user_in_vc = ctx.author.voice and ctx.author.voice.channel - if user_in_vc and not ctx.guild.me.voice: - # Connect via the shared Lavalink client (owned by the YTAudio cog). - try: - await lavalink.connect(ctx.author.voice.channel) - except Exception: - log.exception("[TTS] Failed to connect to voice channel via Lavalink.") + if user_in_vc: + target_channel = ctx.author.voice.channel + me_voice = ctx.guild.me.voice + # Summon: connect if not in voice, or move if in a different channel. + if me_voice is None or me_voice.channel is None: + try: + await lavalink.connect(target_channel) + except Exception: + log.exception("[TTS] Failed to connect to voice channel via Lavalink.") + elif me_voice.channel.id != target_channel.id: + try: + player = lavalink.get_player(ctx.guild.id) + await player.move_to(target_channel) + except Exception: + log.exception("[TTS] Failed to move to the user's voice channel.") mode = await self._get_tts_mode()