Fermer

octobre 30, 2019

Comment construire votre premier bot Discord avec Node.js –


De nos jours, les robots sont utilisés pour automatiser diverses tâches. Depuis la publication des appareils Alexa d’Amazon, le battage publicitaire entourant les robots d’automatisation a commencé à prendre de l’ampleur. Outre Alexa, d'autres outils de communication tels que Discord et Telegram proposent des API pour développer des robots personnalisés.

Cet article se concentrera uniquement sur la création de votre premier bot avec l'API Discord exposée. Peut-être que le bot Discord le plus connu est le Music Bot. Le bot musical vous permet de saisir un nom de chanson et attache un nouvel utilisateur à votre chaîne qui joue la chanson demandée. C'est un bot couramment utilisé par les jeunes sur les serveurs de jeux ou de streaming.

Commençons par créer un bot Discord personnalisé.

À propos, vous pouvez rejoindre la communauté Discord de SitePoint avec ce lien – venez discuter de la technologie avec nous et soyez averti de nos nouveaux articles.

Conditions préalables

  • Node.js v10 ou supérieur installé (connaissances de base)
  • un compte Discord et un client Discord
  • connaissances de base de l'utilisation un terminal

Étape 1: Configurer le serveur de test

Tout d’abord, nous avons besoin d’un serveur de test sur lequel nous pourrons plus tard tester notre bot Discord. Nous pouvons créer un nouveau serveur en cliquant sur l'icône plus dans le coin inférieur gauche.

 Cliquez sur Créer un serveur

Une fenêtre contextuelle vous demandant si vous souhaitez rejoindre un serveur ou créer un nouveau. Bien sûr, nous voulons créer un nouveau serveur.

 Sélectionnez Créer un serveur

Ensuite, nous devons entrer le nom de notre serveur. Pour simplifier les choses, j’ai nommé le serveur discord_playground . Si vous le souhaitez, vous pouvez modifier l'emplacement du serveur en fonction de votre emplacement pour obtenir un meilleur ping.

 nom du serveur

Si tout s'est bien passé, vous devriez voir votre serveur nouvellement créé.

 nouveau serveur

Étape 2: génération du jeton d'authentification

Lorsque nous souhaitons contrôler notre bot via le code, nous devons d'abord enregistrer le bot sous notre compte Discord.

Pour enregistrer le bot, Allez sur le Discord Developers Portal et connectez-vous avec votre compte.

Une fois connecté, vous devriez pouvoir voir le tableau de bord. Créons une nouvelle application en cliquant sur le bouton Nouvelle application .

 tableau de bord du développeur

Vous verrez ensuite une fenêtre contextuelle vous demandant de saisir un nom pour ton application. Appelons notre bot my-greeter-bot . En cliquant sur le bouton Créer Discord créera une application API.

 créer une application

Une fois l’application créée, vous verrez l’aperçu des nouvelles applications. application my-greeter-bot . Vous verrez des informations comme un identifiant client et un secret client. Ce secret sera utilisé plus tard comme jeton d'autorisation.

 overview greeter bot

Cliquez maintenant sur l'option de menu Bot dans le menu Paramètres . . Discord construira notre application my-greeter-bot et y ajoutera un utilisateur de bot.

 add bot

Une fois le bot construit, vous obtenez un aperçu des éléments suivants: votre bot personnalisé. Jetez un coup d'œil à la section Jeton . Copiez ce jeton d'autorisation et écrivez-le quelque part, car nous en aurons besoin ultérieurement pour nous connecter à notre utilisateur de bot.

 Présentation de l'onglet de bot

Étape 3: Définissez les autorisations et ajoutez un bot au serveur

Troisièmement. , nous voulons définir les autorisations du bot et l’ajouter à notre serveur Discord.

Accédez à la section OAuth2 du menu Paramètres . Ici, nous pouvons définir la portée de notre bot. Comme nous souhaitons simplement activer un simple bot, nous sélectionnons l'option bot .

Vous remarquerez peut-être que l'URL d'autorisation ci-dessous a été modifiée. Cependant, la section permissions = 0 indique que nous n'avons pas encore défini d'autorisations.

 Portée de OAuth2

Si vous faites défiler l'écran plus bas, vous verrez le . ] section autorisations de bot . Nous voulons que le bot puisse envoyer des messages et lire l'historique des messages. Nous avons besoin de l'autorisation Lire l'historique des messages pour pouvoir détecter les demandes des utilisateurs.

Lorsque vous sélectionnez les deux options, notez que le numéro a changé pour le paramètre permissions dans l'URL d'autorisation.

 Ajouter des autorisations

Enfin, copiez cette URL et collez-la dans votre navigateur Web préféré. Vous trouverez une vue d'ensemble vous demandant à quel serveur vous souhaitez ajouter le bot. Nous allons sélectionner notre discord_playground nouvellement créé.

Cliquez sur le bouton Autoriser pour ajouter le bot à notre serveur.

 Ajouter un bot au serveur

Si vous parvenez à ajouter le bot sur votre serveur, l'écran de réussite suivant apparaît:

 Réussite, ajoutez le bot

Si vous souhaitez vérifier que votre bot a bien été ajouté, accédez au canal general . Vous devriez voir un message similaire indiquant que le bot a rejoint le canal.

 succès en ajoutant le canal de bot

Le succès!

Étape 4: Configuration du projet

Enfin, mettons en place le projet. Vous pouvez trouver le projet de base sur GitHub . Veuillez cloner le référentiel localement sur votre machine à l’aide de clone git https://github.com/michielmulders/discord-bot-sitepoint.git.[19659003¹Leprojetdépenddedeuxdépendances dotenv et discord.js . La première dépendance nous permet d'utiliser un fichier .env contenant le jeton de bot que nous avons écrit. Il est évident que nous avons besoin de la deuxième dépendance, discord.js pour développer le bot Discord

. Pour installer les deux dépendances, veuillez exécuter npm install dans le dossier du projet. 19659003] Enfin, pour terminer l'installation, créez un fichier .env à la racine du projet. Ajoutez une variable d’environnement appelée TOKEN au fichier comme suit:

 TOKEN = my-unique-bot-token

Étape 5: exploration de Discord.js

Jetons un coup d’oeil au fichier index.js situé à la racine du projet:

 require ('dotenv'). Config () ;
const Discord = require ('discord.js');
const bot = new Discord.Client ();

const TOKEN = process.env.TOKEN;

bot.login (TOKEN);

Nous chargeons d’abord les variables d’environnement que nous avons définies en demandant la configuration à partir du fichier environment .env . Cela nous permet d’utiliser la variable TOKEN que nous avons définie par le processus process.env.ToKEN . La dernière ligne de l'extrait ci-dessus montre comment nous transmettons le jeton à la fonction de connexion afin d'accéder au bot que nous avons créé.

La variable bot est en fait notre client Discord via lequel nous Je vais interagir.

Ecoute de l'événement «prêt»

Ensuite, nous pouvons écouter les événements. Tout d’abord, nous écoutons un événement ready . L’événement ready est déclenché une fois que nous sommes connectés au bot:

 bot.on ('ready', () => {
    console.info (`Connecté en tant que $ {bot.user.tag}!`);
});

Si vous avez utilisé le bon TOKEN pour vous connecter au bot, votre terminal doit écrire le nom de votre bot bot.user.tag .

Vous pouvez démarrez le bot en exécutant simplement node index.js dans votre terminal. Assurez-vous que vous exécutez cette commande à la racine de votre projet.

Si le bot est connecté avec succès, le nom de votre bot devrait apparaître sur le terminal.

 Bot connected

Écouter un événement «message»

Outre l'événement ready le client Discord vous permet d'écouter un événement message . Cela signifie que le bot peut lire n'importe quel message envoyé à un canal. Pour revenir à la section permissions, c'est la raison exacte pour laquelle nous devons donner au bot la permission de lire l'historique des messages.

 bot.on ('message', msg => {
    si (msg.content === 'ping') {
        msg.reply ('pong');
        msg.channel.send ('pong');
    }
});

Si nous explorons le code un peu plus loin, vous verrez que nous cherchons un message avec le contenu ping . Si nous recevons un message contenant uniquement ping le bot répond avec pong . Après cela, nous utilisons msg.channel.send pour envoyer à nouveau pong dans le canal.

Remarquez la différence entre les deux commandes:

  • msg.reply : balise l'utilisateur initial qui a envoyé le message
  • msg.channel.send : envoie un message au canal sans étiqueter qui que ce soit.

Essayez de lancer le bot avec node index.js et envoyez un message ping au canal général . Vérifiez si vous voyez le même résultat.

 Message Ping

Recherchez les utilisateurs étiquetés

Pour ajouter une nouvelle commande, nous devons étendre la clause si est associée à un else… if :

 if (msg.content === 'ping') {
        msg.reply ('pong');
        msg.channel.send ('pong');

} else if (msg.content.startsWith ('! kick')) {
    if (msg.mentions.users.size) {
        const taggedUser = msg.mentions.users.first ();
        msg.channel.send (`Vous vouliez lancer: $ {taggedUser.username}`);
    } autre {
        msg.reply ('Merci de marquer un utilisateur valide!');
    }
}

Supposons que nous voulions donner un coup de pied à quelqu'un en envoyant un message du type ! Kick @username . Nous cherchons donc d’abord ! Kick dans le contenu du message. Si nous trouvons un message commençant par ! Kick nous pouvons vérifier si des utilisateurs ont été marqués dans le message avec la propriété msg.mentions.users .

