diff --git a/discord/client.py b/discord/client.py index ebea8ec46..5ab263cd9 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 c605cb95f..ade939915 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