From 603e634d08a335311de34c32d33cde93ead7b39a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn-Michael=20Miehe?= Date: Wed, 6 Dec 2023 18:11:07 +0100 Subject: [PATCH] /advent deferred followup --- lenaverse_bot/commands/advent.py | 61 +++++++++++++++++--------------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/lenaverse_bot/commands/advent.py b/lenaverse_bot/commands/advent.py index 4510d5b..e85714f 100644 --- a/lenaverse_bot/commands/advent.py +++ b/lenaverse_bot/commands/advent.py @@ -10,19 +10,24 @@ _logger = logging.getLogger(__name__) @discord.app_commands.command(name=CONFIG.command_prefix + "advent") -async def advent(interaction: discord.Interaction, day: int | None = None) -> None: +async def advent(interaction: discord.Interaction, tag: 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})" + f"User {interaction.user.name}({interaction.user.id}) used /advent ({tag = })" + ) + await interaction.response.defer( + thinking=True, + # nur für ausführenden User + ephemeral=True, ) async with aiohttp.ClientSession( auth=aiohttp.BasicAuth(login="", password="") ) as session: - if day is None: + if tag is None: # Kein Tag angegeben => neuesten Tag finden async with session.get( @@ -30,18 +35,15 @@ async def advent(interaction: discord.Interaction, day: int | None = None) -> No ) 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, + await interaction.followup.send( + "Fehler: Ich konnte das aktuelle Türchen nicht finden :zany_face: (Probier's nochmal?)", ) 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, + await interaction.followup.send( + "Fehler: Ich konnte das aktuelle Türchen nicht finden :sweat_smile: (Probier's nochmal?)", ) return @@ -49,35 +51,28 @@ async def advent(interaction: discord.Interaction, day: int | None = None) -> No 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, + await interaction.followup.send( + "Fehler: Ich konnte das aktuelle Türchen nicht finden :face_with_monocle: (Probier's nochmal?)", ) return days.append(door["day"]) - day = max(days) + tag = max(days) async with session.get( - f"https://advent.lenaisten.de/api/user/image_{day}" + f"https://advent.lenaisten.de/api/user/image_{tag}" ) 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, + await interaction.followup.send( + f"Fehler: Tag {tag} kann ich (noch?) nicht abrufen. Netter Versuch! :woman_technologist_tone2:", ) 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, - ) + # Bild herunterladen fehlgeschlagen + await interaction.followup.send(CONFIG.command_failed) return image = discord.File( @@ -85,10 +80,20 @@ async def advent(interaction: discord.Interaction, day: int | None = None) -> No filename="advent.jpg", ) - await interaction.response.send_message( - content=f"Hier ist das Bild für Tag {day}!", + if CONFIG.ev_info.in_allowed_channel(interaction): + await interaction.followup.send(":ok:") + assert isinstance(interaction.channel, discord.abc.Messageable) + target_channel = interaction.channel + + else: + await interaction.followup.send( + f"Hier darf ich leider nicht posten, also schicke ich das Bild hier: <#{CONFIG.post.channel}> :incoming_envelope:" + ) + target_channel = CONFIG.post.get_channel(interaction.client) + + await target_channel.send( + content=f"<@{interaction.user.id}>, hier ist das Adventskalender-Bild für Tag {tag}!", file=image, - ephemeral=reply_ephemeral, )