Prevent PyPI's unavailability from causing command failure (#3663)

This commit is contained in:
jack1142 2020-03-19 08:19:01 +01:00 committed by GitHub
parent 23eae27a8f
commit a126da5f23
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 8 deletions

View File

@ -327,9 +327,13 @@ class Core(commands.Cog, CoreLogic):
owner = app_info.owner
custom_info = await self.bot._config.custom_info()
try:
async with aiohttp.ClientSession() as session:
async with session.get(red_pypi_json) as r:
data = await r.json()
except (aiohttp.ClientError, asyncio.TimeoutError):
outdated = None
else:
outdated = VersionInfo.from_str(data["info"]["version"]) > red_version_info
about = _(
"This bot is an instance of [Red, an open source Discord bot]({}) "
@ -345,10 +349,15 @@ class Core(commands.Cog, CoreLogic):
embed.add_field(name="Python", value=python_version)
embed.add_field(name="discord.py", value=dpy_version)
embed.add_field(name=_("Red version"), value=red_version)
if outdated:
embed.add_field(
name=_("Outdated"), value=_("Yes, {} is available").format(data["info"]["version"])
if outdated is True:
outdated_value = _("Yes, {version} is available").format(
version=data["info"]["version"]
)
elif outdated is None:
outdated_value = _("Checking for updates failed.")
else:
outdated_value = _("No")
embed.add_field(name=_("Outdated"), value=outdated_value)
if custom_info:
embed.add_field(name=_("About this instance"), value=custom_info, inline=False)
embed.add_field(name=_("About Red"), value=about, inline=False)

View File

@ -1,3 +1,4 @@
import asyncio
import contextlib
import sys
import codecs
@ -84,7 +85,7 @@ def init_events(bot, cli_flags):
INFO.append("{} cogs with {} commands".format(len(bot.cogs), len(bot.commands)))
outdated_red_message = ""
with contextlib.suppress(aiohttp.ClientError, discord.HTTPException):
with contextlib.suppress(aiohttp.ClientError, asyncio.TimeoutError):
async with aiohttp.ClientSession() as session:
async with session.get("https://pypi.org/pypi/red-discordbot/json") as r:
data = await r.json()