mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-04-21 00:07:51 +00:00
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:
parent
1aceb4ee8d
commit
d87d11c5a6
@ -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'])))
|
||||
|
Loading…
x
Reference in New Issue
Block a user