S'il y a des utilisateurs marqués , nous pouvons sélectionner le premier utilisateur mentionné avec msg.mentions.users.first () . Nous répondons ensuite au canal avec le nom d'utilisateur de l'utilisateur dans le message.

 Utilisateur du kick

Étape 6: Le problème avec le else… if Chain

Ensuite, discutons le problème avec toutes ces autres… si déclarations. Si vous ne définissez que quelques commandes à écouter dans l'événement message, le code est assez lisible.

Cependant, lorsque nous décidons de construire un projet de cette manière, nous nous retrouvons avec une chaîne de sinon… si déclarations. Voici une petite liste de raisons pour lesquelles vous ne devriez pas utiliser sinon… si utilise une chaîne pour tout ce qui n'est pas un petit projet:

  • il est plus facile d'être victime du code spaghetti
  • le code est difficile à lire
  • il n'est pas facile de déboguer
  • il est difficile d'organiser le code
  • il n'est pas facile à maintenir à mesure que le code se développe

Par conséquent, examinons le modèle de commande que nous pouvons utiliser.

un gestionnaire de commandes

Un gestionnaire de commandes est une approche prise en charge par le paquet discord.js . Avant de continuer, jetez un œil à la branche advanced avec git checkout advanced . Cette branche contient l’implémentation du gestionnaire de commandes.

Dossier de commandes

Voyons d’abord le dossier de commandes. Ce dossier contient un fichier index.js qui exporte toutes les commandes que nous définirons. Pour simplifier les choses, nous ne définirons qu’une commande, ping :

 module.exports = {
    Ping: require ('./ ping'),
};

Examinons maintenant l'implémentation de la commande ping qui exporte essentiellement un objet contenant:

  • nom : un nom de commande.
  • description : Il est recommandé d’ajouter une description à chaque commande.
  • execute : une fonction qui accepte les entrées msg et args . Cette fonction a la même logique que celle de notre chaîne sinon… if .
 module.exports = {
    nom: 'ping',
    description: 'Ping!',
    execute (msg, args) {
        msg.reply ('pong');
        msg.channel.send ('pong');
    },
};

Importation de commandes

Pour continuer, importons les commandes dans le fichier index.js . Remarquez que nous définissons une collection de commandes sur le bot Discord. Nous bouclons sur toutes les commandes et les ajoutons une à une à la collection de commandes.

La fonction bot.commands.set accepte le nom de la commande et l'objet de commande entier:

 const Discord = require ('discord.js');
const bot = new Discord.Client ();
bot.commandes = new Discord.Collection ();
const botCommands = require ('commandes /.');

Object.keys (botCommands) .map (key => {
    bot.commands.set (botCommands [key] .name, botCommands [key]);
});

Après cela, nous devons supprimer notre chaîne else… if et la remplacer par un code dynamique afin de trouver la bonne commande à appeler:

 bot.on ('message', msg => {
    const args = msg.content.split (/ + /);
    const commande = args.shift (). toLowerCase ();
    console.info (`Commande appelée: $ {commande}`);

    if (! bot.commands.has (commande)) return;

    essayer {
        bot.commandes.get (commande) .execute (msg, args);
    } catch (error) {
        console.error (erreur);
        msg.reply ('une erreur s'est produite lors de la tentative d'exécution de cette commande!');
    }
});

Nous essayons d'abord de scinder le contenu du message par des espaces en utilisant .split (/ + /) . Nous supposons que le premier élément de ce tableau args est notre commande. Pour vérifier si la commande existe dans notre collection, la collection expose une fonction has () [)qui renvoie simplement true ou false. Si la commande n'existe pas, nous renvoyons une réponse vide.

Toutefois, si la commande existe, nous utilisons la fonction get () pour extraire la commande correcte et l'exécuter avec les paramètres d'entrée msg et args .

Il s'agit d'un moyen facile à lire et dynamique d'appeler des commandes sans écrire de code spaghetti. Cela vous permet d’adapter votre projet à plusieurs centaines de commandes si nécessaire.

Encore une fois, si vous souhaitez tester la nouvelle version de notre code, veillez à vérifier la branche advanced avec . git checkout advanced . Ensuite, installez toutes les dépendances avec npm install et démarrez le bot avec node index.js .

Conclusion

L'installation et la configuration d'un nouveau bot Discord peuvent sembler fastidieuses première. Cependant, l’API offerte par le paquet discord.js est simple et le site Web Discord fournit d’excellents exemples .

Ce tutoriel ne couvrant que deux autorisations, il ya beaucoup plus à faire. a trouvé. Pour en savoir plus sur les autorisations, consultez le site Web Discordjs.guide .

Bonne chance pour la construction de votre premier bot Discord!




Source link