One place for hosting & domains

      August 2020

      Erstellen eines Discord-Bots mit Node.js


      Der Autor wählte den Free and Open Source Fund, um eine Spende im Rahmen des Programms Write for DOnations zu erhalten.

      Einführung

      Discord ist eine Chat-Anwendung, die Millionen von Benutzern auf der ganzen Welt für Messaging und Voice Chat nutzen – in Communities, die Gilden oder Server genannt werden. Außerdem bietet Discord eine umfangreiche API, die Entwickler zum Einrichten leistungsfähiger Discord-Bots verwenden können. Bots können verschiedene Aktionen wie das Senden von Nachrichten an Server, das Ausführen von DM-Befehlen für Benutzer, das Moderieren von Servern und das Abspielen von Audio in Voice Chats erledigen. So können Entwickler leistungsstarke Bots entwickeln, die erweiterte, anspruchsvolle Merkmale wie Moderationstools oder auch Spiele umfassen. Der Utility-Bot Dyno zum Beispiel stellt Millionen von Gilden bereit und bietet nützliche Merkmale wie Spamschutz, einen Musikplayer und andere Dienstprogrammfunktionen. Wenn Sie wissen, wie man Discord-Bots erstellt, können Sie viele Möglichkeiten implementieren, mit denen Tausende von Menschen täglich interagieren können.

      In diesem Tutorial erstellen Sie von Grund auf einen Discord-Bot mit Node.js und der Discord.js-Bibliothek, sodass Benutzer direkt mit der Discord-API interagieren können. Sie werden ein Profil für einen Discord-Bot einrichten, Authentifizierungstoken für den Bot erhalten und den Bot mit der Fähigkeit zur Verarbeitung von Befehlen mit Argumenten von Benutzern programmieren.

      Voraussetzungen

      Bevor Sie beginnen, benötigen Sie Folgendes:

      Schritt 1 — Einrichten eines Discord-Bots

      In diesem Schritt verwenden Sie die Entwickler-GUI von Discord, um einen Discord-Bot einzurichten und das Token des Bots zu empfangen, das Sie an Ihr Programm übergeben werden.

      Um einen Bot in der Discord-Plattform zu registrieren, verwenden Sie das Dashboard der Discord-Anwendung. Hier können Entwickler Discord-Anwendungen einschließlich Discord-Bots erstellen.

      Abbildung des Dashboards der Discord-Anwendung nach dem ersten Besuch von https://discord.com/developers/applications

      Um zu beginnen, klicken Sie auf Neue Anwendung. Discord wird Sie bitten, einen Namen für Ihre neue Anwendung einzugeben. Klicken Sie dann auf Erstellen, um die Anwendung zu erstellen.

      Abbildung der Eingabeaufforderung für die Erstellung einer Anwendung, mit „Test Node.js Bot“ als Name der Anwendung

      Anmerkung: Der Name Ihrer Anwendung ist unabhängig vom Namen des Bots und der Bot muss nicht den gleichen Namen tragen wie die Anwendung.

      Öffnen Sie nun Ihr Anwendungs-Dashboard. Um der Anwendung einen Bot hinzuzufügen, navigieren Sie links in der Navigationsleiste zur Registerkarte Bot.

      Abbildung der Registerkarte Bot des Anwendungs-Dashboards

      Klicken Sie auf die Schaltfläche Bot hinzufügen, um der Anwendung einen Bot hinzuzufügen. Klicken Sie auf die Schaltfläche Ja, los!, wenn sie Sie zur Bestätigung aufgefordert werden. Nun befinden Sie sich in einem Dashboard, das Details wie den Namen des Bots, das Authentifizierungstoken und das Profilbild enthält.

      Dashboard mit Details Ihres Bots

      Sie können den Namen oder das Profilbild Ihres Bots hier im Dashboard ändern. Außerdem müssen Sie das Authentifizierungstoken des Bots kopieren, indem Sie auf Klicken, um Token anzuzeigen klicken und das angezeigte Token kopieren.

      Achtung: Teilen oder laden Sie Ihr Bot-Token niemals hoch, damit sich andere Personen nicht bei Ihrem Bot anmelden können.

      Jetzt müssen Sie eine Einladung erstellen, mit der Sie die Discord-Gilden des Bots hinzufügen, in denen Sie den Bot testen können. Navigieren Sie zunächst zum Tab OAuth2 des Anwendungs-Dashboards. Um eine Einladung zu erstellen, scrollen Sie nach unten und wählen Sie unter Bereiche Bot aus. Außerdem müssen Sie Berechtigungen festlegen, um zu kontrollieren, welche Aktionen Ihr Bot in Gilden ausführen darf. Wählen Sie für die Zwecke dieses Tutorials Administrator, wodurch Ihr Bot die Berechtigung erhält, fast alle Aktionen in Gilden auszuführen. Kopieren Sie den Link mit der Schaltfläche Kopieren.

      OAuth2-Registerkarte, mit dem Bereich auf „bot“ und Berechtigungen auf „administator“ gesetzt

      Als Nächstes fügen Sie den Bot einem Server hinzu. Folgen Sie dem gerade erstellten Einladungs-Link. Sie können den Bot jedem Server hinzufügen, den Sie besitzen oder für den Sie über Administratorberechtigungen verfügen (über das Dropdownmenü).

      Seite nach dem Folgen des Einladungs-Links, über die Benutzer den Bot Servern hinzufügen können

      Klicken Sie nun auf Weiter. Stellen Sie sicher, dass Sie das Kontrollkästchen neben Administrator aktiviert haben – dadurch erhält der Bot Administratorberechtigungen. Klicken Sie dann auf Autorisieren. Discord wird Sie bitten, eine CAPTCHA zu lösen, bevor der Bot dem Server beitritt. Sie werden den Discord-Bot nun auf der Mitgliederliste in dem Server sehen, dem Sie den Bot unter offline hinzugefügt haben.

      Mitgliederliste eines Discord-Servers mit dem neu erstellten Bot unter dem Abschnitt „offline“ der Mitgliederliste

      Sie haben erfolgreich einen Discord-Bot erstellt und einem Server hinzugefügt. Als Nächstes schreiben Sie ein Programm, um sich bei dem Bot anzumelden.

      Schritt 2 — Erstellen Ihres Projekts

      In diesem Schritt richten Sie die grundlegende Codierungsumgebung ein, in der Sie Ihren Bot erstellen und sich programmatisch beim Bot anmelden werden.

      Zuerst müssen Sie einen Projektordner und die erforderlichen Projektdateien für den Bot einrichten.

      Erstellen Sie Ihren Projektordner:

      Wechseln Sie in den gerade erstellten Projektordner:

      Als Nächstes verwenden Sie Ihren Texteditor, um eine Datei namens config.json zu erstellen und das Authentifizierungstoken Ihres Bots zu speichern:

      Fügen Sie dann den folgenden Code der config-Datei hinzu und ersetzen Sie den hervorgehobenen Text durch das Authentifizierungstoken Ihres Bots:

      config.json

      {
          "BOT_TOKEN": "YOUR BOT TOKEN"
      }
      

      Speichern und schließen Sie die Datei.

      Als Nächstes erstellen Sie eine package.json-Datei, in der Details Ihres Projekts und Informationen über die Abhängigkeiten gespeichert werden, die Sie für das Projekt verwenden werden. Sie erstellen eine package.json-Datei, indem Sie den folgenden npm-Befehl ausführen:

      npm wird Sie nach verschiedenen Details zu Ihrem Projekt fragen. Wenn Sie eine Anleitung für diese Eingabeaufforderungen wünschen, konsultieren Sie Verwenden von Node.js-Modulen mit npm und package.json.

      Sie installieren nun das discord.js-Paket, das Sie zur Interaktion mit der Discord-API verwenden werden. Sie können discord.js über npm mit dem folgenden Befehl installieren:

      Nachdem Sie die Konfigurationsdatei eingerichtet und die erforderliche Abhängigkeit installiert haben, können Sie nun mit der Einrichtung Ihres Bots beginnen. In einer realen Anwendung würde ein großer Bot auf viele Dateien verteilt, aber für die Zwecke dieses Tutorials wird sich der Code Ihres Bots in einer Datei befinden.

      Erstellen Sie zunächst für den Code eine Datei mit dem Namen index.js im Ordner discord-bot:

      Beginnen Sie mit dem Codieren des Bots, indem Sie die discord.js-Abhängigkeit und die Konfigurationsdatei mit dem Token des Bots vorschreiben:

      index.js

      const Discord = require("discord.js");
      const config = require("./config.json");
      

      Fügen Sie danach die folgenden zwei Codezeilen hinzu:

      index.js

      ...
      const client = new Discord.Client();
      
      client.login(config.BOT_TOKEN);
      

      Speichern und schließen Sie Ihre Datei.

      Die erste Zeile des Codes erstellt einen neuen Discord.Client und weist ihn der Konstanten client zu. Dieser Client ist ein Teil davon, wie Sie mit der Discord-API interagieren werden und wie Discord Sie bei Ereignissen wie neuen Meldungen benachrichtigen wird. Der Client ist in Wirklichkeit der Discord-Bot.

      Die zweite Zeile des Codes verwendet die login-Methode für den Client, um sich bei dem von Ihnen erstellten Discord-Bot anzumelden, wobei das Token in der Datei config.json als Passwort verwendet wird. Mit dem Token erfährt die Discord-API, an welches Programm sich der Bot richtet und dass Sie für die Nutzung des Bots authentifiziert sind.

      Führen Sie nun mit Node die Datei index.js aus:

      Der Status Ihres Bots wird sich auf dem Discord-Server, dem er hinzugefügt wurde, in „online“ ändern.

      Abbildung des Bots im Online-Zustand

      Sie haben erfolgreich eine Codierungsumgebung eingerichtet und den grundlegenden Code für die Anmeldung bei einem Discord-Bot erstellt. Im nächsten Schritt werden Sie Benutzerbefehle verwalten und Ihren Bot zur Durchführung von Aktionen veranlassen, wie z. B. zum Senden von Nachrichten.

      Schritt 3 — Verwendung Ihres ersten Benutzerbefehls

      In diesem Schritt erstellen Sie einen Bot, der Benutzerbefehle handhaben kann. Sie werden Ihren ersten Befehl (ping) implementieren, der mit "pong" und der Zeit antworten wird, die zum Antworten auf den Befehl benötigt wurde.

      Zunächst müssen Sie alle Nachrichten erkennen und empfangen, die Benutzer senden, damit Sie Befehle verarbeiten können. Mit der Methode on auf dem Discord-Client wird Ihnen Discord eine Benachrichtigung zu neuen Ereignissen senden. Die Methode on hat zwei Argumente: den Namen eines Ereignisses, auf das gewartet wird, und eine Funktion, die jedes Mal ausgeführt wird, wenn das Ereignis eintritt. Bei dieser Methode können Sie auf das Ereignis message warten – es wird jedes Mal eintreten, wenn eine Nachricht an eine Gilde gesendet wird, in der der Bot die Berechtigung zum Anzeigen von Nachrichten hat. Lassen Sie uns daher eine Funktion erstellen, die bei jeder Übermittlung einer Nachricht ausgeführt wird, um Befehle zu verarbeiten.

      Öffnen Sie zunächst Ihre Datei:

      Fügen Sie den folgenden Code zur Datei hinzu:

      index.js

      ...
      const client = new Discord.Client();
      
      
      client.on("message", function(message) { 
                                               
      });                                      
      
      client.login(config.BOT_TOKEN);
      

      Diese Funktion, die beim Ereignis message ausgeführt wird, nutzt message als Parameter. message wird den Wert einer Discord.js message-Instanz haben, die Informationen über die gesendete Nachricht und Methoden enthält, um dem Bot beim Antworten zu helfen.

      Fügen Sie nun Ihrer Befehlsverarbeitungsfunktion die folgende Codezeile hinzu:

      index.js

      ...
      client.on("message", function(message) {
        if (message.author.bot) return;
      });
      ...
      

      Diese Zeile prüft, ob der Autor der Nachricht ein Bot ist; wenn ja, wird die Verarbeitung des Befehls gestoppt. Dies ist wichtig, da Sie Nachrichten von Bots im Allgemeinen weder bearbeiten noch beantworten möchten. Bots müssen oder wollen unseren Bot in der Regel nicht verwenden, sodass ein Ignorieren ihrer Nachrichten Rechenleistung spart und unbeabsichtigte Antworten verhindert.

      Jetzt schreiben Sie einen Befehlshandler. Um das zu erreichen, ist es hilfreich, das übliche Format eines Discord-Befehls zu verstehen. In der Regel enthält die Struktur eines Discord-Befehls drei Teile in der folgenden Reihenfolge: ein Präfix, einen Befehlsnamen und (manchmal) Befehlsargumente.

      Abbildung eines typischen Discord-Befehls, der

      • Präfix: Das Präfix kann alles sein, ist aber in der Regel eine Interpunktion oder abstrakte Phrase, die normalerweise nicht am Anfang einer Nachricht stehen würde. Das bedeutet, dass bei Eingabe des Präfix am Anfang der Nachricht der Bot weiß, dass der Befehl von einem Bot verarbeitet werden soll.

      • Befehlsname: Der Name des Befehls, den der Benutzer verwenden möchte. Das bedeutet, dass der Bot mehrere Befehle mit unterschiedlicher Funktionalität unterstützen kann und Benutzer durch Angabe eines anderen Befehlsnamens zwischen ihnen wählen können.

      • Argumente: Wenn der Befehl ggf. zusätzliche Informationen vom Benutzer benötigt oder verwendet, kann der Benutzer nach dem Befehlsnamen Argumente angeben, wobei jedes Argument durch ein Leerzeichen getrennt wird.

      Anmerkung: Es gibt keine zwingende Befehlsstruktur; Bots können Befehle verarbeiten, wie sie wollen. Die hier dargestellte Struktur ist jedoch eine effiziente Struktur, die eine überwiegende Mehrheit der Bots verwendet.

      Um mit der Erstellung eines Befehlsparsers zu beginnen, der dieses Format handhabt, fügen Sie der Nachrichtenverarbeitungsfunktion folgende Codezeilen hinzu:

      index.js

      ...
      const prefix = "!";
      
      client.on("message", function(message) {
        if (message.author.bot) return;
        if (!message.content.startsWith(prefix)) return;
      });
      ...
      

      Sie fügen die erste Codezeile hinzu, um den Wert "!" der Konstanten prefix zuzuweisen, die Sie als Präfix des Bots nutzen werden.

      Die zweite Codezeile, die Sie hinzufügen, prüft, ob der Inhalt der Nachricht, die der Bot verarbeitet, mit dem von Ihnen festgelegten Präfix beginnt; wenn nicht, wird die Weiterverarbeitung der Nachricht gestoppt.

      Jetzt müssen Sie den Rest der Nachricht in einen Befehlsnamen und jegliche Argumente konvertieren, die in der Nachricht vorhanden sind. Fügen Sie die folgenden hervorgehobenen Zeilen hinzu:

      index.js

      ...
      client.on("message", function(message) {
        if (message.author.bot) return;
        if (!message.content.startsWith(prefix)) return;
      
        const commandBody = message.content.slice(prefix.length);
        const args = commandBody.split(' ');
        const command = args.shift().toLowerCase();
      });
      ...
      

      Sie verwenden hier die erste Zeile, um das Präfix aus dem Nachrichteninhalt zu entfernen und das Ergebnis der Konstanten commandBody zuzuweisen. Dies ist notwendig, da Sie das Präfix nicht in den analysierten Befehlsnamen einfügen möchten.

      Die zweite Zeile nimmt die Nachricht mit dem entfernten Präfix und wendet die split-Methode darauf an, wobei ein Leerzeichen als Trennzeichen dient. Dadurch wird eine Aufspaltung in eine Gruppe von untergeordneten Zeichenfolgen vorgenommen, wobei bei jedem Leerzeichen eine Trennung vorgenommen wird. So entsteht ein Array, das den Befehlsnamen und dann (wenn in der Nachricht enthalten) Argumente beinhaltet. Sie weisen dieses Array der Konstanten args zu.

      Die dritte Zeile entfernt das erste Element aus dem Array args (was der bereitgestellte Befehlsname sein wird), konvertiert es in Kleinbuchstaben und weist es dann der Konstanten command zu. Dadurch können Sie den Befehlsnamen isolieren und nur Argumente im Array belassen. Außerdem verwenden Sie die Methode toLowerCase, da bei Befehlen in Discord-Bots typischerweise nicht zwischen Groß-/Kleinschreibung unterschieden wird.

      Sie haben die Erstellung eines Befehlsparsers, die Implementierung eines erforderlichen Präfix und das Erhalten des Befehlsnamens und der Argumente von Nachrichten abgeschlossen. Sie werden nun den Code für die spezifischen Befehle implementieren und erstellen.

      Fügen Sie folgenden Code hinzu, um den ping-Befehl zu implementieren:

      index.js

      ...
        const args = commandBody.split(' ');
        const command = args.shift().toLowerCase();
      
        if (command === "ping") {
                                 
        }                        
      });
      ...
      

      Diese if-Anweisung prüft, ob der analysierte Befehlsname (der der Konstanten command zugewiesen ist) mit "ping" übereinstimmt. Wenn ja, heißt das, dass der Benutzer den Befehl "ping" verwenden möchte. Sie werden den Code für den spezifischen Befehl im if-Anweisungsblock verschachteln. Sie werden dieses Muster für andere Befehle, die Sie implementieren möchten, wiederholen.

      Jetzt können Sie den Code für den Befehl "ping" implementieren:

      index.js

      ...
        if (command === "ping") {
          const timeTaken = Date.now() - message.createdTimestamp;
          message.reply(`Pong! This message had a latency of ${timeTaken}ms.`);
        }
      ...
      

      Speichern und schließen Sie Ihre Datei.

      Sie fügen den Befehlsblock "ping" hinzu, der die Differenz zwischen der aktuellen Zeit (ermittelt durch Anwendung der Methode now auf das Objekt Date) und dem Zeitstempel, als die Nachricht erstellt wurde, berechnet (in Millisekunden). Dadurch wird berechnet, wie lang die Verarbeitung der Nachricht und das "ping" des Bots benötigt haben.

      Die zweite Zeile reagiert auf den Befehl des Benutzers mit der reply-Methode in der Konstanten message. Die reply-Methode pingt (wodurch der Benutzer benachrichtigt und die Nachricht für den angegebenen Benutzer hervorgehoben wird) den Benutzer an, der den Befehl aufgerufen hat, gefolgt von dem Inhalt, der als erstes Argument der Methode angegeben wurde. Sie stellen ein template literal bereit, das eine Nachricht und den errechneten Ping als Antwort enthält, die die reply-Methode verwenden wird.

      Damit ist die Implementierung des Befehls "ping" abgeschlossen.

      Führen Sie Ihren Bot mit dem folgenden Befehl aus (im selben Ordner wie index.js):

      Sie können nun den Befehl "! ping" in jedem Kanal nutzen, den der Bot anzeigen und in dem der Bot Nachrichten senden kann; dabei kommt es zu einer Antwort.

      Abbildung von Bot, der in Discord auf

      Sie haben nun erfolgreich einen Bot erstellt, der Benutzerbefehle handhaben kann, und Ihren ersten Befehl implementiert. Im nächsten Schritt werden Sie Ihren Bot weiterentwickeln, indem Sie einen sum-Befehl implementieren.

      Schritt 4 — Implementieren des sum-Befehls

      Jetzt werden Sie Ihr Programm durch Implementieren des "! sum"-Befehls erweitern. Der Befehl nimmt eine beliebige Anzahl von Argumenten an und fügt sie zusammen, bevor die Summe aller Argumente an den Benutzer zurückgegegen wird.

      Wenn Ihr Discord-Bot noch ausgeführt wird, können Sie den Prozess mit Strg+C anhalten.

      Öffnen Sie erneut Ihre index.js-Datei:

      Um mit der Implementierung des "! sum"-Befehls zu beginnen, werden Sie einen else-if-Block verwenden. Nach der Prüfung des ping-Befehlsnamens wird geprüft, ob der Befehlsname gleich "sum" ist. Wir verwenden einen else-if-Block, da nur ein Befehl auf einmal verarbeitet wird; wenn das Programm dem Befehlsnamen "ping" entspricht, muss also nicht auf den Befehl "sum" geprüft werden. Fügen Sie in Ihrer Datei die folgenden hervorgehobenen Zeilen hinzu:

      index.js

      ...
        if (command === "ping") {
          const timeTaken = Date.now() - message.createdTimestamp;
          message.reply(`Ping! This message had a latency of ${timeTaken}ms.`);
        }
      
        else if (command === "sum") {
                                     
        }                            
      });
      ...
      

      Sie können mit der Implementierung des Codes für den "sum"-Befehl beginnen. Der Code für den Befehl "sum" wird in den gerade erstellten else-if-Block eingebunden. Fügen Sie nun folgenden Code hinzu:

      index.js

      ...
        else if (command === "sum") {
          const numArgs = args.map(x => parseFloat(x));
          const sum = numArgs.reduce((counter, x) => counter += x);
          message.reply(`The sum of all the arguments you provided is ${sum}!`);
        }
      ...
      

      Sie verwenden die map-Methode in der Argumentenliste, um eine neue Liste zu erstellen, indem Sie die Funktion parseFloat auf jedes Element im Array args anwenden. Dadurch ensteht ein neues Array (das der Konstanten numArgs zugewiesen ist), in dem alle Elemente Zahlen anstelle von Zeichenfolgen sind. Das bedeutet, dass Sie durch Addieren die Summe der Zahlen ermitteln können.

      Die zweite Zeile wendet die reduce-Methode auf die Konstante numArgs an; so ist eine Funktion verfügbar, die die Summe aller Elemente in der Liste errechnet. Sie weisen die Summe aller Elemente in numArgs der Konstanten sum zu.

      Dann wenden Sie die reply-Methode auf das Nachrichtenobjekt an, um auf den Befehl des Benutzers mit einem template literal zu antworten, das die Summe aller Argumente enthält, die der Benutzer an den Bot sendet.

      Damit ist die Implementierung des Befehls "sum" abgeschlossen. Führen Sie Ihren Bot nun mit dem folgenden Befehl aus (im selben Ordner wie index.js):

      Sie können den Befehl "! sum" jetzt in jedem Kanal verwenden, den der Bot anzeigen und in dem er Nachrichten senden kann.

      Abbildung von Bot, der mit „Die Summe aller von Ihnen angegebenen Argumente ist 6!“ auf

      Im Folgenden finden Sie eine fertige Version des index.js-Bot-Skripts:

      index.js

      const Discord = require("discord.js");
      const config = require("./config.json");
      
      const client = new Discord.Client();
      
      const prefix = "!";
      
      client.on("message", function(message) {
        if (message.author.bot) return;
        if (!message.content.startsWith(prefix)) return;
      
        const commandBody = message.content.slice(prefix.length);
        const args = commandBody.split(' ');
        const command = args.shift().toLowerCase();
      
        if (command === "ping") {
          const timeTaken = Date.now() - message.createdTimestamp;
          message.reply(`Pong! This message had a latency of ${timeTaken}ms.`);
        }
      
        else if (command === "sum") {
          const numArgs = args.map(x => parseFloat(x));
          const sum = numArgs.reduce((counter, x) => counter += x);
          message.reply(`The sum of all the arguments you provided is ${sum}!`);
        }
      });
      
      client.login(config.BOT_TOKEN);
      

      In diesem Schritt haben Sie Ihren Discord-Bot durch Implementieren des sum-Befehls weiterentwickelt.

      Zusammenfassung

      Sie haben einen Discord-Bot implementiert, der verschiedene Benutzerbefehle und Befehlsargumente handhaben kann. Wenn Sie Ihren Bot erweitern möchten, können Sie ggf. weitere Befehle implementieren oder weitere Bestandteile der Discord-API zur Erstellung eines leistungsfähigen Discord-Bots testen. Konsultieren Sie die Discord.js-Dokumentation oder Discord-API-Dokumentation, um mehr über die Discord-API zu erfahren.

      Bei der Erstellung von Discord-Bots müssen Sie stets die allgemeinen Geschäftsbedingungen der Discord-API im Auge behalten; darin wird umrissen, wie Entwickler die Discord-API verwenden müssen. Außerdem können Sie diesen Satz an Leitfäden lesen, um einen Discord-Bot optimal zu implementieren und Tipps zur Gestaltung von Discord-Bots zu erhalten. Wenn Sie mehr über Node.js erfahren möchten, lesen Sie unsere Serie zum Codieren in Node.js.



      Source link

      Cómo crear un bot de Discord con Node.js


      El autor seleccionó Free and Open Source Fund para recibir una donación como parte del programa Write for DOnations.

      Introducción

      Discord es una aplicación de chat que permite a millones de usuarios de todo el mundo transmitir mensajes y voz en línea en comunidades llamadas gremios o servidores. Discord también proporciona una amplia API que los desarrolladores pueden usar para crear potentes bots de Discord. Los bots pueden realizar diversas acciones, como enviar mensajes a servidores, mensajes directos a usuarios, moderar servidores y reproducir audio en los chats de voz. Esto permite a los desarrolladores crear bots potentes que incluyen funciones avanzadas y complejas como herramientas de moderación o, incluso, juegos. Por ejemplo, el bot de utilidad Dyno sirve a millones de gremios y contiene características útiles como la protección contra spam, un reproductor de música y otras funciones útiles. Aprender a crear bots de Discord le permite implementar muchas posibilidades, con las que miles de personas podrían interactuar cada día.

      En este tutorial, creará un bot de Discord desde cero, usando Node.js y la biblioteca de Discord.js, que permite a los usuarios interactuar directamente con la API de Discord. Configurará un perfil para un bot de Discord, obtendrá tokens de autenticación para el bot y lo programará con la capacidad de procesar comandos con argumentos, desde los usuarios.

      Requisitos previos

      Para comenzar, necesitará lo siguiente:

      Paso 1: Configurar un bot de Discord

      En este paso, utilizará la GUI de desarrolladores de Discord para configurar un bot de Discord y obtener el token de bot, que pasará a su programa.

      Para registrar un bot en la plataforma Discord, utilice el panel de aplicación de Discord. Aquí los desarrolladores pueden crear aplicaciones de Discord incluyendo bots de Discord.

      Imagen del panel de aplicación de Discord después de visitar https://discord.com/developers/applications primero

      Para comenzar, haga clic en Nueva aplicación. Discord le solicitará que introduzca un nombre para su nueva aplicación. A continuación, haga clic en Crear para crear la aplicación.

      Imagen del mensaje para crear una aplicación, con

      Nota: El nombre de su aplicación es independiente del nombre del bot, y el bot no tiene el mismo nombre que la aplicación.

      Ahora, abra el panel de su aplicación. Para agregar un bot a la aplicación, diríjase a la pestaña Bot en la barra de navegación a la izquierda.

      Imagen de la pestaña bot del panel de aplicación

      Haga clic en el botón Añadir bot para agregar un bot a la aplicación. Haga clic en el botón Sí, ¡hazlo! cuando le pida la confirmación. A continuación, estará en un panel que contiene detalles sobre el nombre de su bot, el token de autenticación y la imagen de perfil.

      Panel que contiene detalles de su bot

      Puede modificar el nombre o la imagen de su bot, aquí, en el panel. También necesita copiar el token de autenticación del bot haciendo clic en Haga clic para mostrar Token y copiando el token que aparece.

      Advertencia: Nunca comparta ni suba su token de bot, ya que permite a cualquier persona iniciar sesión en su bot.

      Ahora, necesita crear una invitación que le permita agregar los gremios de Discord del bot donde puede probar el bot. Primero, vaya a la pestaña OAuth2 del panel de aplicación. Para crear una invitación, desplácese hacia abajo y seleccione bot en alcances. También debe establecer permisos para controlar las acciones que puede realizar su bot en los gremios. A los efectos de este tutorial, seleccione Administrador, que le dará a su bot permiso para realizar casi todas las acciones en los gremios. Copie el enlace con el botón Copiar.

      Pestaña OAuth2, con el alcance configurado en

      A continuación, añada el bot a un servidor. Siga el enlace de invitación que acaba de crear. Puede agregar el bot a cualquier servidor que posea, o en el que tenga permisos de administrador, desde el menú desplegable.

      Página desde el siguiente enlace de invitación, que permite a los usuarios agregar el bot a los servidores

      Ahora haga clic en Continuar. Asegúrese de tener marcada la casilla junto a Administrador: esto concederá los permisos de administrador de bot. A continuación, haga clic en Autorizar. Discord le solicitará que resuelva un CAPTCHA antes de que el bot se una al servidor. Ahora, tendrá el bot de Discord en la lista de miembros en el servidor al que añadió el bot debajo de sin conexión.

      Lista de miembros de un servidor de Discord con el bot recientemente creado en la sección

      Ha creado correctamente un bot de Discord y lo ha añadido a un servidor. A continuación, escribirá un programa para iniciar sesión en el bot.

      Paso 2: Crear su proyecto

      En este paso, configurará el entorno de codificación básico donde creará su bot e iniciará sesión en el bot de forma programática.

      Primero, debe configurar una carpeta de proyecto y los archivos de proyecto necesarios para el bot.

      Cree su carpeta de proyecto:

      Vaya a la carpeta de proyecto que acaba de crear:

      A continuación, utilice su editor de texto para crear un archivo llamado config.json para almacenar el token de autenticación de su bot:

      A continuación, añada el siguiente código al archivo config, sustituyendo el texto resaltado por el token de autenticación de su bot:

      config.json

      {
          "BOT_TOKEN": "YOUR BOT TOKEN"
      }
      

      Guarde el archivo y ciérrelo.

      A continuación, creará un archivo package.json que almacenará los detalles de su proyecto e información sobre las dependencias que utilizará para el proyecto. Creará un archivo package.json ejecutando el siguiente comando npm:

      npm le solicitará varios datos sobre su proyecto. Si desea obtener información sobre cómo completar las preguntas, puede leer sobre ellos en Cómo usar módulos Node.js con npm y package.json.

      Ahora, instalará el paquete discord.js que utilizará para interactuar con la API de Discord. Puede instalar discord.js a través de npm con el siguiente comando:

      Ahora ha configurado el archivo de configuración y ha instalado la dependencia necesaria, está listo para comenzar a crear su bot. En una aplicación en el mundo real, un bot grande se dividiría en muchos archivos, pero a efectos de este tutorial, el código para su bot estará en un solo archivo.

      Primero, cree un archivo llamado index.js en la carpeta discord-bot para el código:

      Comience a codificar el bot pidiendo la dependencia de discord.js y el archivo config con el token de bot:

      index.js

      const Discord = require("discord.js");
      const config = require("./config.json");
      

      A continuación, añada las siguientes dos líneas de código:

      index.js

      ...
      const client = new Discord.Client();
      
      client.login(config.BOT_TOKEN);
      

      Guarde y cierre su archivo.

      La primera línea de código crea un nuevo Discord.Client y lo asigna a la constante client. Este cliente es en parte cómo interactúa con la API de Discord y cómo le notificará eventos como mensajes nuevos. El cliente, en efecto, representa el bot de Discord.

      La segunda línea de código utiliza el método login en client para iniciar sesión en el bot de Discord que creó, usando el token en el archivo config.json como contraseña. El token permite a la API de Discord saber para qué bot es el programa y que está autenticado para usar el bot.

      Ahora, ejecute el archivo index.js usando Node:

      El estado de su bot cambiará a “en línea” en el servidor de Discord al que lo añadió.

      Imagen del bot en línea

      Ha configurado correctamente un entorno de codificación y ha creado el código básico para iniciar sesión en un bot de Discord. En el siguiente paso, manejará los comandos de usuario y hará que su bot realice acciones, como enviar mensajes.

      Paso 3: Cómo manejar su primer comando de usuario

      En este paso, creará un bot que puede manejar los comandos de usuario. Implementará su primer comando de ping, que responderá con "pong" y el tiempo que toma para responder al comando.

      Primero, necesita detectar y recibir cualquier mensaje que los usuarios envíen, para que pueda procesar cualquier comando. Con el método on en el cliente de Discord, Discord le enviará una notificación sobre eventos nuevos. El método on toma dos argumentos: el nombre de un evento a esperar y una función a ejecutar cada vez que se produce ese evento. Con este método, puede esperar el evento message: se producirá cada vez que se envía un mensaje a un gremio donde el bot tiene permiso para ver mensajes. Por tanto, vamos a crear una función, que se ejecuta cada vez que se envía un mensaje, para procesar comandos.

      Primero, abra su archivo:

      Añada el siguiente código a su archivo:

      index.js

      ...
      const client = new Discord.Client();
      
      
      client.on("message", function(message) { 
                                               
      });                                      
      
      client.login(config.BOT_TOKEN);
      

      Esta función, que se ejecuta en el evento message, toma message como un parámetro. message tendrá el valor de una instancia de mensaje de Discord.js, que contiene información sobre el mensaje enviado y los métodos para ayudar a responder al bot.

      Ahora, añada la siguiente línea de código a su función de manejo de comandos:

      index.js

      ...
      client.on("message", function(message) {
        if (message.author.bot) return;
      });
      ...
      

      Esta línea comprueba si el autor del mensaje es un bot y, si es así, deja de procesar el comando. Esto es importante, ya que generalmente no quiere procesar o responder a los mensajes de bots. Por lo general, los bots no necesitan o no quieren usar nuestro bot, por lo que ignorar sus mensajes ahorra potencia de procesamiento y ayuda a evitar respuestas accidentales.

      Ahora, escribirá un controlador de comandos. Para ello, es bueno entender el formato habitual de un comando de Discord. Normalmente, la estructura de un comando de Discord contiene tres partes en el siguiente orden: un prefijo, un nombre de comando y (a veces) argumentos de comandos.

      Una imagen de un comando típico de Discord que se lee

      • Prefijo: el prefijo puede ser cualquier cosa, pero, por lo general, es un signo de puntuación o una frase abstracta que normalmente no estaría al principio de un mensaje. Esto significa que, cuando incluya el prefijo al inicio del mensaje, el bot sabrá que la intención de este comando es para que un bot lo procese.

      • Nombre de comando: el nombre del comando que el usuario quiere usar. Esto significa que el bot puede soportar múltiples comandos con diferentes funciones y permitir a los usuarios elegir entre ellos al proporcionar un nombre de comando diferente.

      • Argumentos: a veces, si el comando requiere o utiliza información adicional del usuario, este puede proporcionar argumentos después del nombre de comando, con cada argumento separado por un espacio.

      Nota: No hay estructura de comandos forzada, y los bots pueden procesar los comandos como quieran, pero la estructura que se presenta aquí es una estructura eficiente que la gran mayoría de bots utilizan.

      Para comenzar a crear un analizador sintáctico de comandos que maneje este formato, añada las siguientes líneas de código a la función de manejo de mensajes:

      index.js

      ...
      const prefix = "!";
      
      client.on("message", function(message) {
        if (message.author.bot) return;
        if (!message.content.startsWith(prefix)) return;
      });
      ...
      

      Añada la primera línea de código para asignar el valor "!" a la constante prefix, que utilizará como prefijo del bot.

      La segunda línea de código que añade comprueba si el contenido del mensaje que el bot está procesando comienza con el prefijo que configuró y, si no lo hace, deja de procesarlo.

      Ahora, debe convertir el resto del mensaje en un nombre de comando y cualquier argumento que pueda existir en el mensaje. Añada las siguientes líneas resaltadas:

      index.js

      ...
      client.on("message", function(message) {
        if (message.author.bot) return;
        if (!message.content.startsWith(prefix)) return;
      
        const commandBody = message.content.slice(prefix.length);
        const args = commandBody.split(' ');
        const command = args.shift().toLowerCase();
      });
      ...
      

      Utilice la primera línea aquí para eliminar el prefijo del contenido de mensaje y asignar el resultado a la constante commandBody. Esto es necesario, ya que no quiere incluir el prefijo en el nombre de comando analizado.

      La segunda línea toma el mensaje con el prefijo eliminado y utiliza el método split en él, con un espacio como separador. Esto lo divide en una matriz de subcadenas y hace una división dondequiera que haya un espacio. Esto crea una matriz que contiene el nombre de comando y, por tanto, si se incluye en el mensaje, cualquier argumento. Asigna esta matriz a la constante args.

      La tercera línea elimina el primer elemento de la matriz de args (que será el nombre de comando que se proporciona), lo convierte en minúscula y, luego, lo asigna a la constante command. Esto le permite aislar el nombre de comando y dejar solo argumentos en la matriz. También utiliza el método toLowerCase, ya que los comandos no suelen distinguir entre minúsculas y mayúsculas en bots de Discord.

      Completó la construcción de un analizador de comandos, implementó un prefijo requerido y obtuvo el nombre de comando y cualquier argumento de los mensajes. Ahora, implementará y creará el código para los comandos específicos.

      Añada el siguiente código para comenzar a implementar el comando ping:

      index.js

      ...
        const args = commandBody.split(' ');
        const command = args.shift().toLowerCase();
      
        if (command === "ping") {
                                 
        }                        
      });
      ...
      

      Esta instrucción if comprueba si el nombre de comando que analizó (asignado a la constante command) coincide con "ping". Si lo hace, indica que el usuario quiere usar el comando "ping". Anidará el código para el comando específico dentro del bloque de instrucción if. Repetirá este patrón para otros comandos que desee implementar.

      Ahora, puede implementar el código para el comando "ping":

      index.js

      ...
        if (command === "ping") {
          const timeTaken = Date.now() - message.createdTimestamp;
          message.reply(`Pong! This message had a latency of ${timeTaken}ms.`);
        }
      ...
      

      Guarde y cierre su archivo.

      Añada el bloque de comandos "ping" que calcula la diferencia entre el tiempo actual, que se encuentra usando el método now en el objeto Date y la marca de tiempo cuando el mensaje se creó en milisegundos. Esto calcula cuánto tiempo tardó el mensaje en procesarse y el "ping" del bot.

      La segunda línea responde al comando del usuario usando el método reply en la constante message. El método reply avisa (que notifica al usuario e indica el mensaje para el usuario especificado) al usuario que invocó el comando, seguido por el contenido proporcionado como el primer argumento al método. Proporciona una plantilla literal que contiene un mensaje y el ping calculado como la respuesta que el método reply utilizará.

      Esto concluye la implementación del comando "ping".

      Ejecute su bot usando el siguiente comando (en la misma carpeta que index.js):

      Ahora puede usar el comando "! ping" en cualquier canal que el bot pueda ver y enviar un mensaje, lo que resulta en una respuesta.

      Imagen de bot replicando en Discord a

      Ha creado correctamente un bot que puede manejar los comandos de usuario y ha implementado su primer comando. En el siguiente paso, continuará desarrollando su bot implementando un comando sum.

      Paso 4: Cómo implementar el comando sum

      Ahora, extenderá su programa implementando el comando "! sum". El comando tomará cualquier número de argumentos y los agregará juntos, antes de devolver la suma de todos los argumentos al usuario.

      Si su bot de Discord aún se está ejecutando, puede detener su proceso con CTRL + C.

      Abra su archivo index.js de nuevo:

      Para comenzar a implementar el comando "! sum", usará un bloque else-if. Después de comprobar el nombre de comando ping, comprobará si el nombre de comando es igual a "sum". Usamos un bloque else-if, ya que solo un comando se procesará a la vez, de forma que si el programa coincide con el nombre de comando "ping", no tiene que verificar el comando "sum". Añada las siguientes líneas resaltadas a su archivo:

      index.js

      ...
        if (command === "ping") {
          const timeTaken = Date.now() - message.createdTimestamp;
          message.reply(`Ping! This message had a latency of ${timeTaken}ms.`);
        }
      
        else if (command === "sum") {
                                     
        }                            
      });
      ...
      

      Puede comenzar a implementar el código para el comando "sum". El código para el comando "sum" entrará en el bloque else-if que acaba de crear. Ahora, añada el siguiente código:

      index.js

      ...
        else if (command === "sum") {
          const numArgs = args.map(x => parseFloat(x));
          const sum = numArgs.reduce((counter, x) => counter += x);
          message.reply(`The sum of all the arguments you provided is ${sum}!`);
        }
      ...
      

      Utilice el método map de la lista de argumentos para crear una nueva lista usando la función parseFloat en cada elemento de la matriz de args. Esto crea una nueva matriz (asignada a la constante numArgs) en la que todos los elementos son números en vez de cadenas. Esto significa que más tarde puede encontrar correctamente la suma de los números sumándolos.

      La segunda línea utiliza el método reduce en la constante numArgs que proporcionan una función que suma todos los elementos de la lista. Asignó la suma de todos los elementos en numArgs a la constante sum.

      A continuación, utilice el método reply en el objeto de mensaje para responder al comando del usuario con una plantilla literal, que contiene la suma de todos los argumentos que el usuario envía al bot.

      Esto concluye la implementación del comando "sum". Ahora, ejecute su bot usando el siguiente comando (en la misma carpeta que index.js):

      Ahora, puede usar el comando "! sum" en cualquier canal que pueda ver el bot y enviar mensajes.

      Imagen del bot respondiendo

      A continuación, se muestra una versión completa de la secuencia de comandos del bot index.js:

      index.js

      const Discord = require("discord.js");
      const config = require("./config.json");
      
      const client = new Discord.Client();
      
      const prefix = "!";
      
      client.on("message", function(message) {
        if (message.author.bot) return;
        if (!message.content.startsWith(prefix)) return;
      
        const commandBody = message.content.slice(prefix.length);
        const args = commandBody.split(' ');
        const command = args.shift().toLowerCase();
      
        if (command === "ping") {
          const timeTaken = Date.now() - message.createdTimestamp;
          message.reply(`Pong! This message had a latency of ${timeTaken}ms.`);
        }
      
        else if (command === "sum") {
          const numArgs = args.map(x => parseFloat(x));
          const sum = numArgs.reduce((counter, x) => counter += x);
          message.reply(`The sum of all the arguments you provided is ${sum}!`);
        }
      });
      
      client.login(config.BOT_TOKEN);
      

      En este paso, ha desarrollado aún más su bot de Discord implementando el comando sum.

      Conclusión

      Ha implementado correctamente un bot de Discord que puede manejar varios comandos de usuario y argumentos de comandos. Si desea ampliar su bot, posiblemente pueda implementar más comandos o probar más partes de la API de Discord para crear un bot de Discord potente. Puede revisar la documentación de Discord.js o la documentación de la API de Discord para ampliar sus conocimiento de la API de Discord.

      Al crear bots de Discord, siempre debe tener en cuenta los términos de servicio de la API de Discord, que describe cómo los desarrolladores deben usarla. También puede leer este conjunto de directrices sobre cómo implementar mejor un bot de Discord y proporciona consejos sobre cómo diseñar bots de Discord. Si desea obtener más información sobre Node.js consulte nuestra serie Cómo crear códigos en Node.js.



      Source link

      Comment construire un bot Discord avec Node.js


      L’auteur a choisi le Free and Open Source Fund comme récipiendaire d’un don dans le cadre du programme Write for DOnations.

      Introduction

      Discord est une application de chat qui permet à des millions d’utilisateurs à travers le monde d’échanger des messages et de s’appeler en ligne au sein de communautés appelées guildes ou serveurs. Discord fournit également une API complète que les développeurs peuvent utiliser pour créer de puissants bots Discord. Les bots peuvent effectuer diverses actions telles que l’envoi de messages aux serveurs, le DM-ing des utilisateurs, la modération des serveurs et la lecture audio dans les chats vocaux. Cela permet aux développeurs de créer des bots puissants qui comprennent des fonctionnalités avancées et complexes comme des outils de modération ou même des jeux. Par exemple, le bot utilitaire Dyno sert des millions de guildes et contient des fonctions utiles telles que la protection contre le spam, un lecteur de musique et d’autres fonctions utilitaires. Apprendre à créer des bots Discord vous permet d’implémenter de nombreuses choses, avec lesquelles des milliers de personnes pourront interagir chaque jour.

      Dans ce tutoriel, vous allez construire un bot Discord à partir de zéro, en utilisant Node.js et la bibliothèque Discord.js, qui permet aux utilisateurs d’interagir directement avec l’API Discord. Vous allez créer un profil pour un bot Discord, obtenir des jetons d’authentification pour le bot, et programmer le bot pour lui donner la capacité de traiter les commandes des utilisateurs avec des arguments.

      Conditions préalables

      Avant de commencer, vous aurez besoin des éléments suivants :

      Étape 1 — Configuration d’un bot Discord

      Au cours de cette étape, vous utiliserez l’interface graphique des développeurs Discord pour mettre en place un bot Discord et obtenir le jeton du bot, que vous passerez dans votre programme.

      Pour enregistrer un bot sur la plate-forme Discord, utilisez le tableau de bord de l’application Discord. Les développeurs peuvent y créer des applications Discord, y compris des bots Discord.

      Image du tableau de bord de l'application Discord après une première visite sur https://discord.com/developers/applications

      Pour commencer, cliquez sur New Application (Nouvelle Application). Discord vous demandera d’entrer un nom pour votre nouvelle application. Cliquez ensuite sur Create (Créer) pour créer l’application.

      Image de l'invite à créer une application, avec "Test Node.js Bot" saisi comme nom de l'application

      Note : le nom de votre application est indépendant du nom du bot, et le bot n’a pas besoin d’avoir le même nom que l’application.

      Ouvrez maintenant le tableau de bord de votre application. Pour ajouter un bot à l’application, naviguez dans l’onglet Bot de la barre de navigation, à gauche.

      Image de l'onglet bot du tableau de bord de l'application

      Cliquez sur le bouton Add Bot (Ajouter un Bot) pour ajouter un bot à l’application. Cliquez sur le bouton Yes, do it! (C’est parti !) lorsqu’il vous demande une confirmation. Vous vous retrouverez alors sur un tableau de bord contenant les détails du nom de votre bot, son jeton d’authentification et sa photo de profil.

      Tableau de bord contenant les détails de votre bot

      Vous pouvez modifier le nom ou la photo de profil de votre bot ici, sur le tableau de bord. Vous devez également copier le jeton d’authentification du bot en cliquant sur Click to Reveal Token (Cliquer pour révéler le jeton) et en copiant le jeton qui apparaît.

      Warning : ne partagez pas, ne téléchargez pas votre jeton de bot, car il permet à n’importe qui de se connecter à votre bot.

      Vous devez maintenant créer une invitation qui vous permette d’ajouter les guildes Discord de bots où vous pouvez tester le robot. Tout d’abord, naviguez vers l’onglet OAuth2 du tableau de bord de l’application. Pour créer une invitation, faites défiler l’écran vers le bas et sélectionnez bot sous scopes. Vous devez également définir des autorisations pour contrôler les actions que votre bot peut effectuer dans les guildes. Pour les besoins de ce tutoriel, sélectionnez Administrator (Administrateur), ce qui donnera à votre bot la permission d’effectuer presque toutes les actions dans les guildes. Copiez le lien à l’aide du bouton Copy (Copier).

      Onglet OAuth2, avec scope définie sur

      Ensuite, ajoutez le bot à un serveur. Suivez le lien d’invitation que vous venez de créer. Vous pouvez ajouter le bot à n’importe lequel des serveurs que vous possédez, ou pour lequel vous avez des autorisations d’administrateur, à partir du menu déroulant.

      Page suivant le lien d'invitation, permettant aux utilisateurs d'ajouter le bot aux serveurs

      Cliquez maintenant sur** Continue** (Continuer). Vérifiez que vous avez coché la case située à côté de Administrator – cela donnera au bot des autorisations d’administrateur. Ensuite, cliquez sur Authorize (Autoriser). Discord vous demandera de résoudre un CAPTCHA avant que le bot ne rejoigne le serveur. Votre bot Discord se trouvera désormais sur la liste des membres du serveur à laquelle vous l’avez ajouté, sous offline.

      Liste des membres d'un serveur Discord avec le bot nouvellement créé sous la section "offline" de la liste des membres

      Vous avez créé avec succès un robot Discord et l’avez ajouté à un serveur. Ensuite, vous allez écrire un programme pour vous connecter au bot.

      Étape 2 — Création de votre projet

      Au cours de cette étape, vous allez configurer l’environnement de codage de base dans lequel vous allez construire votre bot et vous connecter au bot par programmation.

      Tout d’abord, vous devez créer un dossier de projet et les fichiers de projet nécessaires pour le bot.

      Créez votre dossier de projet :

      Rendez-vous dans le dossier de projet que vous venez de créer :

      Ensuite, utilisez votre éditeur de texte pour créer un fichier nommé config.json, afin de stocker le jeton d’authentification de votre bot :

      Ajoutez ensuite le code suivant au fichier de configuration, en remplaçant le texte surligné par le jeton d’authentification de votre bot :

      config.json

      {
          "BOT_TOKEN": "YOUR BOT TOKEN"
      }
      

      Enregistrez et quittez le fichier.

      Ensuite, vous créerez un fichier package.json, qui stockera les détails de votre projet et des informations sur les dépendances que vous utiliserez pour le projet. Vous allez créer un fichier package.json en exécutant la commande npm suivante :

      npm vous demandera différentes informations sur votre projet. Si vous souhaitez obtenir des conseils sur la manière de remplir ces invites, vous trouverez plus d’informations dans la section Comment utiliser les modules Node.js avec npm et package.json.

      Vous allez maintenant installer le paquet discord.js que vous utiliserez pour interagir avec l’API Discord. Vous pouvez installer discord.js par le biais de npm avec la commande suivante :

      Maintenant que vous avez configuré le fichier de configuration et installé la dépendance nécessaire, vous êtes prêt à commencer à construire votre bot. Dans une application réelle, un gros bot serait réparti sur plusieurs fichiers, mais pour les besoins de ce tutoriel, le code de votre bot se trouvera dans un seul fichier.

      Tout d’abord, créez un fichier nommé index.js dans le dossier discord-bot pour le code :

      Commencez à coder le bot en demandant la dépendance discord.js et le fichier de configuration avec le jeton du bot :

      index.js

      const Discord = require("discord.js");
      const config = require("./config.json");
      

      Ensuite, ajoutez les deux lignes de code suivantes :

      index.js

      ...
      const client = new Discord.Client();
      
      client.login(config.BOT_TOKEN);
      

      Enregistrez et fermez votre fichier

      La première ligne de code crée un nouveau Discord.Client et l’attribue au client constant. Ce client permet en partie d’interagir avec l’API Discord et de vous informer des événements tels que l’arrivée de nouveaux messages. Le client, en effet, représente le bot Discord.

      La deuxième ligne de code utilise la méthode login sur le client pour se connecter au bot Discord que vous avez créé, en utilisant le jeton du fichier config.json comme mot de passe. Le jeton permet à l’API Discord de savoir à quel bot le programme est destiné et que vous avez été authentifié pour utiliser le bot.

      Maintenant, exécutez le fichier index.js en utilisant Node :

      Le statut de votre bot passera à online (en ligne) dans le serveur Discord auquel vous l’avez ajouté.

      Image du bot en ligne

      Vous avez configuré avec succès un environnement de codage et créé le code de base pour vous connecter à un bot Discord. Dans l’étape suivante, vous allez gérer les commandes utilisateur et demander à votre bot d’effectuer des actions, comme l’envoi de messages.

      Étape 3 — Traitement de votre première commande utilisateur

      Dans cette étape, vous allez créer un bot qui peut gérer les commandes de l’utilisateur. Vous commencerez par configurer votre première commande ping, qui répondra par "pong" et indiquera le temps nécessaire pour répondre à la commande.

      Tout d’abord, vous devez détecter et recevoir tout message envoyé par les utilisateurs afin de pouvoir traiter toute commande. En utilisant la méthode on sur le client Discord, Discord vous enverra une notification sur les nouveaux événements. La méthode on prend deux arguments : le nom d’un événement à attendre et une fonction à exécuter chaque fois que cet événement se produit. Avec cette méthode, vous pouvez attendre le message de l’événement – cela se produit chaque fois qu’un message est envoyé à une guilde où le bot a la permission de voir les messages. C’est pourquoi nous allons créer une fonction, qui s’exécute à chaque fois qu’un message est envoyé, pour traiter les commandes.

      Tout d’abord, ouvrez votre fichier :

      Ajoutez le code suivant à votre fichier :

      index.js

      ...
      const client = new Discord.Client();
      
      
      client.on("message", function(message) { 
                                               
      });                                      
      
      client.login(config.BOT_TOKEN);
      

      Cette fonction, qui s’exécute sur l’événement message, prend message comme paramètre. message aura la valeur d’une instance de message Discord.js, qui contient des informations sur le message envoyé et des méthodes pour aider le bot à répondre.

      Ajoutez maintenant la ligne de code suivante à votre fonction de traitement des commandes :

      index.js

      ...
      client.on("message", function(message) {
        if (message.author.bot) return;
      });
      ...
      

      Cette ligne vérifie si l’auteur du message est un bot, et si c’est le cas, arrête le traitement de la commande. C’est important car, en général, vous ne voulez pas traiter les messages des bots ou y répondre. Les bots n’ont généralement pas besoin ou ne veulent pas utiliser notre bot. Ignorer leurs messages permet donc d’économiser de la puissance de traitement et d’éviter les réponses accidentelles.

      Maintenant vous allez écrire un gestionnaire de commandes. Pour ce faire, il est bon de comprendre le format habituel d’une commande Discord. En général, la structure d’une commande Discord contient trois parties dans l’ordre suivant : un préfixe, un nom de commande et (parfois) des arguments de commande.

      Une image d'une commande Discord indiquant "! add12"

      • Préfixe : le préfixe peut être de toute nature, mais il s’agit généralement d’un morceau de ponctuation ou d’une phrase abstraite qui ne se trouverait normalement pas au début d’un message. Cela signifie que lorsque vous incluez le préfixe au début du message, le bot saura que l’intention de cette commande est qu’un bot la traite.

      • Nom de la commande : le nom de la commande que l’utilisateur veut utiliser. Cela signifie que le bot peut prendre en charge plusieurs commandes avec des fonctionnalités différentes et permettre aux utilisateurs de choisir entre elles en fournissant un nom de commande différent.

      • Arguments : parfois, si la commande nécessite ou utilise des informations supplémentaires de la part de l’utilisateur, celui-ci peut fournir des arguments après le nom de la commande, chaque argument étant séparé par un espace.

      Note : ll n’y a pas de structure de commandes imposée et les bots peuvent traiter les commandes comme ils le souhaitent, mais la structure présentée ici est une structure efficace, que la grande majorité des bots utilise.

      Pour commencer à créer un analyseur de commandes qui gère ce format, ajoutez les lignes de code suivantes à la fonction de traitement des messages :

      index.js

      ...
      const prefix = "!";
      
      client.on("message", function(message) {
        if (message.author.bot) return;
        if (!message.content.startsWith(prefix)) return;
      });
      ...
      

      Vous ajoutez la première ligne de code pour attribuer la valeur "!" au prefix de la constante, que vous utiliserez comme préfixe du bot.

      La deuxième ligne de code que vous ajoutez vérifie si le contenu du message que le bot traite commence par le préfixe que vous avez défini, et si ce n’est pas le cas, elle empêche la poursuite du traitement du message.

      Vous devez maintenant convertir le reste du message en un nom de commande et en arguments qui peuvent exister dans le message. Ajoutez les lignes surlignées suivantes :

      index.js

      ...
      client.on("message", function(message) {
        if (message.author.bot) return;
        if (!message.content.startsWith(prefix)) return;
      
        const commandBody = message.content.slice(prefix.length);
        const args = commandBody.split(' ');
        const command = args.shift().toLowerCase();
      });
      ...
      

      Ici, vous utilisez la première ligne pour supprimer le préfixe du contenu du message et attribuer le résultat à la constante commandBody. Cette action est nécessaire, car vous ne voulez pas inclure le préfixe dans le nom de la commande analysée.

      La deuxième ligne prend le message dont le préfixe a été supprimé et utilise la méthode split, avec une espace comme séparateur. Cette méthode entraîne la division du message en une série de sous-chaînes de caractères, ce qui fait qu’elle se divise partout où il y a un espace. Cela donne lieu à un tableau contenant le nom de la commande et les arguments, s’ils sont inclus dans le message. Vous assignez ce tableau à la constante args.

      La troisième ligne supprime le premier élément du tableau args (qui sera le nom de la commande fournie), le convertit en minuscules, puis l’affecte à la constante command. Cela vous permet d’isoler le nom de la commande et de ne laisser que les arguments dans le tableau. Vous utilisez également la méthode toLowerCase car les commandes sont généralement insensibles à la casse dans les bots Discord.

      Vous avez terminé la construction d’un analyseur de commandes, l’implémentation d’un préfixe requis et l’obtention du nom de la commande et des arguments des messages. Vous allez maintenant implémenter et créer le code pour les commandes spécifiques.

      Ajoutez le code suivant pour commencer à implémenter la commande ping :

      index.js

      ...
        const args = commandBody.split(' ');
        const command = args.shift().toLowerCase();
      
        if (command === "ping") {
                                 
        }                        
      });
      ...
      

      Cet énoncé if vérifie si le nom de commande que vous avez analysé (attribué à la constante command) correspond à "ping". Si c’est le cas, cela indique que l’utilisateur veut utiliser la commande "ping". Vous allez imbriquer le code de la commande spécifique à l’intérieur du bloc if. Vous allez répéter ce schéma pour les autres commandes que vous souhaitez implémenter.

      Maintenant, vous pouvez implémenter le code pour la commande "ping" :

      index.js

      ...
        if (command === "ping") {
          const timeTaken = Date.now() - message.createdTimestamp;
          message.reply(`Pong! This message had a latency of ${timeTaken}ms.`);
        }
      ...
      

      Enregistrez et fermez votre fichier

      Vous ajoutez le bloc de commande "ping" qui calcule la différence entre l’heure actuelle – trouvée en utilisant la méthode now sur l’objet Date – et l’heure de création du message en millisecondes. Cela permet de calculer le temps de traitement du message et le "ping" du bot.

      La deuxième ligne répond à la commande de l’utilisateur en utilisant la méthode reply sur la constante message. La méthode reply envoie un ping à l’utilisateur qui a invoqué la commande (ce qui avertit l’utilisateur et met en évidence le message pour l’utilisateur spécifié), suivi du contenu fourni comme premier argument de la méthode. Vous fournissez un modèle littéral contenant un message et le ping calculé comme réponse que la méthode reply utilisera.

      Ceci conclut l’implémentation de la commande "ping".

      Exécutez votre bot en utilisant la commande suivante (dans le même dossier que index.js) :

      Vous pouvez maintenant utiliser la commande "! ping" dans n’importe quel canal que le robot peut visualiser et dans lequel il peut envoyer un message, ce qui donne lieu à une réponse.

      Image du bot répondant dans Discord à

      Vous avez créé avec succès un bot capable de gérer les commandes des utilisateurs et vous avez implémenté votre première commande. Dans l’étape suivante, vous continuerez à développer votre bot en implémentant une commande sum.

      Étape 4 — Implémentation de la commande sum

      Vous allez maintenant étendre votre programme en implémentant la commande "! sum". La commande prendra un nombre quelconque d’arguments et les additionnera, avant de renvoyer la somme de tous les arguments à l’utilisateur.

      Si votre bot Discord fonctionne toujours, vous pouvez arrêter son processus avec CTRL + C.

      Ouvrez à nouveau votre fichier index.js :

      Pour commencer à implémenter la commande "!sum” vous utiliserez le bloc else-if. Après avoir vérifié le nom de la commande ping, il vérifiera si le nom de la commande est égal à "sum". Nous utilisons un bloc “else-if” car une seule commande sera traitée à la fois, donc si le programme correspond au nom de commande "ping", il n’a pas besoin de vérifier la commande "sum". Ajoutez les lignes surlignées suivantes à votre fichier :

      index.js

      ...
        if (command === "ping") {
          const timeTaken = Date.now() - message.createdTimestamp;
          message.reply(`Ping! This message had a latency of ${timeTaken}ms.`);
        }
      
        else if (command === "sum") {
                                     
        }                            
      });
      ...
      

      Vous pouvez commencer à implémenter le code pour la commande "sum". Le code de la commande "sum" ira dans le bloc else-if que vous venez de créer. Maintenant, ajoutez le code suivant :

      index.js

      ...
        else if (command === "sum") {
          const numArgs = args.map(x => parseFloat(x));
          const sum = numArgs.reduce((counter, x) => counter += x);
          message.reply(`The sum of all the arguments you provided is ${sum}!`);
        }
      ...
      

      Vous utilisez la méthode map sur la liste des arguments pour créer une nouvelle liste en utilisant la fonction parseFloat sur chaque élément du tableau args. Cela crée un nouveau tableau (attribué à la constante numArgs) dans lequel tous les éléments sont des nombres au lieu de chaînes de caractères. Cela signifie que vous pouvez ensuite trouver la somme des nombres en les additionnant.

      La deuxième ligne utilise la méthode reduce sur la constante numArgs, fournissant une fonction qui totalise tous les éléments de la liste. Vous attribuez la somme de tous les éléments de numArgs à la constante sum.

      Vous utilisez ensuite la méthode reply sur l’objet du message pour répondre à la commande de l’utilisateur avec un modèle littéral, qui contient la somme de tous les arguments que l’utilisateur envoie au bot.

      Ceci conclut l’implémentation de la commande "sum". Maintenant, exécutez le bot en utilisant la commande suivante (dans le même dossier que index.js) :

      Vous pouvez maintenant utiliser la commande "! sum" dans n’importe quel canal que le bot peut visualiser et dans lequel il peut envoyer des messages.

      Image du bot répondant

      Ce qui suit est une version complète du script du bot index.js :

      index.js

      const Discord = require("discord.js");
      const config = require("./config.json");
      
      const client = new Discord.Client();
      
      const prefix = "!";
      
      client.on("message", function(message) {
        if (message.author.bot) return;
        if (!message.content.startsWith(prefix)) return;
      
        const commandBody = message.content.slice(prefix.length);
        const args = commandBody.split(' ');
        const command = args.shift().toLowerCase();
      
        if (command === "ping") {
          const timeTaken = Date.now() - message.createdTimestamp;
          message.reply(`Pong! This message had a latency of ${timeTaken}ms.`);
        }
      
        else if (command === "sum") {
          const numArgs = args.map(x => parseFloat(x));
          const sum = numArgs.reduce((counter, x) => counter += x);
          message.reply(`The sum of all the arguments you provided is ${sum}!`);
        }
      });
      
      client.login(config.BOT_TOKEN);
      

      Au cours de cette étape, vous avez développé votre bot Discord en implémentant la commande sum.

      Conclusion

      Vous avez implémenté avec succès un bot Discord qui peut gérer plusieurs commandes utilisateur et arguments différents. Si vous souhaitez développer votre bot, vous pouvez implémenter plus de commandes ou essayer d’autres parties de l’API Discord pour créer un puissant bot Discord. Vous pouvez consulter la documentation de Discord.js ou celle de l’API Discord pour approfondir vos connaissances de l’API Discord.

      Lorsque vous créez des bots Discord, vous devez toujours garder à l’esprit les conditions d’utilisation de l’API Discord, qui décrivent comment les développeurs doivent utiliser l’API Discord. Vous pouvez également lire cet ensemble de lignes directrices qui indique la meilleure façon d’implémenter un bot Discord et fournit des conseils sur la façon de concevoir des bots Discord. Si vous souhaitez en savoir plus sur Node.js, consultez notre série Comment coder en Node.js.



      Source link