diff options
| author | Rapptz <[email protected]> | 2016-03-06 05:52:05 -0500 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2016-03-06 05:52:05 -0500 |
| commit | 6ac2e07833d7a24c7a3b04a789095f5d847d4646 (patch) | |
| tree | bc8c9b4dc267cdf0ca12882e7118f5f64ca7035d | |
| parent | Move chunking logic back into ConnectionState. (diff) | |
| download | discord.py-6ac2e07833d7a24c7a3b04a789095f5d847d4646.tar.xz discord.py-6ac2e07833d7a24c7a3b04a789095f5d847d4646.zip | |
Fix bug where large servers in GUILD_CREATE did not get chunked.
| -rw-r--r-- | discord/state.py | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/discord/state.py b/discord/state.py index fec2e111..e38fc89d 100644 --- a/discord/state.py +++ b/discord/state.py @@ -128,6 +128,10 @@ class ConnectionState: self._add_server(server) return server + def chunks_needed(self, server): + for chunk in range(math.ceil(server._member_count / 1000)): + yield self.receive_chunk(server.id) + @asyncio.coroutine def parse_ready(self, data): self.user = User(**data['user']) @@ -148,9 +152,7 @@ class ConnectionState: chunks = [] for server in large_servers: - chunks_needed = math.ceil(server._member_count / 1000) - for chunk in range(chunks_needed): - chunks.append(self.receive_chunk(server.id)) + chunks.extend(self.chunks_needed(server)) if chunks: yield from asyncio.wait(chunks) @@ -292,6 +294,7 @@ class ConnectionState: self.dispatch('member_update', old_member, member) + @asyncio.coroutine def parse_guild_create(self, data): unavailable = data.get('unavailable') if unavailable == False: @@ -314,6 +317,14 @@ class ConnectionState: # available, so it isn't in the cache... server = self._add_server_from_data(data) + + # check if it requires chunking + if server.large: + yield from self.chunker(server) + chunks = list(self.chunks_needed(server)) + if chunks: + yield from asyncio.wait(chunks) + self.dispatch('server_join', server) def parse_guild_update(self, data): |