command /advent
This commit is contained in:
parent
385999a2f3
commit
47789f920a
2 changed files with 99 additions and 2 deletions
|
@ -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
|
||||
|
|
97
lenaverse_bot/commands/advent.py
Normal file
97
lenaverse_bot/commands/advent.py
Normal file
|
@ -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,
|
||||
]
|
Loading…
Reference in a new issue