Files
FunguyBot/plugins/xkcd.py
T

61 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Provides a command to fetch random xkcd comic
"""
import requests
import tempfile
import random
import simplematrixbotlib as botlib
# Define the XKCD API URL
XKCD_API_URL = "https://xkcd.com/info.0.json"
async def handle_command(room, message, bot, prefix, config):
match = botlib.MessageMatch(room, message, bot, prefix)
if match.prefix() and match.command("xkcd"):
# Fetch the latest comic number from XKCD API
try:
response = requests.get(XKCD_API_URL, timeout=10)
response.raise_for_status() # Raise an exception for non-200 status codes
latest_comic_num = response.json()["num"]
# Choose a random comic number
random_comic_num = random.randint(1, latest_comic_num)
# Fetch the random comic data
random_comic_url = f"https://xkcd.com/{random_comic_num}/info.0.json"
comic_response = requests.get(random_comic_url, timeout=10)
comic_response.raise_for_status()
comic_data = comic_response.json()
image_url = comic_data["img"]
# Download the image
image_response = requests.get(image_url, timeout=10)
image_response.raise_for_status()
# Use secure temporary file
with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as temp_file:
image_path = temp_file.name
temp_file.write(image_response.content)
# Send the image to the room
await bot.api.send_image_message(room_id=room.room_id, image_filepath=image_path)
# Clean up temp file
import os
os.remove(image_path)
except Exception as e:
await bot.api.send_text_message(room.room_id, f"Error fetching XKCD comic: {str(e)}")
# ---------------------------------------------------------------------------
# Plugin Metadata
# ---------------------------------------------------------------------------
__version__ = "1.0.0"
__author__ = "Funguy Bot"
__description__ = "Random XKCD comic"
__help__ = """
<details>
<summary><strong>!xkcd</strong> Random XKCD comic</summary>
<p>Posts a random XKCD comic image.</p>
</details>
"""