Jeder Discord-Bot braucht eine Anwendung im Discord Developer Portal und einen Token, mit dem er sich anmeldet. Wir zeigen Ihnen, wie Sie die Anwendung erstellen, welche Intents Sie aktivieren, wie Sie den Bot auf einen Server einladen und wie Sie den Token so speichern, dass er nie nach außen gelangt.
Was Sie brauchen
- Ein Discord-Konto mit bestätigter E-Mail-Adresse
- Ein Discord-Server, auf dem Sie die Berechtigung Server verwalten haben (legen Sie zum Testen einen eigenen an)
- Etwa 10 Minuten
Anwendung erstellen#
Öffnen Sie das Discord Developer Portal (öffnet sich in einem neuen Fenster) und melden Sie sich an.
Klicken Sie auf New Application.
Geben Sie einen Namen ein (zum Beispiel
MujBot), akzeptieren Sie die Bedingungen und klicken Sie auf Create.Die Seite General Information öffnet sich. Hier können Sie ein Symbol und eine Beschreibung festlegen.
Kopieren Sie die Application ID. Sie wird auch Client ID genannt, und Sie brauchen sie zum Registrieren von Slash-Befehlen. Sie ist nicht geheim.
Bot-Token#
Der Token ist das Passwort des Bots. Wer ihn hat, kann den Bot steuern: Nachrichten senden, Kanäle löschen und Personen auf jedem Server bannen, auf dem der Bot ist.
- Klicken Sie im linken Menü der Anwendung auf Bot.
- Klicken Sie im Abschnitt Token auf Reset Token und bestätigen Sie. Discord fragt möglicherweise nach Ihrem Passwort oder einem Code der Zwei-Faktor-Authentifizierung.
- Kopieren Sie den Token (Copy) und speichern Sie ihn sofort (siehe „Token speichern“).
Der Token wird nur einmal angezeigt. Wenn Sie ihn verlieren, erzeugen Sie mit Reset Token einen neuen. Das macht den alten Token ungültig.
Den Token nie in den Code oder auf GitHub
Schreiben Sie den Token nicht direkt in eine Codedatei, und senden Sie ihn nicht über Discord, in einem Screenshot oder an den Support. Wenn er nach außen gelangt, klicken Sie sofort auf Reset Token und tragen Sie den neuen Token in .env auf dem Server ein. Der Bot mit dem alten Token wird getrennt.
Nicht verwechseln: Die kurze Zeichenkette Client Secret auf der Seite OAuth2 ist nicht der Bot-Token. Der Token ist länger und besteht aus drei durch Punkte getrennten Teilen.
Privileged Gateway Intents#
Intents sagen Discord, welche Ereignisse es dem Bot senden soll. Die meisten sind frei verfügbar, drei sind jedoch privilegiert, und Sie müssen sie auf der Seite Bot im Abschnitt Privileged Gateway Intents einschalten:
| Intent | Was der Bot erhält | Wann einschalten |
|---|---|---|
| Presence Intent | Status der Mitglieder (online, spielt ein Spiel, benutzerdefinierter Status). | Nur wenn der Bot den Status der Mitglieder wirklich nutzt (Aktivitätsstatistiken). |
| Server Members Intent | Die Mitgliederliste des Servers sowie Ereignisse beim Beitritt und Verlassen. | Willkommensnachrichten, automatische Rollen beim Beitritt, Arbeit mit der Mitgliederliste. |
| Message Content Intent | Text, Anhänge und Embeds gewöhnlicher Nachrichten. | Nur wenn der Bot gewöhnliche Nachrichten liest (Präfix-Befehle wie !help, Textmoderation). Slash-Befehle brauchen ihn nicht. |
- Schalten Sie nur ein, was der Bot braucht. Ein Intent muss im Developer Portal aktiviert und im Code angefordert werden (
GatewayIntentBitsin discord.js). - Wenn der Code einen Intent anfordert, der im Developer Portal nicht aktiviert ist, schließt Discord die Verbindung und der Bot meldet
Used disallowed intents. - Ein Bot auf 100 oder mehr Servern muss die App-Verifizierung durchlaufen, und Discord muss seine privilegierten Intents genehmigen. Wenn mehr als 10 000 Nutzer die Anwendung sehen können, verlangt Discord für die weitere Nutzung privilegierter Intents einen Antrag und eine Prüfung, die dann jedes Jahr erneuert werden muss.
Ohne Message Content Intent sieht der Bot nur den Text von Nachrichten, die ihn erwähnen, von Direktnachrichten mit ihm und von Nachrichten, die er selbst gesendet hat.
Bot auf einen Server einladen#
Klicken Sie im linken Menü der Anwendung auf Installation.
Lassen Sie im Abschnitt Installation Contexts die Option Guild Install angehakt (Installation auf einem Server). User Install brauchen Sie nur für Befehle, die Nutzer ihrem eigenen Konto hinzufügen.
Wählen Sie im Abschnitt Install Link die Option Discord Provided Link.
Fügen Sie im Abschnitt Default Install Settings unter Guild Install die Einträge
applications.commandsundbotzu Scopes hinzu.bot– fügt den Bot-Benutzer zum Server hinzu.applications.commands– erlaubt dem Bot, Slash-Befehle auf dem Server anzulegen.
Nachdem Sie
bothinzugefügt haben, erscheint Permissions. Wählen Sie nur die Berechtigungen, die der Bot braucht (siehe Tabelle unten), und speichern Sie die Änderungen.Kopieren Sie den Link aus Install Link und öffnen Sie ihn in Ihrem Browser.
Wählen Sie Add to server, wählen Sie den Server aus und bestätigen Sie mit Authorize.
Der Bot erscheint in der Mitgliederliste des Servers (offline, bis Sie ihn starten).
| Berechtigung | Wofür der Bot sie braucht |
|---|---|
| View Channels | Die Kanäle sehen, in denen er arbeitet. |
| Send Messages | Nachrichten senden. |
| Embed Links | Embeds senden (Nachrichten mit Rahmen und Titel). |
| Read Message History | Ältere Nachrichten lesen (Antworten, Aufräumen). |
| Manage Roles | Nur wenn der Bot Rollen vergibt. Er kann nur Rollen unterhalb seiner eigenen höchsten Rolle verwalten. |
| Administrator | Nicht erteilen. Ein Bot mit dieser Berechtigung kann auf dem Server alles. Wenn der Token nach außen gelangt, ist das eine Katastrophe. |
Sie können den Link auch manuell auf der Seite OAuth2 im Abschnitt OAuth2 URL Generator erstellen: Haken Sie bot und applications.commands an, wählen Sie die Berechtigungen und kopieren Sie die erzeugte URL.
Token speichern#
Der Token gehört in eine .env-Datei, nicht in Ihren Code. Legen Sie .env direkt auf dem Server an, damit Sie den Token nirgendwohin übertragen müssen:
Öffnen Sie im Kundenbereich den Bot und wechseln Sie zur Registerkarte Dateien, in den Stammordner
/.Klicken Sie auf Neue Datei und nennen Sie sie
.env(mit Punkt am Anfang, ohne Endung).Tragen Sie im Editor Folgendes ein:
.envini DISCORD_TOKEN=<BOT_TOKEN> CLIENT_ID=<APPLICATION_ID> GUILD_ID=<SERVER_ID>DISCORD_TOKEN– der Bot-Token. Ersetzen Sie<BOT_TOKEN>durch den Token aus dem Developer Portal, ohne Anführungszeichen und ohne Leerzeichen um das=.CLIENT_ID– die Application ID von der Seite General Information.GUILD_ID– die ID Ihres Discord-Servers (schalten Sie in Discord Benutzereinstellungen › Erweitert › Entwicklermodus ein, dann Rechtsklick auf den Servernamen › Server-ID kopieren).
Speichern Sie mit Strg+S.
.env im Code laden#
Node.js lädt .env nicht von selbst; Sie müssen es dazu anweisen. Da Sie den Startbefehl auf unseren Servern nicht ändern können, laden Sie .env direkt in Ihrem Code. Der zuverlässigste Weg ist das Paket dotenv (installieren Sie es auf Ihrem Computer mit npm install dotenv):
const path = require('node:path');
require('dotenv').config({ path: path.join(__dirname, '.env'), quiet: true });
const token = process.env.DISCORD_TOKEN;require(– lädt die Variablen aus der Datei in'dotenv'). config({ … }) process.env. Es muss ganz oben stehen, vor jedem Code, der den Token verwendet.path: path.join(__dirname, '.env')– sucht.envim selben Ordner wieindex.js, egal von wo der Bot gestartet wird.quiet: true– gibt beim Start keine Meldung über das Laden der Datei aus.process.– der Wert ausenv. DISCORD_ TOKEN .env. Er ist immer Text (ein String).
Für ES-Module ("type": "module" in package.json) verwenden Sie import 'dotenv/config'; in der ersten Zeile.
Seit Node.js 20.12 kommen Sie ohne das Paket aus und können die eingebaute Funktion process.loadEnvFile() verwenden:
process.loadEnvFile(require('node:path').join(__dirname, '.env'));Wenn die Datei .env nicht existiert, wirft diese Funktion einen Fehler. Ihre Node.js-Version finden Sie unter Node.js-Version. Auf Ihrem Computer können Sie den Bot auch mit node --env-file=.env index.js starten.
Die Datei .gitignore#
Wenn Sie Ihren Code in Git verwalten (GitHub, GitLab), legen Sie im Projekt eine Datei .gitignore an:
node_modules
.envGit lädt dann .env und node_modules nie hoch. Wenn Sie .env bereits versehentlich gepusht haben, reicht Löschen nicht (die Datei bleibt in der Historie). Setzen Sie den Token sofort zurück.
Weitere Geheimnisse#
Auch andere Passwörter und Schlüssel gehören in .env: das Datenbankpasswort, API-Schlüssel für andere Dienste, Webhooks. Es gelten dieselben Regeln:
- Verwenden Sie im Code nur
process.env.NAME, nie den Wert selbst, - geben Sie sie nie in der Konsole aus (auch ein Mitglied eines geteilten Dienstes kann die Konsole sehen),
- wenn sie nach außen gelangen, widerrufen Sie sie sofort bei dem Dienst, der sie ausgestellt hat.
Überprüfung#
- Nach dem Start geht der Bot auf Discord online, und die Konsole zeigt kein
An invalid token was provided. - Um zu prüfen, ob der Token geladen wurde, geben Sie nur seine Länge aus, nie den Token selbst:
console.. Wirdlog( 'Token-Länge: ', process. env. DISCORD_ TOKEN?. length); undefinedausgegeben, wurde.envnicht geladen.
Fehlerbehebung#
An invalid token was provided.#
Der Token ist falsch, funktioniert nach Reset Token nicht mehr oder wurde gar nicht geladen. Prüfen Sie die Token-Länge (siehe Überprüfung), den Variablennamen in .env und in Ihrem Code (DISCORD_TOKEN) und dass .env keine überflüssigen Anführungszeichen oder Leerzeichen enthält. Wenn Sie unsicher sind, erzeugen Sie einen neuen Token und tragen Sie ihn erneut ein.
Used disallowed intents#
Der Code fordert einen privilegierten Intent an, der im Developer Portal nicht aktiviert ist. Schalten Sie den Intent auf der Seite Bot unter Privileged Gateway Intents ein oder entfernen Sie ihn aus dem Code.
process.env.DISCORD_TOKEN ist undefined#
dotenvwird erst nach dem Code geladen, der den Token verwendet. Setzen Sierequire(in die ersten Zeilen.'dotenv'). config( …) - Die Datei heißt in Wirklichkeit
.env.txt(Windows blendet Dateiendungen aus). Benennen Sie sie auf dem Server in.envum. .envliegt in einem anderen Ordner als die Hauptdatei. Verwenden Siepath.join(__dirname, '.env').
Private application cannot have a default authorization link#
Sie haben auf der Seite Bot die Option Public Bot ausgeschaltet, auf der Seite Installation ist aber Discord Provided Link eingestellt. Ein privater Bot kann keinen Standardlink haben. Lassen Sie entweder Public Bot eingeschaltet oder wählen Sie bei Install Link die Option None und erstellen Sie den Link im OAuth2 URL Generator.
Bot requires a code grant#
Auf der Seite Bot ist Requires OAuth2 Code Grant eingeschaltet. Wenn Sie das nicht ausdrücklich brauchen, schalten Sie es aus.
Ich sehe meinen Server beim Einladen des Bots nicht in der Liste#
Sie haben auf diesem Server nicht die Berechtigung Server verwalten. Bitten Sie den Serverinhaber oder laden Sie den Bot auf Ihren eigenen Server ein.
Zusammenfassung
- Die Anwendung erstellen Sie im Developer Portal (New Application), den Token holen Sie auf der Seite Bot mit Reset Token. Er wird nur einmal angezeigt.
- Schalten Sie privilegierte Intents (Presence, Server Members, Message Content) nur ein, wenn der Bot sie braucht, sowohl im Developer Portal als auch im Code.
- Laden Sie den Bot mit dem Link von der Seite Installation ein, mit den Scopes
botundapplications.commandsund so wenigen Berechtigungen wie möglich, nie Administrator. - Der Token gehört in
.envauf dem Server. Laden Sie ihn im Code mitdotenvund tragen Sie.envin.gitignoreein.
Weiterführende Links#
- Discord: Getting Started (Anwendung, Token, Installation) (öffnet sich in einem neuen Fenster)
- Discord: Gateway Intents (öffnet sich in einem neuen Fenster)
- discord.js Guide: Application Setup (öffnet sich in einem neuen Fenster)
- Node.js: --env-file und process.loadEnvFile (öffnet sich in einem neuen Fenster)