mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-07-23 19:34:23 +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.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'])))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user