diff --git a/litecord/gateway/websocket.py b/litecord/gateway/websocket.py index 74acee2..2fb6000 100644 --- a/litecord/gateway/websocket.py +++ b/litecord/gateway/websocket.py @@ -691,6 +691,15 @@ class GatewayWebsocket: async def _create_voice(self, guild_id, channel_id, _state, data): """Create a voice state.""" + + # if we are trying to create a voice state pointing torwards + # nowhere, we ignore it. + + # NOTE: HOWEVER, shouldn't we update the users' settings for + # self_mute and self_deaf? + if channel_id is None: + return + # we ignore the given existing state as it'll be basically # none, lol. @@ -711,10 +720,8 @@ class GatewayWebsocket: channel_id = int_(data.get('channel_id')) guild_id = int_(data.get('guild_id')) - # fetch an existing voice state - user_id, session_id = self.state.user_id, self.state.session_id - voice_state = await self.ext.voice.fetch_state(user_id, session_id) + voice_state = await self.ext.voice.get_state(self.voice_key) func = self._move_voice if voice_state else self._create_voice await func(guild_id, channel_id, voice_state, data) diff --git a/litecord/voice/manager.py b/litecord/voice/manager.py index 569f607..e3301d1 100644 --- a/litecord/voice/manager.py +++ b/litecord/voice/manager.py @@ -61,6 +61,16 @@ class VoiceManager: # by this, so i'll just use dict(). return dict(self.states[channel_id]) + async def get_state(self, voice_key: VoiceKey) -> VoiceState: + """Get a single VoiceState for a user in a channel. Returns None + if no VoiceState is found.""" + channel_id, user_id = voice_key + + try: + return self.states[channel_id][user_id] + except KeyError: + return None + async def del_state(self, voice_key: VoiceKey): """Delete a given voice state.""" chan_id, user_id = voice_key