From ceafae0ab2cb52c8b9fde100caf91fde9afaa5e1 Mon Sep 17 00:00:00 2001 From: Rapptz Date: Tue, 8 Aug 2017 20:29:37 -0400 Subject: [PATCH] Add DiscordWebSocket.latency to measure discord heartbeat latency. --- discord/gateway.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/discord/gateway.py b/discord/gateway.py index 0ee0d62ed..d5ddb9eb8 100644 --- a/discord/gateway.py +++ b/discord/gateway.py @@ -63,6 +63,7 @@ class KeepAliveHandler(threading.Thread): self.msg = 'Keeping websocket alive with sequence %s.' self._stop_ev = threading.Event() self._last_ack = time.time() + self._last_send = time.time() def run(self): while not self._stop_ev.wait(self.interval): @@ -88,6 +89,8 @@ class KeepAliveHandler(threading.Thread): f.result() except Exception: self.stop() + else: + self._last_send = time.time() def get_payload(self): return { @@ -408,6 +411,12 @@ class DiscordWebSocket(websockets.client.WebSocketClientProtocol): for index in reversed(removed): del self._dispatch_listeners[index] + @property + def latency(self): + """float: Measures latency between a HEARTBEAT and a HEARTBEAT_ACK in seconds.""" + heartbeat = self._keep_alive + return float('inf') if heartbeat is None else heartbeat._last_ack - heartbeat._last_send + def _can_handle_close(self, code): return code not in (1000, 4004, 4010, 4011)