Ensure bot doesn't indefinitely hang on an exception in on_ready (#6202)

This commit is contained in:
Jakub Kuczys 2023-07-19 22:44:38 +02:00 committed by GitHub
parent 48cfde7b8c
commit bad23a4a93
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -13,6 +13,7 @@ import importlib.metadata
from packaging.requirements import Requirement from packaging.requirements import Requirement
from redbot.core import data_manager from redbot.core import data_manager
from redbot.core.bot import ExitCodes
from redbot.core.commands import RedHelpFormatter, HelpSettings from redbot.core.commands import RedHelpFormatter, HelpSettings
from redbot.core.i18n import ( from redbot.core.i18n import (
Translator, Translator,
@ -140,6 +141,13 @@ def init_events(bot, cli_flags):
@bot.event @bot.event
async def on_ready(): async def on_ready():
try:
await _on_ready()
except Exception as exc:
log.critical("The bot failed to get ready!", exc_info=exc)
sys.exit(ExitCodes.CRITICAL)
async def _on_ready():
if bot._uptime is not None: if bot._uptime is not None:
return return
@ -170,13 +178,12 @@ def init_events(bot, cli_flags):
outdated_red_message = "" outdated_red_message = ""
rich_outdated_message = "" rich_outdated_message = ""
with contextlib.suppress(aiohttp.ClientError, asyncio.TimeoutError): pypi_version, py_version_req = await fetch_latest_red_version_info()
pypi_version, py_version_req = await fetch_latest_red_version_info() outdated = pypi_version and pypi_version > red_version_info
outdated = pypi_version and pypi_version > red_version_info if outdated:
if outdated: outdated_red_message, rich_outdated_message = get_outdated_red_messages(
outdated_red_message, rich_outdated_message = get_outdated_red_messages( pypi_version, py_version_req
pypi_version, py_version_req )
)
rich_console = rich.get_console() rich_console = rich.get_console()
rich_console.print(INTRO, style="red", markup=False, highlight=False) rich_console.print(INTRO, style="red", markup=False, highlight=False)