mirror of https://gitlab.com/litecord/litecord.git
guild.mod: use remove_member in lazy_guilds
- pubsub.lazy_guild: add remove_member handler - users: use guild.mod's remove_member
This commit is contained in:
parent
906e891f6e
commit
ed628abab2
|
|
@ -17,13 +17,17 @@ async def remove_member(guild_id: int, member_id: int):
|
||||||
WHERE guild_id = $1 AND user_id = $2
|
WHERE guild_id = $1 AND user_id = $2
|
||||||
""", guild_id, member_id)
|
""", guild_id, member_id)
|
||||||
|
|
||||||
await app.dispatcher.dispatch_user(member_id, 'GUILD_DELETE', {
|
await app.dispatcher.dispatch_user_guild(
|
||||||
'guild_id': guild_id,
|
member_id, guild_id, 'GUILD_DELETE', {
|
||||||
'unavailable': False,
|
'guild_id': str(guild_id),
|
||||||
})
|
'unavailable': False,
|
||||||
|
})
|
||||||
|
|
||||||
await app.dispatcher.unsub('guild', guild_id, member_id)
|
await app.dispatcher.unsub('guild', guild_id, member_id)
|
||||||
|
|
||||||
|
await app.dispatcher.dispatch(
|
||||||
|
'lazy_guild', guild_id, 'remove_member', member_id)
|
||||||
|
|
||||||
await app.dispatcher.dispatch_guild(guild_id, 'GUILD_MEMBER_REMOVE', {
|
await app.dispatcher.dispatch_guild(guild_id, 'GUILD_MEMBER_REMOVE', {
|
||||||
'guild_id': str(guild_id),
|
'guild_id': str(guild_id),
|
||||||
'user': await app.storage.get_user(member_id),
|
'user': await app.storage.get_user(member_id),
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ from ..schemas import validate, USER_UPDATE
|
||||||
from .guilds import guild_check
|
from .guilds import guild_check
|
||||||
from .auth import check_password
|
from .auth import check_password
|
||||||
from litecord.auth import hash_data, check_username_usage
|
from litecord.auth import hash_data, check_username_usage
|
||||||
|
from litecord.blueprints.guild.mod import remove_member
|
||||||
|
|
||||||
bp = Blueprint('user', __name__)
|
bp = Blueprint('user', __name__)
|
||||||
|
|
||||||
|
|
@ -245,27 +246,7 @@ async def leave_guild(guild_id: int):
|
||||||
user_id = await token_check()
|
user_id = await token_check()
|
||||||
await guild_check(user_id, guild_id)
|
await guild_check(user_id, guild_id)
|
||||||
|
|
||||||
await app.db.execute("""
|
await remove_member(guild_id, user_id)
|
||||||
DELETE FROM members
|
|
||||||
WHERE user_id = $1 AND guild_id = $2
|
|
||||||
""", user_id, guild_id)
|
|
||||||
|
|
||||||
# first dispatch guild delete to the user,
|
|
||||||
# then remove from the guild,
|
|
||||||
# then tell the others that the member was removed
|
|
||||||
await app.dispatcher.dispatch_user_guild(
|
|
||||||
user_id, guild_id, 'GUILD_DELETE', {
|
|
||||||
'id': str(guild_id),
|
|
||||||
'unavailable': False,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
await app.dispatcher.unsub('guild', guild_id, user_id)
|
|
||||||
|
|
||||||
await app.dispatcher.dispatch_guild('GUILD_MEMBER_REMOVE', {
|
|
||||||
'guild_id': str(guild_id),
|
|
||||||
'user': await app.storage.get_user(user_id)
|
|
||||||
})
|
|
||||||
|
|
||||||
return '', 204
|
return '', 204
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -860,6 +860,43 @@ class GuildMemberList:
|
||||||
|
|
||||||
return await self.resync_by_item(user_index)
|
return await self.resync_by_item(user_index)
|
||||||
|
|
||||||
|
async def remove_member(self, user_id: int):
|
||||||
|
"""Remove a member from the list."""
|
||||||
|
if not self.list:
|
||||||
|
log.warning('lazy: unitialized, ignoring del uid {}',
|
||||||
|
user_id)
|
||||||
|
return
|
||||||
|
|
||||||
|
# we need the old index to resync later on
|
||||||
|
old_idx = self.get_item_index(user_id)
|
||||||
|
|
||||||
|
try:
|
||||||
|
pres = self.list.presences.pop(user_id)
|
||||||
|
except KeyError:
|
||||||
|
log.warning('lazy: unknown pres uid {}', user_id)
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
member = self.list.members.pop(user_id)
|
||||||
|
except KeyError:
|
||||||
|
log.warning('lazy: unknown member uid {}', user_id)
|
||||||
|
return
|
||||||
|
|
||||||
|
group_id = await self.get_group_for_member(
|
||||||
|
user_id, member['roles'], pres['status'])
|
||||||
|
|
||||||
|
if not group_id:
|
||||||
|
log.warning('lazy: unknown group uid {}', user_id)
|
||||||
|
return
|
||||||
|
|
||||||
|
self.list.data[group_id].remove(user_id)
|
||||||
|
|
||||||
|
if old_idx is None:
|
||||||
|
log.warning('lazy: unknown old idx uid {}', user_id)
|
||||||
|
return
|
||||||
|
|
||||||
|
await self.resync_by_item(old_idx)
|
||||||
|
|
||||||
async def pres_update(self, user_id: int,
|
async def pres_update(self, user_id: int,
|
||||||
partial_presence: Presence):
|
partial_presence: Presence):
|
||||||
"""Update a presence inside the member list.
|
"""Update a presence inside the member list.
|
||||||
|
|
@ -1273,3 +1310,7 @@ class LazyGuildDispatcher(Dispatcher):
|
||||||
async def _handle_new_member(self, guild_id, user_id: int):
|
async def _handle_new_member(self, guild_id, user_id: int):
|
||||||
await self._call_all_lists(
|
await self._call_all_lists(
|
||||||
guild_id, 'new_member', user_id)
|
guild_id, 'new_member', user_id)
|
||||||
|
|
||||||
|
async def _handle_remove_member(self, guild_id, user_id: int):
|
||||||
|
await self._call_all_lists(
|
||||||
|
guild_id, 'remove_member', user_id)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue