From 04512db4df42537cf52208bae60d943827e4e100 Mon Sep 17 00:00:00 2001 From: Luna Date: Sat, 28 Aug 2021 20:09:27 -0300 Subject: [PATCH] add friends to READY_SUPPLEMENTAL --- litecord/gateway/websocket.py | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/litecord/gateway/websocket.py b/litecord/gateway/websocket.py index 2d09482..0a4a275 100644 --- a/litecord/gateway/websocket.py +++ b/litecord/gateway/websocket.py @@ -113,16 +113,36 @@ def _complete_users_list(user_id: str, base_ready, user_ready, wsp) -> dict: "id": relationship["id"], } ) - return ready + + return ready, users_to_send -def _compute_supplemental(base_ready, user_ready, wsp): +async def _compute_supplemental(app, base_ready, user_ready, users_to_send: dict): supplemental = { "merged_presences": {"guilds": [], "friends": []}, "merged_members": [], "guilds": [], } + for relationship in user_ready["relationships"]: + if relationship["type"] != RelationshipType.FRIEND.value: + continue + + friend_user = users_to_send[relationship["user"]["id"]] + friend_presence = await app.presence.friend_presences([int(friend_user["id"])])[ + 0 + ] + + supplemental["merged_presences"]["friends"].append( + { + "user_id": relationship["user"]["id"], + "status": friend_presence["status"], + "last_modified": 0, + "client_status": friend_presence["client_status"], + "activities": friend_presence["activities"], + } + ) + for guild in base_ready["guilds"]: if guild["unavailable"]: continue @@ -503,10 +523,14 @@ class GatewayWebsocket: # base_ready and user_ready are normalized as v6. from here onwards # full_ready_data and ready_supplemental are version specific. - full_ready_data = _complete_users_list( + # pass users_to_send to ready_supplemental so that its easier to + # cross-reference things + full_ready_data, users_to_send = _complete_users_list( user["id"], base_ready, user_ready, self.wsp ) - ready_supplemental = _compute_supplemental(base_ready, user_ready, self.wsp) + ready_supplemental = await _compute_supplemental( + self.app, base_ready, user_ready, users_to_send + ) if not self.state.bot: for guild in full_ready_data["guilds"]: