From 47789f920a6efacdee6e0a2044282792e8c5eb49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn-Michael=20Miehe?= Date: Sun, 3 Dec 2023 00:52:26 +0100 Subject: [PATCH] command /advent --- lenaverse_bot/commands/__init__.py | 4 +- lenaverse_bot/commands/advent.py | 97 ++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 lenaverse_bot/commands/advent.py diff --git a/lenaverse_bot/commands/__init__.py b/lenaverse_bot/commands/__init__.py index c2015d8..e1d8666 100644 --- a/lenaverse_bot/commands/__init__.py +++ b/lenaverse_bot/commands/__init__.py @@ -1,3 +1,3 @@ -from . import post, verein +from . import advent, post, verein -COMMANDS = post.COMMANDS + verein.COMMANDS +COMMANDS = post.COMMANDS + verein.COMMANDS + advent.COMMANDS diff --git a/lenaverse_bot/commands/advent.py b/lenaverse_bot/commands/advent.py new file mode 100644 index 0000000..4510d5b --- /dev/null +++ b/lenaverse_bot/commands/advent.py @@ -0,0 +1,97 @@ +import logging +from io import BytesIO + +import aiohttp +import discord + +from ..core.config import CONFIG + +_logger = logging.getLogger(__name__) + + +@discord.app_commands.command(name=CONFIG.command_prefix + "advent") +async def advent(interaction: discord.Interaction, day: int | None = None) -> None: + """ + Türchen vom Lenaisten-Adventskalender öffnen (https://advent.lenaisten.de) + """ + + _logger.debug( + f"User {interaction.user.name}({interaction.user.id}) used /advent (day: {day})" + ) + + async with aiohttp.ClientSession( + auth=aiohttp.BasicAuth(login="", password="") + ) as session: + if day is None: + # Kein Tag angegeben => neuesten Tag finden + + async with session.get( + "https://advent.lenaisten.de/api/user/doors" + ) as http_response: + if http_response.status != 200: + # user/doors Anfrage hat nicht geklappt + await interaction.response.send_message( + content="Fehler: Ich konnte das aktuelle Türchen nicht finden :zany_face: (Probier's nochmal?)", + # nur für ausführenden User + ephemeral=True, + ) + return + + if not isinstance(doors := await http_response.json(), list): + # user/doors Antwort falsches Format (keine Liste) + await interaction.response.send_message( + content="Fehler: Ich konnte das aktuelle Türchen nicht finden :sweat_smile: (Probier's nochmal?)", + ephemeral=True, + ) + return + + days: list[int] = [] + for door in doors: + if not isinstance(door, dict) or "day" not in door: + # user/doors Antwort falsches Format (Liste enthält falsche Daten) + await interaction.response.send_message( + content="Fehler: Ich konnte das aktuelle Türchen nicht finden :face_with_monocle: (Probier's nochmal?)", + ephemeral=True, + ) + return + + days.append(door["day"]) + + day = max(days) + + async with session.get( + f"https://advent.lenaisten.de/api/user/image_{day}" + ) as http_response: + reply_ephemeral = not CONFIG.ev_info.in_allowed_channel(interaction) + + if http_response.status == 401: + # Bild (noch) nicht verfügbar + await interaction.response.send_message( + content=f"Fehler: Tag {day} kann ich (noch?) nicht abrufen. Netter Versuch! :woman_technologist_tone2:", + ephemeral=reply_ephemeral, + ) + return + + if http_response.status != 200: + # Bild (noch) nicht verfügbar + await interaction.response.send_message( + content="Fehler: Ich konnte das Bild nicht herunterladen :sob: (Probier's nochmal?)", + ephemeral=True, + ) + return + + image = discord.File( + fp=BytesIO(await http_response.read()), + filename="advent.jpg", + ) + + await interaction.response.send_message( + content=f"Hier ist das Bild für Tag {day}!", + file=image, + ephemeral=reply_ephemeral, + ) + + +COMMANDS = [ + advent, +]