1 GrumpyRss
darksoon edited this page 2026-07-11 01:05:01 +02:00

RSS — Feed-Abos pro Kanal

GrumpyRss abonniert RSS- und Atom-Feeds und postet neue Einträge automatisch in einen Discord-Kanal, optional mit Rollen-Ping.


Aktivierung

In configs/config.yml:

addons:
  rss: true   # Standard: true

Kein eigenes configs/modules/rss.yml — das Modul hat keine YAML-Konfigurationsdatei, alle Einstellungen (Feeds, Kanäle, Ping-Rollen) werden pro Feed über /rss add in der Datenbank gespeichert.


Sicherheit: SSRF-Schutz

Damit der Bot nicht dazu missbraucht werden kann, interne Netzwerkadressen abzufragen (z.B. localhost, private IP-Bereiche, Cloud-Metadaten-Endpunkte), prüft GrumpyRss jede Feed-URL:

  • Beim Abonnieren (/rss add): Die URL wird sofort geprüft — zeigt sie auf eine interne/private Adresse, wird das Abo abgelehnt (❌ unsafe-url).
  • Bei jedem Poll: Die Prüfung läuft erneut, auch bei jedem Redirect-Sprung. Ein Hostname kann sich zwischendurch ändern (DNS-Rebinding) — deshalb reicht die einmalige Prüfung beim Abonnieren nicht aus.

Für Admins bedeutet das: Nur öffentlich erreichbare http:///https://-Feeds funktionieren. Feeds auf internen Servern, VPNs oder mit localhost/127.0.0.1/privaten IPs werden zuverlässig blockiert — das ist gewolltes Verhalten, kein Bug.


Poll-Verhalten & Ausfall-Backoff

  • Der Bot prüft alle 10 Minuten alle aktiven Feeds auf neue Einträge.
  • Erstes Abo: Beim allerersten Check eines neuen Feeds wird der aktuell neueste Eintrag nur als Referenzpunkt gespeichert — es wird nichts gepostet. So dumpt ein Abo eines alten, aktiven Blogs nicht dessen komplette Historie in den Kanal.
  • Pro Tick werden maximal 5 neue Einträge pro Feed gepostet (älteste zuerst), auch wenn mehr neue Einträge vorliegen — das verhindert eine Nachrichtenflut nach längerem Ausfall.
  • Ausfall-Backoff: Schlägt das Abrufen oder Parsen eines Feeds 10 Mal in Folge fehl (z.B. Domain offline, kaputtes SSL-Zertifikat, dauerhaft ungültiges XML), pausiert der Bot diesen Feed automatisch für 24 Stunden. Nach Ablauf der 24 Stunden wird der Feed automatisch reaktiviert und normal weiter gepollt — keine manuelle Reaktivierung nötig. Ein einzelner erfolgreicher Abruf setzt den Fehlerzähler sofort wieder auf 0.

Commands

Alle Subcommands benötigen die Berechtigung Manage Guild (Server verwalten).

/rss add <url> [channel] [ping-role]

Abonniert einen neuen Feed.

Option Pflicht Beschreibung
url ja Feed-URL (RSS oder Atom), muss mit http:// oder https:// beginnen
channel nein Zielkanal für neue Einträge (Text oder Announcement) — Standard: aktueller Kanal
ping-role nein Rolle, die bei neuen Einträgen gepingt wird
/rss add url:https://blog.example.com/feed.xml
/rss add url:https://blog.example.com/feed.xml channel:#news ping-role:@Updates

Limit: maximal 20 Feeds pro Server. Ein Feed kann pro Server nur einmal abonniert werden (gleiche URL zweimal → Fehler).


/rss remove <id>

Entfernt ein Abo anhand der ID (siehe /rss list).

/rss remove id:3

/rss list

Listet alle Feed-Abos des Servers mit ID, Zielkanal, URL und optionaler Ping-Rolle.

/rss list

Gepostetes Format

Neue Einträge werden als Embed gepostet:

  • Titel (verlinkt, sofern der Link gültig ist)
  • Beschreibung (HTML-Tags werden entfernt, auf 300 Zeichen gekürzt)
  • Veröffentlichungsdatum (sofern im Feed vorhanden)
  • Optionaler Rollen-Ping als Textinhalt vor dem Embed

Schlägt das Posten fehl (z.B. fehlende Kanal-Berechtigung), wird der interne Fortschritt trotzdem weiter gezählt — der Bot versucht nicht endlos, denselben Eintrag erneut zu posten. Admins sollten in diesem Fall die Kanal-Berechtigungen des Bots prüfen.