aboutsummaryrefslogtreecommitdiff
path: root/discord
diff options
context:
space:
mode:
Diffstat (limited to 'discord')
-rw-r--r--discord/client.py12
-rw-r--r--discord/shard.py23
2 files changed, 35 insertions, 0 deletions
diff --git a/discord/client.py b/discord/client.py
index 1ddb09d6..a5bb9c00 100644
--- a/discord/client.py
+++ b/discord/client.py
@@ -282,6 +282,18 @@ class Client:
ws = self.ws
return float('nan') if not ws else ws.latency
+ def is_ws_ratelimited(self):
+ """:class:`bool`: Whether the websocket is currently rate limited.
+
+ This can be useful to know when deciding whether you should query members
+ using HTTP or via the gateway.
+
+ .. versionadded:: 1.6
+ """
+ if self.ws:
+ return self.ws.is_ratelimited()
+ return False
+
@property
def user(self):
"""Optional[:class:`.ClientUser`]: Represents the connected client. ``None`` if not logged in."""
diff --git a/discord/shard.py b/discord/shard.py
index 6985d797..ebc27b0d 100644
--- a/discord/shard.py
+++ b/discord/shard.py
@@ -258,6 +258,16 @@ class ShardInfo:
""":class:`float`: Measures latency between a HEARTBEAT and a HEARTBEAT_ACK in seconds for this shard."""
return self._parent.ws.latency
+ def is_ws_ratelimited(self):
+ """:class:`bool`: Whether the websocket is currently rate limited.
+
+ This can be useful to know when deciding whether you should query members
+ using HTTP or via the gateway.
+
+ .. versionadded:: 1.6
+ """
+ return self._parent.ws.is_ratelimited()
+
class AutoShardedClient(Client):
"""A client similar to :class:`Client` except it handles the complications
of sharding for the user into a more manageable and transparent single
@@ -519,3 +529,16 @@ class AutoShardedClient(Client):
me.activities = activities
me.status = status_enum
+
+ def is_ws_ratelimited(self):
+ """:class:`bool`: Whether the websocket is currently rate limited.
+
+ This can be useful to know when deciding whether you should query members
+ using HTTP or via the gateway.
+
+ This implementation checks if any of the shards are rate limited.
+ For more granular control, consider :meth:`ShardInfo.is_ws_ratelimited`.
+
+ .. versionadded:: 1.6
+ """
+ return any(shard.ws.is_ratelimited() for shard in self.__shards.values())