pubzub.lazy_guild: remove any of the user's states on remove_member

This commit is contained in:
Luna Mendes 2018-11-19 03:50:15 -03:00
parent ed628abab2
commit 994c3eb640
2 changed files with 21 additions and 0 deletions

View File

@ -784,6 +784,8 @@ class GatewayWebsocket:
chan_id = int(chan_id) chan_id = int(chan_id)
member_list = await lazy_guilds.get_gml(chan_id) member_list = await lazy_guilds.get_gml(chan_id)
# TODO: check read_messages permission
await member_list.shard_query( await member_list.shard_query(
self.state.session_id, ranges self.state.session_id, ranges
) )

View File

@ -870,6 +870,24 @@ class GuildMemberList:
# we need the old index to resync later on # we need the old index to resync later on
old_idx = self.get_item_index(user_id) old_idx = self.get_item_index(user_id)
def is_valid_state(session_id):
state = self.get_state(session_id)
return state.user_id != user_id
# for now, remove any of the users' subscribed states
old_len = len(self.state)
self.state = set(filter(
is_valid_state,
self.state
))
removed = old_len - len(self.state)
log.info('removed {} states due to remove_member {}',
removed, user_id)
# then clean anything on the internal member list
# about the member being removed.
try: try:
pres = self.list.presences.pop(user_id) pres = self.list.presences.pop(user_id)
except KeyError: except KeyError:
@ -895,6 +913,7 @@ class GuildMemberList:
log.warning('lazy: unknown old idx uid {}', user_id) log.warning('lazy: unknown old idx uid {}', user_id)
return return
# tell everyone about the removal.
await self.resync_by_item(old_idx) await self.resync_by_item(old_idx)
async def pres_update(self, user_id: int, async def pres_update(self, user_id: int,