Habs genau so gemacht. Danke!
Der eigene Discord Bot mit discord.js
-
Wenn es darum geht, den eigenen Discord Bot zu programmieren, sind zwei Programmiersprachen besonders im Trend: Python und Javascript in der Laufzeitumgebung Node.js. Und genau um letzteres geht es heute. In diesem Tutorial möchte ich zusammen mit euch den ersten eigenen Discord-Bot mithilfe von discord.js programmieren.
In der Anleitung werden wir ein Template verwenden, welches mir freundlicherweise von @AllerEchteNlmyr zur Verfügung gestellt wurde.
Vorbereitungen
Bevor der eigene Bot mit Javascript programmiert werden kann, muss Node.js auf deinem System installiert sein. Du kannst es prüfen, in dem du die Kommandozeile deines Computers aufrufst und folgenden Befehl in der Konsole absetzt:
node -v
Ich habe Node.js installiert und bekomme folgende Rückmeldung:
C:\Users\cooper>node -v v14.15.1
Falls du Node noch nicht installiert hast, solltest du das jetzt unbedingt tun. Eine Anleitung zur Installation unter Linux findest du hier: Installation und Update von Node.js und NPM unter Linux. Für die Installation unter Windows oder MacOS kannst du den Installer von Node.js verwenden: nodejs.org - Node.js Installer herunterladen
Das Bot-Verzeichnis
In Node.js gibt es viele Module, die man herunterladen und verwenden kann. Auch für unseren eigenen Bot werden wir ein solches Modul verwenden und erstellen. Dank eines Befehls via NPM geht das ziemlich einfach.
Erstellt zunächst einen Ordner in dem ihr den Bot speichern und programmieren möchtet.
Mein Ordner trägt den Namenmakesmart-discord-bot
.In diesem Ordner müsst ihr die Konsole öffnen. Navigiert dazu entweder manuell - via Konsole - in den Ordner, oder öffnet die Konsole direkt aus dem geöffneten Ordner heraus:
Datei -> Windows PowerShell öffnen -> Windows PowerShell öffnen
PS D:\Users\cooper\Desktop\makesmart-discord-bot>
Um den eigenen Discord Bot zu initialisieren setzen wir folgenden Befehl in der Konsole ab:
npm init
.Nach dem Absenden des Befehls werden euch einige Fragen zu eurem Paket gestellt. Unter anderem wird nach dem Namen und der Version gefragt. Da das unser eigenes Paket ist, können wir die Parameter alle selber bestimmen.
package name: (makesmart-discord-bot) makesmart-discord-bot version: (1.0.0) 1.0.0 description: Little discord bot from cooper@makesmart entry point: (index.js) index.js test command: git repository: keywords: author: license: (ISC) About to write to D:\Users\cooper\Desktop\makesmart-discord-bot\package.json: { "name": "makesmart-discord-bot", "version": "1.0.0", "description": "Little discord bot from cooper@makesmart", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" } Is this OK? (yes)
Mit der Eingabe von
yes
wird unser Paket initialisiert und die Dateipackage.json
erstellt, mit Inhalt gefüllt und abschließend gespeichert.Der Ordner
makesmart-discord-bot
ist nun nicht mehr leer sondern enthält Informationen zu unserem Paket in derpackage.json
.makesmart-discord-bot └───package.json
Die Installation von discord.js
Um das
discord.js
Modul zu installieren, verwenden wir ebenfalls den Paketmanager NPM. Auch dieser Befehl wird wieder direkt innerhalb des Ordnersmakesmart-discord-bot
ausgeführt.Der Befehl zum installieren des Moduls lautet:
npm install discord.js
.PS D:\Users\cooper\Desktop\makesmart-discord-bot> npm install discord.js npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN makesmart-discord-bot@1.0.0 No repository field. + discord.js@12.5.1 added 15 packages from 17 contributors and audited 15 packages in 3.292s found 0 vulnerabilities
In unserem Ordner wurde das Paket
discord.js
installiert. Das Paket sowie alle Abhängigkeiten befinden sich im Ordernode_modules
.makesmart-discord-bot └─── node-modules └─── package.json └─── package-lock.json
Wir haben unserer Ordnerstruktur soweit fertig und können uns dem Template widmen.
Das Template
Wie bereits erwähnt verwende ich in diesem Tutorial ein Template von @AllerEchteNlmyr. Das Template könnt ihr euch direkt hier herunterladen:
makesmart-discord-template.zip
Entpackt das Archiv und speichert alle Dateien in dem Order eures Bots. Das Verzeichnis sollte dann wie folgt aussehen:
makesmart-discord-bot ├───commands ├───node-modules └───utils └─── package.json └─── package-lock.json └─── index.js
Discord Bot anlegen
Um einen Discord Bot zu programmieren, muss er zuerst über die Developer-Konsole von Discord angelegt werden. Das geht über diesen Link: https://discord.com/developers/applications
Vergebt eurer App einen passenden Namen und erstellt sie. Anschließend kann links über das Menü der Bot innerhalb der Applikation erstellt werden.
Um die Präsenz eines Users triggern zu können, muss ein Haken bei den folgenden Einstellungen aktiviert sein:
PRESENCE INTENT If your bot tracks presence data, you may need the presence intent to receive presence event data. [YES] SERVER MEMBERS INTENT If your bot tracks server members or downloads the entire member list, you may need the server members intent to receive member events and the member list. [YES]
Abschließend kann der Token des Bots kopiert und gespeichert werden.
Zu guter letzt muss der Bot noch zum Server hinzugefügt werden. Geht dazu innerhalb der erstellen Applikation links im Menü auf
OAuth2
und setzt einen Haken beibot
. Im Textfeld taucht ein Link aus, mit dem ihr den Bot auf euren Server einladen könnt.Nachdem der Bot erstellt wurde, können für den Bot weitere Berechtigungen festgelegt werden.
Zum üben und probieren könnt ihr eurem eigenen Bot einfach die BerechtigungAdministrator
geben.
Der erste Start
Bevor der Bot das erste mal gestartet werden kann, muss der gerade eben kopierte Token in der
config.json
im Ordnerutlis
eingefügt werden.{ "token": "NzgyNTcTNjc5MjY3ODk2MYQ1.X7OT2A.Ex4XlxDzN3kRZNAzRHP9BDht8II", "prefix": "ms." }
Der Value von
prefix
bestimmt, wie die commands des Bots aufgerufen werden. In diesem Fall würden die commands wie folgt aussehen:ms.start ms.show ms.ban ms.poll
Nachdem der Token eingetragen und die Datei gespeichert wurde, kann der Bot das erste Mal gestartet werden. Das passiert wieder über die Konsole innerhalb des Bot-Ordners:
PS D:\Users\cooper\Desktop\makesmart-discord-bot> node index.js
Der Bot wurde erfolgreich eingeloggt und lauscht nun nach Befehlen im Chat:
PS D:\Users\cooper\Desktop\makesmart-discord-bot> node index.js Logged in as cooper-bot-tutorial#6189!
Egal was wir schreiben, es wird nichts passieren. Denn es wurde noch keine Aktion für einzelne Commands festgelegt. Lediglich der Prefix wurde definiert.
Der erste eigene Befehl
Öffnet den Ordner
commands
und darin die Dateicommand.js
.const Discord = require("discord.js"); const fs = require("fs"); const config = JSON.parse(fs.readFileSync("./utils/config.json", "utf8")); module.exports = { name: "command", description: "This is a command!", execute(message, args){ } }
Als leichtes Beispiel, werden wir innerhalb der Konsole ausgeben lassen, wenn wir eine Nachricht mit dem command
command
erhalten.Das geht mithilfe von
console.log("Nachricht mit command 'command' erhalten.");
const Discord = require("discord.js"); const fs = require("fs"); const config = JSON.parse(fs.readFileSync("./utils/config.json", "utf8")); module.exports = { name: "command", description: "This is a command!", execute(message, args){ console.log("Nachricht mit command 'command' erhalten."); } }
Damit der Bot den command auch erfasst, muss dieser in der Datei
index.js
festgelegt werden.client.on("message", message => { if(!message.content.startsWith(config.prefix) || message.author.bot) return; const args = message.content.slice(config.prefix.length).split(/ +/); const command = args.shift().toLowerCase(); if(command === "help"){ client.commands.get("help").execute(message, args); } });
Ersetzt den Befehl
help
durch den in dercommands/command.js
definierten command.if(command === "command"){ client.commands.get("command").execute(message, args); }
Vergesst nicht, das Programm in der Konsole mithilfe von
Strg + C
zu beenden, um es dann wieder mitnode index.js
zu starten, da die Änderungen sonst nicht wirksam werden.
Sobald wir innerhalb von Discord jetzt ms.command senden, erhalten wir die Ausgabe in der Konsole:
PS D:\Users\cooper\Desktop\makesmart-discord-bot> node index.js Logged in as cooper-bot-tutorial#6189! Nachricht mit command 'command' erhalten.
Zusammenfassung
Prefix
Der Prefix, mit dem die Funktionen des Bots aufgerufen werden, muss immer vorangestellt werden.
Egal ob
ms.command
,!command
oder?command
, der Prefix wird in der Dateiutils/config.json
festgelegt.{ "token": "NzgyNTcTNjc5MjY3ODk2MYQ1.X7OT2A.Ex4XlxDzN3kRZNAzRHP9BDht8II", "prefix": "ms." }
Commands
Es ist ratsam, für jeden command eine eigene Datei anzulegen. Die Dateien für die commands werden automatisch von der
index.js
eingebunden. Die Dateien für die einzelnen commands befinden sich untercommands/*
.Der Name der Datei hat nichts mit dem command an sich zu tun. Die Paramater werden in der Datei nochmal einzeln definiert. Wobei der Wert von
name
der eigentliche command ist.module.exports = { name: "meinCommand", description: "This is a command!", execute(message, args){ } }
Command ausführen
Commands werden in der
index.js
ausgeführt. Wenn der Bot eine Nachricht erhält der mit einem command beginnt, wird dieexecute()
-Funktion des jeweiligen commands aufgerufen.if(command === "meinCommand"){ client.commands.get("meinCommand").execute(message, args); }
const Discord = require("discord.js"); const fs = require("fs"); const config = JSON.parse(fs.readFileSync("./utils/config.json", "utf8")); module.exports = { name: "meinCommand", description: "This is a command!", execute(message, args){ console.log("Nachricht mit command 'meinCommand' erhalten."); } }
Weiteres wird folgen…
Wollt ihr wissen, wie ihr einen Discord-Bot mit Slash-Commands programmiert? Dann schaut euch gerne das Tutorial von @merlin an.
Tutorial: Der eigene Discord Bot mit Slash Commands