aboutsummaryrefslogtreecommitdiffstats
path: root/bot/exts/evergreen/xkcd.py
diff options
context:
space:
mode:
authorGravatar brad90four <[email protected]>2021-09-07 07:34:57 -0400
committerGravatar brad90four <[email protected]>2021-09-07 07:34:57 -0400
commit1e711f3e04c6e6adb66159ffbdc4f72740b62fd7 (patch)
treeaf1eae3a95b557ee27cf7577b67b8fecf90b1752 /bot/exts/evergreen/xkcd.py
parentAdded ryanzec_colours.json constructed from ryanzec/name-that-color (diff)
parentContinue work in progress (diff)
Fixing merge conflicts
Diffstat (limited to 'bot/exts/evergreen/xkcd.py')
-rw-r--r--bot/exts/evergreen/xkcd.py91
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))