~/forensoftware-plugins/discord-app-oder-bot/

Discord-App oder Bot? Erweiterungen für Communitys verstehen

App ist der Oberbegriff, der Bot nur eine Form davon: wie Discord-Erweiterungen mit Slash-Befehlen, Schaltflächen und Intents arbeiten und worauf Sie bei Rechten und Tokens achten.

Auf Discord ist App der Oberbegriff: Alles, was Sie im Discord Developer Portal anlegen, ist eine App. Ein Bot ist eine Form, in der eine App auftritt, nämlich als eigenes Benutzerkonto auf einem Server, das Ereignisse über eine dauerhafte Verbindung empfängt. Viele Apps kommen heute aber mit Interaktionen aus: Slash-Befehle, Schaltflächen, Auswahlmenüs und Kontextmenüs, die Discord gezielt an Ihre App schickt. Die richtige Bauweise hängt davon ab, ob Ihre App nur auf Aufrufe reagiert oder das Geschehen fortlaufend beobachten muss.

Begriffe sortiert

Begriff Bedeutung
App Eintrag im Developer Portal mit ID, Namen, Symbol und Einstellungen
Bot-Benutzer Konto der App, das auf Servern Mitglied ist und Nachrichten schreiben kann
Interaktion ein Aufruf durch eine Person: Befehl, Klick, Auswahl oder Formular
Application Command Befehl der App: Slash-Befehl, Benutzer- oder Nachrichtenbefehl im Kontextmenü
Message Component Schaltfläche oder Auswahlmenü in einer Nachricht
Modal Formularfenster, das eine App öffnen kann
Gateway dauerhafte WebSocket-Verbindung für Ereignisse in Echtzeit
Intents Auswahl, welche Ereignisarten eine App über das Gateway erhält
Webhook einfache Adresse, um Nachrichten in einen Kanal zu schreiben

Zwei Wege, Ereignisse zu empfangen

Gateway: Die App baut eine WebSocket-Verbindung zu Discord auf und hält sie offen. Darüber kommen Ereignisse wie neue Nachrichten, beigetretene Mitglieder oder Reaktionen. Welche Ereignisse sie erhält, bestimmen die angeforderten Intents. Dieser Weg ist nötig für alles, was das Geschehen auf einem Server fortlaufend verfolgt: Moderationshilfen, Begrüßungen, Statistiken.

HTTP-Endpunkt für Interaktionen: Im Developer Portal hinterlegen Sie eine Adresse. Discord schickt dorthin jede Interaktion mit Ihrer App als HTTP-Anfrage. Ihre App muss die Signatur der Anfrage prüfen und antworten. Eine dauerhafte Verbindung ist nicht nötig, die App kann sogar als serverlose Funktion laufen. Sie erfährt dafür nur von Interaktionen, nicht von allem anderen, was auf dem Server passiert.

Beide Wege lassen sich kombinieren. Die Bibliotheken der Community unterstützen in der Regel vor allem das Gateway und verarbeiten Interaktionen dort mit.

Interaktionen: Slash-Befehle und Co.

Ein Slash-Befehl wird einmalig bei Discord registriert, mit Name, Beschreibung und Optionen. Danach zeigt Discord ihn in der Befehlsauswahl an, prüft die Eingaben und schickt Ihrer App einen strukturierten Aufruf. Ihre App muss nicht jede Nachricht lesen und auswerten.

// Registrierung eines Slash-Befehls (vereinfacht, per HTTP-API)
const befehl = {
  name: "wuerfeln",
  description: "Würfelt eine Zahl",
  options: [
    { name: "seiten", description: "Anzahl der Seiten", type: 4, required: false },
  ],
};

await fetch(`https://discord.com/api/v10/applications/${APP_ID}/commands`, {
  method: "POST",
  headers: { Authorization: `Bot ${process.env.DISCORD_TOKEN}`, "Content-Type": "application/json" },
  body: JSON.stringify(befehl),
});

Der Typ 4 steht für eine Ganzzahl. Befehle lassen sich global oder nur für einen bestimmten Server registrieren. Für die Entwicklung empfiehlt sich ein Testserver, auf dem Sie Befehle ausprobieren, bevor sie überall erscheinen.

Auf eine Interaktion muss Ihre App innerhalb weniger Sekunden antworten. Braucht die Verarbeitung länger, etwa weil eine externe Schnittstelle abgefragt wird, schicken Sie zuerst eine verzögerte Antwort und liefern das Ergebnis anschließend als Folgenachricht nach. Mit Schaltflächen, Auswahlmenüs und Modals bauen Sie daraus kleine Abläufe: einen Befehl, der eine Umfrage mit Schaltflächen erzeugt, oder einen Kontextmenü-Eintrag, der eine Nachricht an das Moderationsteam meldet.

Wo eine App installiert wird

Klassisch wird eine App auf einem Server installiert. Eine Person mit den nötigen Rechten fügt sie über einen Einladungslink hinzu und bestätigt dabei die angeforderten Berechtigungen. Discord erlaubt inzwischen außerdem die Installation für einzelne Benutzer. Dann stehen die Befehle der App dieser Person auch auf Servern und in Direktnachrichten zur Verfügung, auf denen die App selbst nicht Mitglied ist, mit entsprechend eingeschränkten Möglichkeiten. Im Developer Portal legen Sie fest, welche Installationsarten Ihre App unterstützt.

Berechtigungen und Intents

Zwei Ebenen regeln, was eine App darf:

  • Berechtigungen bestimmen, was der Bot auf einem Server tun darf: Nachrichten senden, Nachrichten löschen, Rollen verwalten, Mitglieder entfernen. Sie werden beim Hinzufügen angefragt und können vom Server-Team jederzeit angepasst werden. Fordern Sie nur an, was die App wirklich braucht. Eine App mit Administratorrechten ist ein Sicherheitsrisiko für den gesamten Server.
  • Intents bestimmen, welche Ereignisse die App über das Gateway erhält. Einige gelten als privilegiert, weil sie besonders persönliche Daten betreffen: Inhalte von Nachrichten, die Mitgliederliste und Online-Status. Sie müssen im Developer Portal eingeschaltet werden, und ab einer gewissen Zahl von Servern verlangt Discord eine Verifizierung der App und eine Begründung für jeden privilegierten Intent.

Wer mit Slash-Befehlen statt mit dem Auswerten von Nachrichtentexten arbeitet, braucht den Intent für Nachrichteninhalte meist gar nicht. Das ist datensparsamer und erspart die Freigabe.

Token und Sicherheit

Das Bot-Token ist ein Generalschlüssel

Wer das Token kennt, kann im Namen Ihrer App handeln, auf allen Servern, auf denen sie installiert ist. Speichern Sie es in Umgebungsvariablen oder einem Geheimnisspeicher, nie im Quellcode, nie in einem öffentlichen Repository und nie in Client-Code. Wurde es versehentlich veröffentlicht, setzen Sie es im Developer Portal sofort zurück.

Weitere Grundregeln:

  • Signaturen prüfen: Ein HTTP-Endpunkt für Interaktionen muss jede Anfrage anhand des öffentlichen Schlüssels der App prüfen. Discord testet das beim Speichern der Adresse und lehnt Endpunkte ab, die ungültige Anfragen annehmen.
  • Eingaben nicht vertrauen: Auch Werte aus Slash-Befehlen stammen von Menschen. Prüfen Sie Länge und Inhalt, bevor Sie sie weiterverarbeiten oder in Datenbanken schreiben.
  • Rechte im Code prüfen: Ein Befehl zum Löschen von Nachrichten sollte selbst kontrollieren, ob die aufrufende Person dazu berechtigt ist. Discord bietet zusätzlich Standardberechtigungen für Befehle, die Server-Teams anpassen können.
  • Rate Limits beachten: Die Schnittstelle begrenzt, wie viele Anfragen in kurzer Zeit erlaubt sind. Gute Bibliotheken warten automatisch, eigene HTTP-Aufrufe müssen die Antwort-Header auswerten.

