diff --git a/redbot/core/bot.py b/redbot/core/bot.py index 4e29659e3..eccba66f4 100644 --- a/redbot/core/bot.py +++ b/redbot/core/bot.py @@ -295,6 +295,13 @@ class Red(RedBase, discord.AutoShardedClient): You're welcome Caleb. """ + async def logout(self): + """Logs out of Discord and closes all connections.""" + if self._sentry_mgr: + await self._sentry_mgr.close() + + await super().logout() + async def shutdown(self, *, restart: bool = False): """Gracefully quit Red. diff --git a/redbot/core/sentry.py b/redbot/core/sentry.py index f0d6e20d6..23df5a7e4 100644 --- a/redbot/core/sentry.py +++ b/redbot/core/sentry.py @@ -1,6 +1,8 @@ +import asyncio import logging from raven import Client from raven.handlers.logging import SentryHandler +from raven_aiohttp import AioHttpTransport from redbot.core import __version__ @@ -19,6 +21,7 @@ class SentryManager: release=__version__, include_paths=["redbot"], enable_breadcrumbs=False, + transport=AioHttpTransport, ) self.handler = SentryHandler(self.client) self.logger = logger @@ -30,3 +33,9 @@ class SentryManager: def disable(self): """Disable error reporting for Sentry.""" self.logger.removeHandler(self.handler) + loop = asyncio.get_event_loop() + loop.create_task(self.close()) + + async def close(self): + """Wait for the Sentry client to send pending messages and shut down.""" + await self.client.remote.get_transport().close() diff --git a/requirements.txt b/requirements.txt index 24280b82e..10e65287f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,3 +8,4 @@ pyyaml==3.12 fuzzywuzzy[speedup]<=0.16.0 Red-Trivia>=1.1.1 async-timeout<3.0.0 +raven-aiohttp==0.7.0 \ No newline at end of file