mirror of https://gitlab.com/litecord/litecord.git
lazy_guild: add handling for member losing permissions
This commit is contained in:
parent
d3806353b6
commit
07edc235f5
|
|
@ -870,6 +870,22 @@ class GuildMemberList:
|
||||||
session_ids_new, new_user_index
|
session_ids_new, new_user_index
|
||||||
)
|
)
|
||||||
|
|
||||||
|
async def _pres_update_remove(
|
||||||
|
self, user_id: int, old_group: GroupID, old_index: int
|
||||||
|
):
|
||||||
|
log.debug(
|
||||||
|
"removal update: uid={} old={} rel_idx={} new={}",
|
||||||
|
user_id,
|
||||||
|
old_group,
|
||||||
|
old_index,
|
||||||
|
)
|
||||||
|
|
||||||
|
old_user_index = self._get_item_index(user_id)
|
||||||
|
assert old_user_index is not None
|
||||||
|
self.list.data[old_group].remove(user_id)
|
||||||
|
session_ids_old = list(self._get_subs(old_user_index))
|
||||||
|
return await self._resync(session_ids_old, old_user_index)
|
||||||
|
|
||||||
async def new_member(self, user_id: int):
|
async def new_member(self, user_id: int):
|
||||||
"""Insert a new member."""
|
"""Insert a new member."""
|
||||||
if not self.list:
|
if not self.list:
|
||||||
|
|
@ -1051,7 +1067,6 @@ class GuildMemberList:
|
||||||
status = partial_presence.get("status", old_presence["status"])
|
status = partial_presence.get("status", old_presence["status"])
|
||||||
|
|
||||||
# calculate a possible new group
|
# calculate a possible new group
|
||||||
# TODO: handle when new_group is None (member loses perms)
|
|
||||||
new_group = await self._get_group_for_member(user_id, roles, status)
|
new_group = await self._get_group_for_member(user_id, roles, status)
|
||||||
|
|
||||||
log.debug(
|
log.debug(
|
||||||
|
|
@ -1071,8 +1086,16 @@ class GuildMemberList:
|
||||||
# nickname changes, treat this as a simple update
|
# nickname changes, treat this as a simple update
|
||||||
if old_group == new_group and not has_nick:
|
if old_group == new_group and not has_nick:
|
||||||
return await self._pres_update_simple(user_id)
|
return await self._pres_update_simple(user_id)
|
||||||
|
elif new_group is None:
|
||||||
return await self._pres_update_complex(user_id, old_group, old_index, new_group)
|
# The user is being removed from the overall list.
|
||||||
|
#
|
||||||
|
# This happens because they lost permissions to the relevant
|
||||||
|
# channel.
|
||||||
|
return await self._pres_update_remove(user_id, old_group, old_index)
|
||||||
|
else:
|
||||||
|
return await self._pres_update_complex(
|
||||||
|
user_id, old_group, old_index, new_group
|
||||||
|
)
|
||||||
|
|
||||||
async def new_role(self, role: dict):
|
async def new_role(self, role: dict):
|
||||||
"""Add a new role to the list.
|
"""Add a new role to the list.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue