aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--discord/state.py28
1 files changed, 23 insertions, 5 deletions
diff --git a/discord/state.py b/discord/state.py
index 8be77ec7..648d9b53 100644
--- a/discord/state.py
+++ b/discord/state.py
@@ -285,10 +285,16 @@ class ConnectionState:
launch.set()
await asyncio.sleep(2, loop=self.loop)
- guilds = self._ready_state.guilds
+ guilds = next(zip(*self._ready_state.guilds), [])
if self._fetch_offline:
await self.request_offline_members(guilds)
+ for guild, unavailable in self._ready_state.guilds:
+ if unavailable == False:
+ self.dispatch('guild_available', guild)
+ else:
+ self.dispatch('guild_join', guild)
+
# remove the state
try:
del self._ready_state
@@ -648,7 +654,7 @@ class ConnectionState:
try:
state = self._ready_state
state.launch.clear()
- state.guilds.append(guild)
+ state.guilds.append((guild, unavailable))
except AttributeError:
# the _ready_state attribute is only there during
# processing of useful READY.
@@ -920,12 +926,24 @@ class AutoShardedConnectionState(ConnectionState):
await asyncio.sleep(2.0 * self.shard_count, loop=self.loop)
if self._fetch_offline:
- guilds = sorted(self._ready_state.guilds, key=lambda g: g.shard_id)
+ guilds = sorted(self._ready_state.guilds, key=lambda g: g[0].shard_id)
- for shard_id, sub_guilds in itertools.groupby(guilds, key=lambda g: g.shard_id):
- sub_guilds = list(sub_guilds)
+ for shard_id, sub_guilds_info in itertools.groupby(guilds, key=lambda g: g[0].shard_id):
+ sub_guilds, sub_available = zip(*sub_guilds_info)
await self.request_offline_members(sub_guilds, shard_id=shard_id)
+
+ for guild, unavailable in zip(sub_guilds, sub_available):
+ if unavailable == False:
+ self.dispatch('guild_available', guild)
+ else:
+ self.dispatch('guild_join', guild)
self.dispatch('shard_ready', shard_id)
+ else:
+ for guild, unavailable in self._ready_state.guilds:
+ if unavailable == False:
+ self.dispatch('guild_available', guild)
+ else:
+ self.dispatch('guild_join', guild)
# remove the state
try: