diff --git a/discord/server.py b/discord/server.py index 02873c464..b320feded 100644 --- a/discord/server.py +++ b/discord/server.py @@ -180,6 +180,19 @@ class Server(Hashable): self.unavailable = guild.get('unavailable', False) self.id = guild['id'] self.roles = [Role(server=self, **r) for r in guild.get('roles', [])] + + for mdata in guild.get('members', []): + roles = [self.default_role] + for role_id in mdata['roles']: + role = utils.find(lambda r: r.id == role_id, self.roles) + if role is not None: + roles.append(role) + + mdata['roles'] = roles + member = Member(**mdata) + member.server = self + self._add_member(member) + self._sync(guild) self.large = None if member_count is None else self._member_count > 250 @@ -197,18 +210,6 @@ class Server(Hashable): if 'large' in data: self.large = data['large'] - for mdata in data.get('members', []): - roles = [self.default_role] - for role_id in mdata['roles']: - role = utils.find(lambda r: r.id == role_id, self.roles) - if role is not None: - roles.append(role) - - mdata['roles'] = roles - member = Member(**mdata) - member.server = self - self._add_member(member) - for presence in data.get('presences', []): user_id = presence['user']['id'] member = self.get_member(user_id) diff --git a/discord/state.py b/discord/state.py index 02ee04f14..7fc8debc8 100644 --- a/discord/state.py +++ b/discord/state.py @@ -186,6 +186,10 @@ class ConnectionState: # remove the state del self._ready_state + # call GUILD_SYNC after we're done chunking + if not self.is_bot: + compat.create_task(self.syncer([s.id for s in self.servers]), loop=self.loop) + # dispatch the event self.dispatch('ready') @@ -200,9 +204,6 @@ class ConnectionState: if server.large or not self.is_bot: servers.append(server) - if not self.is_bot: - compat.create_task(self.syncer([s.id for s in self.servers]), loop=self.loop) - for pm in data.get('private_channels'): self._add_private_channel(PrivateChannel(id=pm['id'], user=User(**pm['recipient'])))