Fix voice states being overwritten after a GUILD_SYNC.
This was a two-fold problem. The first of which involved the overwriting of members during a GUILD_SYNC. Since we are requesting a chunk anyway, we have all the member references we need without actually chunking. The second problem came from the order. We were doing a GUILD_SYNC and then doing the chunking requests. We should do the GUILD_SYNC after the chunking in order to just update presences.
This commit is contained in:
		| @@ -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) | ||||
|   | ||||
| @@ -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']))) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user