From 18190751373821decba70f5408acf0316595342f Mon Sep 17 00:00:00 2001 From: Luna Date: Mon, 30 Aug 2021 23:52:35 -0300 Subject: [PATCH] properly unsubscribe member when being removed --- litecord/common/guilds.py | 6 +++++- litecord/pubsub/guild.py | 10 ++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/litecord/common/guilds.py b/litecord/common/guilds.py index 3c8484f..479eb84 100644 --- a/litecord/common/guilds.py +++ b/litecord/common/guilds.py @@ -50,7 +50,11 @@ async def remove_member(guild_id: int, member_id: int): user = await app.storage.get_user(member_id) - await app.dispatcher.guild.unsub(guild_id, member_id) + states, channels = await app.dispatcher.guild.unsub_user(guild_id, user_id) + for channel_id in channels: + for state in states: + await app.dispatcher.channel.unsub(channel_id, state.session_id) + await app.lazy_guild.remove_member(guild_id, user["id"]) await app.dispatcher.guild.dispatch( guild_id, diff --git a/litecord/pubsub/guild.py b/litecord/pubsub/guild.py index 73e363e..32a3e6d 100644 --- a/litecord/pubsub/guild.py +++ b/litecord/pubsub/guild.py @@ -71,6 +71,16 @@ class GuildDispatcher(DispatcherWithState[int, str, GatewayEvent, List[str]]): return states, channel_ids + async def unsub_user( + self, guild_id: int, user_id: int + ) -> Tuple[List[GatewayState], List[int]]: + states = app.state_manager.fetch_states(user_id, guild_id) + for state in states: + await self.unsub(guild_id, state.session_id) + + guild_chan_ids = await app.storage.get_channel_ids(guild_id) + return states, guild_chan_ids + async def dispatch_filter( self, guild_id: int, filter_function, event: GatewayEvent ):