diff --git a/litecord/blueprints/users.py b/litecord/blueprints/users.py index d8346cf..91b91c7 100644 --- a/litecord/blueprints/users.py +++ b/litecord/blueprints/users.py @@ -235,6 +235,10 @@ async def patch_me(): ) ) + await app.dispatcher.dispatch_many( + 'lazy_guild', guild_ids, 'update_user', user_id + ) + return jsonify(private_user) diff --git a/litecord/pubsub/lazy_guild.py b/litecord/pubsub/lazy_guild.py index 3b6b22e..06af7a2 100644 --- a/litecord/pubsub/lazy_guild.py +++ b/litecord/pubsub/lazy_guild.py @@ -929,6 +929,17 @@ class GuildMemberList: # tell everyone about the removal. await self.resync_by_item(old_idx) + async def update_user(self, user_id: int): + """Called for user updates such as avatar or username.""" + + # update user information inside self.list.members + self.list.members[user_id]['user'] = \ + await self.storage.get_user(user_id) + + # redispatch + user_idx = self.get_item_index(user_id) + return await self.resync_by_item(user_idx) + async def pres_update(self, user_id: int, partial_presence: Presence): """Update a presence inside the member list. @@ -1346,3 +1357,7 @@ class LazyGuildDispatcher(Dispatcher): async def _handle_remove_member(self, guild_id, user_id: int): await self._call_all_lists( guild_id, 'remove_member', user_id) + + async def _handle_update_user(self, guild_id, user_id: int): + await self._call_all_lists( + guild_id, 'update_user', user_id)