• 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 Namen makesmart-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

    makesmart_windows_powershell

    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 Datei package.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 der package.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 Ordners makesmart-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 Order node_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

    makesmart_discord_bot_new_application

    Vergebt eurer App einen passenden Namen und erstellt sie. Anschließend kann links über das Menü der Bot innerhalb der Applikation erstellt werden.

    makesmart_add_discord_bot.png

    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.

    makesmart_discord_bot_show_token.png


    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 bei bot. 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 Berechtigung Administrator geben.


    Der erste Start

    Bevor der Bot das erste mal gestartet werden kann, muss der gerade eben kopierte Token in der config.json im Ordner utlis 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 Datei command.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 der commands/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 mit node 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 Datei utils/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 unter commands/*.

    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 die execute()-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

Ähnliche Themen

  • 3
  • 1
  • 1
  • 2
  • 7