aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRapptz <[email protected]>2016-05-06 13:19:41 -0400
committerRapptz <[email protected]>2016-05-06 13:19:41 -0400
commit570ccbf753fb744e2bbd0a4825a16272d74fc28e (patch)
tree4642562a0f83ee71e723801d49afbbb465554ddd
parentAdd libopus DLLs for ease of use. (diff)
downloaddiscord.py-570ccbf753fb744e2bbd0a4825a16272d74fc28e.tar.xz
discord.py-570ccbf753fb744e2bbd0a4825a16272d74fc28e.zip
Suppress ConnectionClosed on sending in the main websocket.
-rw-r--r--discord/gateway.py11
1 files changed, 9 insertions, 2 deletions
diff --git a/discord/gateway.py b/discord/gateway.py
index f4c7d227..661607b2 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):