From 7d6373e38b608089fcf5de2c7c5fee265c8cb252 Mon Sep 17 00:00:00 2001 From: ErrorNoInternet Date: Thu, 23 Apr 2026 10:51:18 -0400 Subject: [PATCH] fix(core): properly use on_voice_state_update This is called for different members updating their own individual voice states, not just the bot itself. If someone leaves the channel, we get their view of their voice state. --- errornocord/core.py | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/errornocord/core.py b/errornocord/core.py index 7f382c0..c5aeeff 100644 --- a/errornocord/core.py +++ b/errornocord/core.py @@ -148,22 +148,20 @@ async def on_message(message, edited=False): command_locks[(message.guild.id, message.author.id)].release() -async def on_voice_state_update(_, before, after): - if not before.channel and after.channel: - return - - if before.channel and not after.channel: - if before.channel.guild.id in players: - del players[before.channel.guild.id] - return - - def is_empty(channel): +async def on_voice_state_update(member, before, after): + def is_alone(channel): return [m.id for m in (channel.members if channel else [])] == [client.user.id] - if is_empty(after.channel): - if after.channel.guild.id in players: - del players[after.channel.guild.id] + if member.id == client.user.id and is_alone(after.channel): + if before.channel.guild.id in players: + del players[before.channel.guild.id] await after.channel.guild.voice_client.disconnect() + return + + if is_alone(before.channel): + if before.channel.guild.id in players: + del players[before.channel.guild.id] + await before.channel.guild.voice_client.disconnect() def rreload(reloaded_modules, module):