From d52bc5d2251f10edb5b5fe1d3713179f0f2ea4d8 Mon Sep 17 00:00:00 2001 From: Rapptz Date: Wed, 20 Jul 2022 23:12:36 -0400 Subject: [PATCH] Cache voice members on start up if MemberCacheFlags.voice is enabled Fix #8209 --- discord/guild.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/discord/guild.py b/discord/guild.py index a3accfc70..ac5e46945 100644 --- a/discord/guild.py +++ b/discord/guild.py @@ -519,22 +519,23 @@ class Guild(Hashable): scheduled_event = ScheduledEvent(data=s, state=state) self._scheduled_events[scheduled_event.id] = scheduled_event - cache_joined = self._state.member_cache_flags.joined - self_id = self._state.self_id - for mdata in guild.get('members', []): - member = Member(data=mdata, guild=self, state=state) # type: ignore # Members will have the 'user' key in this scenario - if cache_joined or member.id == self_id: - self._add_member(member) - - self._sync(guild) - self._large: Optional[bool] = None if self._member_count is None else self._member_count >= 250 - self.owner_id: Optional[int] = utils._get_as_snowflake(guild, 'owner_id') self.afk_channel: Optional[VocalGuildChannel] = self.get_channel(utils._get_as_snowflake(guild, 'afk_channel_id')) # type: ignore for obj in guild.get('voice_states', []): self._update_voice_state(obj, int(obj['channel_id'])) + cache_joined = self._state.member_cache_flags.joined + cache_voice = self._state.member_cache_flags.voice + self_id = self._state.self_id + for mdata in guild.get('members', []): + member = Member(data=mdata, guild=self, state=state) # type: ignore # Members will have the 'user' key in this scenario + if cache_joined or member.id == self_id or (cache_voice and member.id in self._voice_states): + self._add_member(member) + + self._sync(guild) + self._large: Optional[bool] = None if self._member_count is None else self._member_count >= 250 + # TODO: refactor/remove? def _sync(self, data: GuildPayload) -> None: try: