Advertisement
Giuseppe

Untitled

Feb 24th, 2025
258
0
21 hours
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Hier ist ein **Discord-Bot in Python**, der RSS-Feeds liest und das Bild aus dem `<description>`-Tag als Foto in einem Discord-Channel postet. Der Bot nutzt **discord.py** und **feedparser**.
  2.  
  3. ---
  4.  
  5. ## 🔧 **Voraussetzungen**
  6. 1. Installiere die benötigten Bibliotheken:
  7.    ```sh
  8.    pip install discord.py feedparser aiohttp
  9.    ```
  10. 2. Erstelle einen **Discord-Bot** über das [Discord Developer Portal](https://discord.com/developers/applications).
  11. 3. Aktiviere **"MESSAGE CONTENT INTENT"** in den Bot-Einstellungen.
  12. 4. Kopiere den **Bot-Token** und ersetze ihn im Skript.
  13.  
  14. ---
  15.  
  16. ## 📜 **Discord RSS-Bot Code**
  17. ```python
  18. import discord
  19. import feedparser
  20. import asyncio
  21. import aiohttp
  22.  
  23. TOKEN = "DEIN_BOT_TOKEN"  # Ersetze mit deinem Discord-Bot-Token
  24. RSS_FEED_URL = "https://cube.destiny-mine.de/rss_feed.xml"  # Deine RSS-Feed-URL
  25. CHANNEL_ID = 123456789012345678  # Ersetze mit der ID deines Discord-Channels
  26.  
  27. intents = discord.Intents.default()
  28. client = discord.Client(intents=intents)
  29.  
  30. last_posted_guid = None  # Speichert die letzte GUID, um doppelte Posts zu vermeiden
  31.  
  32. async def fetch_rss():
  33.     global last_posted_guid
  34.     while True:
  35.         feed = feedparser.parse(RSS_FEED_URL)
  36.        
  37.         if feed.entries:
  38.             latest_entry = feed.entries[0]  # Neuestes RSS-Item
  39.             image_url = extract_image_url(latest_entry.description)
  40.  
  41.             if latest_entry.guid != last_posted_guid and image_url:
  42.                 channel = client.get_channel(CHANNEL_ID)
  43.                 if channel:
  44.                     await channel.send(f"📢 **{latest_entry.title}**\n{latest_entry.link}")
  45.                     await channel.send(image_url)
  46.                     last_posted_guid = latest_entry.guid
  47.        
  48.         await asyncio.sleep(600)  # Alle 10 Minuten checken
  49.  
  50. def extract_image_url(description):
  51.     """ Extrahiert das Bild-URL aus dem RSS-Feed-Beschreibungstext """
  52.     import re
  53.     match = re.search(r'<img src="([^"]+)"', description)
  54.     return match.group(1) if match else None
  55.  
  56. @client.event
  57. async def on_ready():
  58.     print(f'✅ Bot ist eingeloggt als {client.user}')
  59.     client.loop.create_task(fetch_rss())  # Starte den RSS-Check
  60.  
  61. client.run(TOKEN)
  62. ```
  63.  
  64. ---
  65.  
  66. ## 🛠 **Erklärung**
  67. Der Bot **überwacht** das RSS-Feed alle 10 Minuten.  
  68. Wenn ein neuer Beitrag entdeckt wird, postet er **den Titel + Link** und **das Bild** im Discord-Channel.  
  69. Verhindert doppelte Posts mit `last_posted_guid`.  
  70. Funktioniert für Feeds, die ein `<img>` im `<description>`-Tag enthalten.
  71.  
  72. ---
  73.  
  74. ## 🚀 **Starten des Bots**
  75. Speichere das Skript als `rss_bot.py` und starte es mit:
  76. ```sh
  77. python rss_bot.py
  78. ```
  79.  
  80. Falls du Fragen hast oder Anpassungen brauchst, sag Bescheid! 😊
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement