gateway: populate ready.users array

This commit is contained in:
Luna 2021-06-26 00:04:36 -03:00
parent 03d470dbe7
commit ae6c85f0ad
1 changed files with 25 additions and 1 deletions

View File

@ -69,6 +69,29 @@ WebsocketProperties = collections.namedtuple(
) )
def _complete_users_list(base_ready, user_ready) -> dict:
"""Use the data we were already preparing to send in READY to construct
the users array, saving on I/O cost."""
# TODO deduplication
users_list = []
for guild in base_ready["guilds"]:
if guild["unavailable"]:
continue
for member in guild["members"]:
users_list.append(member["user"])
for private_channel in base_ready["private_channels"]:
for recipient in private_channel["recipients"]:
users_list.append(recipient)
ready = {**base_ready, **user_ready}
ready["users"] = users_list
return ready
class GatewayWebsocket: class GatewayWebsocket:
"""Main gateway websocket logic.""" """Main gateway websocket logic."""
@ -378,7 +401,8 @@ class GatewayWebsocket:
"shard": [self.state.current_shard, self.state.shard_count], "shard": [self.state.current_shard, self.state.shard_count],
} }
await self.dispatch("READY", {**base_ready, **user_ready}) full_ready_data = _complete_users_list(base_ready, user_ready)
await self.dispatch("READY", full_ready_data)
app.sched.spawn(self._guild_dispatch(guilds)) app.sched.spawn(self._guild_dispatch(guilds))
async def _check_shards(self, shard, user_id): async def _check_shards(self, shard, user_id):