From c98e197a253f02a8cd29cb091bb09e9cb50e0937 Mon Sep 17 00:00:00 2001 From: dnns01 <git@dnns01.de> Date: Sat, 24 Aug 2024 22:18:42 +0200 Subject: [PATCH] minor adjustments to xkcd and added logging --- extensions/xkcd.py | 53 +++++++++++++++++++++++++--------------------- fernuni_bot.py | 9 +++++--- 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/extensions/xkcd.py b/extensions/xkcd.py index 81a8f02..f585fdd 100644 --- a/extensions/xkcd.py +++ b/extensions/xkcd.py @@ -1,7 +1,9 @@ import random +from typing import Dict, Any import aiohttp import discord +from aiohttp import ClientSession from discord import app_commands, Interaction from discord.ext import commands @@ -17,34 +19,37 @@ class Xkcd(commands.Cog): await interaction.response.defer() async with aiohttp.ClientSession() as session: - # Daten vom aktuellsten Comic holen, um max zu bestimmen - async with session.get('http://xkcd.com/info.0.json') as request: - data = await request.json() - max = data['num'] + latest = (await self.get_info(session)).get("num") # Nummer übernehmen wenn vorhanden und zwischen 1 und max, sonst random Nummer wählen - if number == 'latest': - n = max - else: - try: - n = number if (number and 0 < int(number) <= max) else str(random.randint(1, max)) - except ValueError: - n = str(random.randint(1, max)) + n = number if number and (0 < number <= latest) else random.randint(1, latest) # Daten zum Bild holen - async with session.get(f'http://xkcd.com/{n}/info.0.json') as request: - n_data = await request.json() - - img = n_data['img'] - num = n_data['num'] - title = n_data['title'] - text = n_data['alt'] - - # Comic embedden - embed = discord.Embed(title=f"xkcd #{num}: {title}", description=text, url=f"https://xkcd.com/{num}") - embed.set_image(url=img) - - await interaction.edit_original_response(embed=embed) + if info := await self.get_info(session, number=n): + img = info["img"] + num = info["num"] + title = info["title"] + text = info["alt"] + + # Comic embedden + embed = discord.Embed(title=f"xkcd #{num}: {title}", description=text, url=f"https://xkcd.com/{num}") + if n != number: + embed.set_footer(text="Du erhältst einen zufälligen Comic, da du entweder keine Nummer eingegeben hast, oder die von dir eingegebene Nummer ungültig war. Viel Spaß :)") + embed.set_image(url=img) + + await interaction.edit_original_response(embed=embed) + return + + await interaction.edit_original_response(content="Leider ist beim Abrufen des xkcd Comics ein Fehler aufgetreten.") + + @staticmethod + async def get_info(session: ClientSession, number: int = None) -> Dict[str, Any]: + url = f"http://xkcd.com/{number}/info.0.json" if number else "http://xkcd.com/info.0.json" + async with session.get(url) as request: + if request.status == 200: + return await request.json() + + return {} async def setup(bot: commands.Bot) -> None: diff --git a/fernuni_bot.py b/fernuni_bot.py index a43b408..f322814 100644 --- a/fernuni_bot.py +++ b/fernuni_bot.py @@ -1,4 +1,6 @@ +import logging import os +from logging import DEBUG from typing import List import discord @@ -19,7 +21,8 @@ OWNER = int(os.getenv('DISCORD_OWNER')) PIN_EMOJI = "📌" intents = Intents.all() -extensions = ["welcome"] +extensions = ["welcome", "xkcd"] +_log = logging.getLogger('discord') class Boty(commands.Bot): @@ -32,7 +35,7 @@ class Boty(commands.Bot): await self.tree.sync() for extension in self.initial_extensions: await self.load_extension(f"extensions.{extension}") - print(f"➕ Module {extension}") + _log.info("Module %s loaded", extension) await self.sync_slash_commands_for_guild(GUILD_ID) async def sync_slash_commands_for_guild(self, guild_id): @@ -48,7 +51,7 @@ class Boty(commands.Bot): async def on_ready(self): self.view_manager.on_ready() - print("✅ Client started!") + _log.info("Client started!") @staticmethod def get_settings(guild_id: int) -> Settings: -- GitLab