aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcookie <[email protected]>2016-06-26 14:43:28 -0400
committerRapptz <[email protected]>2016-06-26 14:47:16 -0400
commitabf9be5f7db79cbfab6d4502fa15ba72975059dd (patch)
treeb92dd6c72f00ee84a9ff607daa09a38d022e1dcf
parentDocument that bot users can't use Client.accept_invite (diff)
downloaddiscord.py-abf9be5f7db79cbfab6d4502fa15ba72975059dd.tar.xz
discord.py-abf9be5f7db79cbfab6d4502fa15ba72975059dd.zip
Guild Sharding support
-rw-r--r--discord/client.py6
-rw-r--r--discord/gateway.py5
2 files changed, 11 insertions, 0 deletions
diff --git a/discord/client.py b/discord/client.py
index ebea8ec4..5ab263cd 100644
--- a/discord/client.py
+++ b/discord/client.py
@@ -101,6 +101,10 @@ class Client:
connector : aiohttp.BaseConnector
The `connector`_ to use for connection pooling. Useful for proxies, e.g.
with a `ProxyConnector`_.
+ shard_id : Optional[int]
+ Integer starting at 0 and less than shard_count.
+ shard_count : Optional[int]
+ The total number of shards.
Attributes
-----------
@@ -133,6 +137,8 @@ class Client:
self.loop = asyncio.get_event_loop() if loop is None else loop
self._listeners = []
self.cache_auth = options.get('cache_auth', True)
+ self.shard_id = options.get('shard_id')
+ self.shard_count = options.get('shard_count')
max_messages = options.get('max_messages')
if max_messages is None or max_messages < 100:
diff --git a/discord/gateway.py b/discord/gateway.py
index c605cb95..ade93991 100644
--- a/discord/gateway.py
+++ b/discord/gateway.py
@@ -178,6 +178,8 @@ class DiscordWebSocket(websockets.client.WebSocketClientProtocol):
ws._connection = client.connection
ws._dispatch = client.dispatch
ws.gateway = gateway
+ ws.shard_id = client.shard_id
+ ws.shard_count = client.shard_count
client.connection._update_references(ws)
@@ -250,6 +252,9 @@ class DiscordWebSocket(websockets.client.WebSocketClientProtocol):
if not self._connection.is_bot:
payload['d']['synced_guilds'] = []
+ if self.shard_id is not None and self.shard_count is not None:
+ payload['d']['shard'] = [self.shard_id, self.shard_count]
+
yield from self.send_as_json(payload)
@asyncio.coroutine