diff options
-rw-r--r-- | bot/exts/evergreen/status_codes.py | 68 |
1 files changed, 22 insertions, 46 deletions
diff --git a/bot/exts/evergreen/status_codes.py b/bot/exts/evergreen/status_codes.py index 181c71ce..7f6d160d 100644 --- a/bot/exts/evergreen/status_codes.py +++ b/bot/exts/evergreen/status_codes.py @@ -1,4 +1,3 @@ -from http import HTTPStatus from random import choice import discord @@ -8,6 +7,9 @@ from bot.bot import Bot HTTP_DOG_URL = "https://httpstatusdogs.com/img/{code}.jpg" HTTP_CAT_URL = "https://http.cat/{code}.jpg" +STATUS_TEMPLATE = '**Status: {code}**' +ERR_404 = 'Unable to find status Floof for {code}.' +ERR_UNKNOWN = 'Error attempting to retrieve status Floof for {code}.' class HTTPStatusCodes(commands.Cog): @@ -28,54 +30,28 @@ class HTTPStatusCodes(commands.Cog): @http_status_group.command(name="cat") async def http_cat(self, ctx: commands.Context, code: int) -> None: - """Sends an embed with an image of a cat, portraying the status code.""" - embed = discord.Embed(title=f"**Status: {code}**") - url = HTTP_CAT_URL.format(code=code) - - try: - HTTPStatus(code) - async with self.bot.http_session.get(url, allow_redirects=False) as response: - if response.status != 404: - embed.set_image(url=url) - else: - raise NotImplementedError - - except ValueError: - embed.set_footer(text="Inputted status code does not exist.") - - except NotImplementedError: - embed.set_footer(text="Inputted status code is not implemented by http.cat yet.") - - finally: - await ctx.send(embed=embed) + """Assemble Cat URL and build Embed.""" + await self.build_embed(url=HTTP_CAT_URL.format(code=code), ctx=ctx, code=code) @http_status_group.command(name="dog") async def http_dog(self, ctx: commands.Context, code: int) -> None: - """Sends an embed with an image of a dog, portraying the status code.""" - # These codes aren't server-friendly. - if code in (304, 422): - await self.http_cat(ctx, code) - return - - embed = discord.Embed(title=f"**Status: {code}**") - url = HTTP_DOG_URL.format(code=code) - - try: - HTTPStatus(code) - async with self.bot.http_session.get(url, allow_redirects=False) as response: - if response.status != 302: - embed.set_image(url=url) - else: - raise NotImplementedError - - except ValueError: - embed.set_footer(text="Inputted status code does not exist.") - - except NotImplementedError: - embed.set_footer(text="Inputted status code is not implemented by httpstatusdogs.com yet.") - - finally: - await ctx.send(embed=embed) + """Assemble Dog URL and build Embed.""" + await self.build_embed(url=HTTP_DOG_URL.format(code=code), ctx=ctx, code=code) + + async def build_embed(self, url: str, ctx: commands.Context, code: int) -> None: + """Attempt to build and dispatch embed. Append error message instead if something goes wrong.""" + async with self.bot.http_session.get(url, allow_redirects=False) as response: + if 200 <= response.status <= 299: + await ctx.send(embed=discord.Embed( + title=STATUS_TEMPLATE.format(code=code)).set_image(url=url)) + elif 404 == response.status: + await ctx.send(embed=discord.Embed( + title=ERR_404.format(code=code)).set_image(url=url) + ) + else: + await ctx.send(embed=discord.Embed( + title=STATUS_TEMPLATE.format(code=code), footer=ERR_UNKNOWN.format(code=code)) + ) def setup(bot: Bot) -> None: |