diff options
| author | 2021-09-05 00:31:20 -0400 | |
|---|---|---|
| committer | 2021-09-05 00:31:20 -0400 | |
| commit | 02512e43f3d68ffd89654c5f2e9e3e9a27c0c018 (patch) | |
| tree | 4b62a6dbb39601f02aa435c7eb8a10433585c3bb /bot/exts/evergreen/xkcd.py | |
| parent | Move snakes commands into fun folder (diff) | |
Move game and fun commands to Fun folder, fix ddg
This moves all the fun commands and games into the fun folder.
This commit also makes changes to the duck_game.
It was setting a footer during an embed init, which is no longer
possible with the version of d.py we use. Additionally, an issue with
editing an embed that had a local image loaded.
The workaround for the time being is to update the message,
not the embed.
Diffstat (limited to 'bot/exts/evergreen/xkcd.py')
| -rw-r--r-- | bot/exts/evergreen/xkcd.py | 91 |
1 files changed, 0 insertions, 91 deletions
diff --git a/bot/exts/evergreen/xkcd.py b/bot/exts/evergreen/xkcd.py deleted file mode 100644 index b56c53d9..00000000 --- a/bot/exts/evergreen/xkcd.py +++ /dev/null @@ -1,91 +0,0 @@ -import logging -import re -from random import randint -from typing import Optional, Union - -from discord import Embed -from discord.ext import tasks -from discord.ext.commands import Cog, Context, command - -from bot.bot import Bot -from bot.constants import Colours - -log = logging.getLogger(__name__) - -COMIC_FORMAT = re.compile(r"latest|[0-9]+") -BASE_URL = "https://xkcd.com" - - -class XKCD(Cog): - """Retrieving XKCD comics.""" - - def __init__(self, bot: Bot): - self.bot = bot - self.latest_comic_info: dict[str, Union[str, int]] = {} - self.get_latest_comic_info.start() - - def cog_unload(self) -> None: - """Cancels refreshing of the task for refreshing the most recent comic info.""" - self.get_latest_comic_info.cancel() - - @tasks.loop(minutes=30) - async def get_latest_comic_info(self) -> None: - """Refreshes latest comic's information ever 30 minutes. Also used for finding a random comic.""" - async with self.bot.http_session.get(f"{BASE_URL}/info.0.json") as resp: - if resp.status == 200: - self.latest_comic_info = await resp.json() - else: - log.debug(f"Failed to get latest XKCD comic information. Status code {resp.status}") - - @command(name="xkcd") - async def fetch_xkcd_comics(self, ctx: Context, comic: Optional[str]) -> None: - """ - Getting an xkcd comic's information along with the image. - - To get a random comic, don't type any number as an argument. To get the latest, type 'latest'. - """ - embed = Embed(title=f"XKCD comic '{comic}'") - - embed.colour = Colours.soft_red - - if comic and (comic := re.match(COMIC_FORMAT, comic)) is None: - embed.description = "Comic parameter should either be an integer or 'latest'." - await ctx.send(embed=embed) - return - - comic = randint(1, self.latest_comic_info["num"]) if comic is None else comic.group(0) - - if comic == "latest": - info = self.latest_comic_info - else: - async with self.bot.http_session.get(f"{BASE_URL}/{comic}/info.0.json") as resp: - if resp.status == 200: - info = await resp.json() - else: - embed.title = f"XKCD comic #{comic}" - embed.description = f"{resp.status}: Could not retrieve xkcd comic #{comic}." - log.debug(f"Retrieving xkcd comic #{comic} failed with status code {resp.status}.") - await ctx.send(embed=embed) - return - - embed.title = f"XKCD comic #{info['num']}" - embed.description = info["alt"] - embed.url = f"{BASE_URL}/{info['num']}" - - if info["img"][-3:] in ("jpg", "png", "gif"): - embed.set_image(url=info["img"]) - date = f"{info['year']}/{info['month']}/{info['day']}" - embed.set_footer(text=f"{date} - #{info['num']}, \'{info['safe_title']}\'") - embed.colour = Colours.soft_green - else: - embed.description = ( - "The selected comic is interactive, and cannot be displayed within an embed.\n" - f"Comic can be viewed [here](https://xkcd.com/{info['num']})." - ) - - await ctx.send(embed=embed) - - -def setup(bot: Bot) -> None: - """Load the XKCD cog.""" - bot.add_cog(XKCD(bot)) |