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.unavailable = guild.get('unavailable', False) | ||||||
|         self.id = guild['id'] |         self.id = guild['id'] | ||||||
|         self.roles = [Role(server=self, **r) for r in guild.get('roles', [])] |         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._sync(guild) | ||||||
|         self.large = None if member_count is None else self._member_count > 250 |         self.large = None if member_count is None else self._member_count > 250 | ||||||
|  |  | ||||||
| @@ -197,18 +210,6 @@ class Server(Hashable): | |||||||
|         if 'large' in data: |         if 'large' in data: | ||||||
|             self.large = data['large'] |             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', []): |         for presence in data.get('presences', []): | ||||||
|             user_id = presence['user']['id'] |             user_id = presence['user']['id'] | ||||||
|             member = self.get_member(user_id) |             member = self.get_member(user_id) | ||||||
|   | |||||||
| @@ -186,6 +186,10 @@ class ConnectionState: | |||||||
|         # remove the state |         # remove the state | ||||||
|         del self._ready_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 |         # dispatch the event | ||||||
|         self.dispatch('ready') |         self.dispatch('ready') | ||||||
|  |  | ||||||
| @@ -200,9 +204,6 @@ class ConnectionState: | |||||||
|             if server.large or not self.is_bot: |             if server.large or not self.is_bot: | ||||||
|                 servers.append(server) |                 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'): |         for pm in data.get('private_channels'): | ||||||
|             self._add_private_channel(PrivateChannel(id=pm['id'], |             self._add_private_channel(PrivateChannel(id=pm['id'], | ||||||
|                                      user=User(**pm['recipient']))) |                                      user=User(**pm['recipient']))) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user