From 570ccbf753fb744e2bbd0a4825a16272d74fc28e Mon Sep 17 00:00:00 2001 From: Rapptz Date: Fri, 6 May 2016 13:19:41 -0400 Subject: [PATCH] Suppress ConnectionClosed on sending in the main websocket. --- discord/gateway.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/discord/gateway.py b/discord/gateway.py index f4c7d2277..661607b2a 100644 --- a/discord/gateway.py +++ b/discord/gateway.py @@ -330,6 +330,9 @@ class DiscordWebSocket(websockets.client.WebSocketClientProtocol): for index in reversed(removed): del self._dispatch_listeners[index] + def _can_handle_close(self, code): + return code in (4006, 4008, 4009) or code in range(1001, 1015) + @asyncio.coroutine def poll_event(self): """Polls for a DISPATCH event and handles the general gateway loop. @@ -343,7 +346,7 @@ class DiscordWebSocket(websockets.client.WebSocketClientProtocol): msg = yield from self.recv() yield from self.received_message(msg) except websockets.exceptions.ConnectionClosed as e: - if e.code in (4006, 4008, 4009) or e.code in range(1001, 1015): + if self._can_handle_close(e.code): log.info('Websocket closed with {0.code}, attempting a reconnect.'.format(e)) raise ReconnectWebSocket() from e else: @@ -356,7 +359,11 @@ class DiscordWebSocket(websockets.client.WebSocketClientProtocol): @asyncio.coroutine def send_as_json(self, data): - yield from super().send(utils.to_json(data)) + try: + yield from super().send(utils.to_json(data)) + except websockets.exceptions.ConnectionClosed as e: + if not self._can_handle_close(e.code): + raise ConnectionClosed(e) from e @asyncio.coroutine def change_presence(self, *, game=None, idle=None):