Was Server-Teams aus Nutzersicht bei Erweiterungen beachten sollten, gilt bei Discord genauso wie im Browser. Allgemeine Hinweise bündelt der Bereich Erweiterungen sicher nutzen.

Wann welche Bauweise passt

Vorhaben Empfehlung
Nachrichten aus einem externen System in einen Kanal schreiben Webhook, keine App nötig
Werkzeug, das nur auf Befehle reagiert App mit Interaktionen, HTTP-Endpunkt genügt
Begrüßung neuer Mitglieder, Moderationshilfe, Statistiken App mit Bot und Gateway-Verbindung
Persönliches Werkzeug, das überall verfügbar sein soll App mit Benutzerinstallation
Spiel oder interaktive Anwendung im Sprachkanal eingebettete App (Activity) mit dem SDK von Discord

Erste Schritte

  1. Im Developer Portal eine neue App anlegen, Namen und Symbol vergeben.
  2. Bei Bedarf einen Bot-Benutzer einrichten und das Token sicher speichern.
  3. Einen eigenen Testserver anlegen und die App über einen Einladungslink mit den Bereichen für Befehle und gegebenenfalls Bot hinzufügen.
  4. Einen ersten Slash-Befehl registrieren und beantworten, mit einer Bibliothek Ihrer Sprache oder direkt über die HTTP-Schnittstelle.
  5. Erst danach privilegierte Intents prüfen und nur einschalten, wenn eine Funktion sie wirklich braucht.

Wer JavaScript, HTTP-Anfragen und asynchrone Programmierung auffrischen möchte, findet die Basis in den Programmiergrundlagen. Wie sich eine Community dagegen mit einem klassischen Forum erweitern lässt, zeigt der Überblick Discourse-Plugins und Theme-Komponenten.

faq

Fragen und Antworten

Brauche ich einen eigenen Server für eine Discord-App?
Ja, Ihr Code muss irgendwo laufen. Ein Bot mit Gateway-Verbindung braucht einen Prozess, der dauerhaft läuft, etwa auf einem kleinen virtuellen Server. Eine App, die nur Interaktionen über einen HTTP-Endpunkt beantwortet, kann dagegen auch auf Plattformen für serverlose Funktionen laufen, weil sie nur bei Anfragen aktiv wird.
Warum sieht mein Bot den Inhalt von Nachrichten nicht?
Der Inhalt von Nachrichten gehört zu den privilegierten Daten. Ihre App muss dafür den Message-Content-Intent im Developer Portal einschalten und beim Verbindungsaufbau anfordern. Ab einer gewissen Verbreitung muss Discord den Zugriff zusätzlich prüfen und freigeben. Nachrichten, die den Bot erwähnen, und Direktnachrichten an ihn sind davon ausgenommen.
Ist ein Webhook dasselbe wie ein Bot?
Nein. Ein eingehender Webhook ist eine einfache Adresse, über die ein externes System Nachrichten in einen bestimmten Kanal schreiben kann. Er kann weder Befehle empfangen noch auf Ereignisse reagieren. Für Benachrichtigungen aus einem Build-System oder einem Blog genügt ein Webhook, für alles Interaktive brauchen Sie eine App.
In welcher Programmiersprache schreibe ich eine Discord-App?
Discord stellt eine sprachunabhängige HTTP- und WebSocket-Schnittstelle bereit. Verbreitet sind Bibliotheken der Community für JavaScript und TypeScript, Python, Java, C# und Rust. Für eine reine Interaktions-App über HTTP genügt jede Sprache, mit der sich ein Webserver betreiben und eine Signatur prüfen lässt.