From 67ab59106f0fdcad5f8cf67619a6fab32387825a Mon Sep 17 00:00:00 2001 From: Flame442 <34169552+Flame442@users.noreply.github.com> Date: Fri, 28 Feb 2020 13:47:01 -0500 Subject: [PATCH] [Trivia] Better handling for session errors (#3606) * Better handling for session errors * Use `stop` instead of `end_game`, translation support --- redbot/cogs/trivia/session.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/redbot/cogs/trivia/session.py b/redbot/cogs/trivia/session.py index d7ca7aac7..9ec42c7f8 100644 --- a/redbot/cogs/trivia/session.py +++ b/redbot/cogs/trivia/session.py @@ -98,8 +98,26 @@ class TriviaSession: session = cls(ctx, question_list, settings) loop = ctx.bot.loop session._task = loop.create_task(session.run()) + session._task.add_done_callback(session._error_handler) return session + def _error_handler(self, fut): + """Catches errors in the session task.""" + try: + fut.result() + except asyncio.CancelledError: + pass + except Exception as exc: + LOG.error("A trivia session has encountered an error.\n", exc_info=exc) + asyncio.create_task( + self.ctx.send( + _( + "An unexpected error occurred in the trivia session.\nCheck your console or logs for details." + ) + ) + ) + self.stop() + async def run(self): """Run the trivia session.