mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-06-06 20:07:17 +00:00
Propagate exceptions when an unhandled error happens
This commit is contained in:
parent
bd9821320e
commit
a42bebe581
@ -45,6 +45,7 @@ class EventType:
|
|||||||
reconnect = 1
|
reconnect = 1
|
||||||
resume = 2
|
resume = 2
|
||||||
identify = 3
|
identify = 3
|
||||||
|
terminate = 4
|
||||||
|
|
||||||
class EventItem:
|
class EventItem:
|
||||||
__slots__ = ('type', 'shard', 'error')
|
__slots__ = ('type', 'shard', 'error')
|
||||||
@ -139,6 +140,11 @@ class Shard:
|
|||||||
except self._handled_exceptions as e:
|
except self._handled_exceptions as e:
|
||||||
await self._handle_disconnect(e)
|
await self._handle_disconnect(e)
|
||||||
break
|
break
|
||||||
|
except asyncio.CancelledError:
|
||||||
|
break
|
||||||
|
except Exception as e:
|
||||||
|
self._queue.put_nowait(EventItem(EventType.terminate, self, e))
|
||||||
|
break
|
||||||
|
|
||||||
async def reidentify(self, exc):
|
async def reidentify(self, exc):
|
||||||
self._cancel_task()
|
self._cancel_task()
|
||||||
@ -151,6 +157,10 @@ class Shard:
|
|||||||
self.ws = await asyncio.wait_for(coro, timeout=60.0)
|
self.ws = await asyncio.wait_for(coro, timeout=60.0)
|
||||||
except self._handled_exceptions as e:
|
except self._handled_exceptions as e:
|
||||||
await self._handle_disconnect(e)
|
await self._handle_disconnect(e)
|
||||||
|
except asyncio.CancelledError:
|
||||||
|
return
|
||||||
|
except Exception as e:
|
||||||
|
self._queue.put_nowait(EventItem(EventType.terminate, self, e))
|
||||||
else:
|
else:
|
||||||
self.launch()
|
self.launch()
|
||||||
|
|
||||||
@ -161,6 +171,10 @@ class Shard:
|
|||||||
self.ws = await asyncio.wait_for(coro, timeout=60.0)
|
self.ws = await asyncio.wait_for(coro, timeout=60.0)
|
||||||
except self._handled_exceptions as e:
|
except self._handled_exceptions as e:
|
||||||
await self._handle_disconnect(e)
|
await self._handle_disconnect(e)
|
||||||
|
except asyncio.CancelledError:
|
||||||
|
return
|
||||||
|
except Exception as e:
|
||||||
|
self._queue.put_nowait(EventItem(EventType.terminate, self, e))
|
||||||
else:
|
else:
|
||||||
self.launch()
|
self.launch()
|
||||||
|
|
||||||
@ -312,6 +326,9 @@ class AutoShardedClient(Client):
|
|||||||
await item.shard.reidentify(item.error)
|
await item.shard.reidentify(item.error)
|
||||||
elif item.type == EventType.reconnect:
|
elif item.type == EventType.reconnect:
|
||||||
await item.shard.reconnect()
|
await item.shard.reconnect()
|
||||||
|
elif item.type == EventType.terminate:
|
||||||
|
await self.close()
|
||||||
|
raise item.error
|
||||||
|
|
||||||
async def close(self):
|
async def close(self):
|
||||||
"""|coro|
|
"""|coro|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user