Construire un robot Discord avec Discord.js
Les plates-formes de communication d'équipe deviennent de jour en jour populaires, car de plus en plus de personnes travaillent à domicile. Slack et Discord sont deux des plates-formes de communication d'équipe les plus populaires. Bien que Discord soit axé sur les joueurs, certaines fonctionnalités, telles que la possibilité d'ajouter jusqu'à 50 membres dans la salle d'appel vocal, en font une excellente alternative à Slack. L'un des avantages les plus importants de l'utilisation d'une telle plate-forme est que de nombreuses tâches peuvent être automatisées à l'aide de bots.
Dans cet article, nous allons créer un bot à partir de zéro en utilisant JavaScript et avec l'aide de Discord.js. Nous couvrirons le processus, de la création du bot à son déploiement dans le cloud. Avant de créer notre bot, notons les fonctionnalités dont aura besoin notre bot:
- Partagez des blagues aléatoires à partir d'un tableau de blagues.
- Ajoutez et supprimez des rôles d'utilisateur en sélectionnant emoji.
- Partagez des tweets d'un compte particulier vers
Comme le module Discord.js est basé sur Node.js, je suppose que vous êtes un peu familier avec Node.js et npm. La connaissance de JavaScript est indispensable pour cet article.
Maintenant que nous connaissons les conditions préalables et notre objectif, commençons. Et si vous voulez cloner et explorer le code tout de suite, vous pouvez avec le dépôt GitHub .
Étapes à suivre
Nous allons construire le bot en suivant quelques étapes.
Tout d'abord, nous allons créer un serveur Discord . Un serveur Discord est comme un groupe dans lequel vous pouvez attribuer divers sujets à différents canaux, très similaire à un serveur Slack. Une différence majeure entre Slack et Discord est que Slack nécessite des informations de connexion différentes pour accéder à différents serveurs, alors que dans Discord, vous pouvez accéder à tous les serveurs dont vous faites partie avec une seule authentification.
La raison pour laquelle nous devons créer un serveur est-ce que, sans privilèges d'administrateur pour un serveur, nous ne pourrons pas ajouter un bot au serveur. Une fois notre serveur créé, nous ajouterons le bot au serveur et obtiendrons le jeton d'accès depuis le portail des développeurs de Discord. Ce jeton nous permet de communiquer avec l'API Discord. Discord fournit une API ouverte officielle avec laquelle nous pouvons interagir. L'API peut être utilisée pour tout, du traitement des demandes de bots à l'intégration d'OAuth. L'API prend en charge tout, d'un bot à serveur unique à un bot pouvant être intégré sur des centaines de serveurs. Il est très puissant et peut être implémenté de nombreuses façons.
La bibliothèque Discord.js nous aidera à communiquer avec l'API Discord en utilisant le jeton d'accès . Toutes les fonctions seront basées sur l'API Discord. Ensuite, nous pouvons commencer à coder notre bot. Nous commencerons par écrire de petits morceaux de code qui nous présenteront l'API Discord et la bibliothèque Discord.js. Nous comprendrons alors le concept de partiels dans Discord.js. Une fois que nous aurons compris les partiels, nous ajouterons ce que l'on appelle un système de "rôle de réaction" au bot. Cela fait, nous saurons également comment communiquer avec Twitter en utilisant un package npm appelé twit
. Ce package npm nous aidera à intégrer la fonctionnalité de transfert de tweet Twitter. Enfin, nous allons le déployer sur le cloud en utilisant Heroku.
Maintenant que nous savons comment nous allons construire notre bot, commençons à travailler dessus.
Construire un serveur Discord
La première chose à faire faire est créer un serveur Discord . Sans serveur avec des privilèges d'administrateur, nous ne pourrons pas intégrer le bot.
La création d'un serveur Discord est facile et Discord fournit désormais des modèles, ce qui le rend encore plus facile. Suivez les étapes ci-dessous et votre serveur Discord sera prêt. Tout d'abord, nous choisirons comment nous allons accéder au portail Discord. Nous pouvons utiliser la version Web ou l'application. Les deux fonctionnent de la même manière. Nous utiliserons la version Web pour ce didacticiel.
Si vous lisez cet article, je suppose que vous possédez déjà un compte Discord. Sinon, créez simplement un compte comme vous le feriez sur n'importe quel autre site Web. Cliquez sur le bouton «Connexion» en haut à droite et connectez-vous si vous avez un compte, ou cliquez sur le bouton «S'inscrire». Remplissez le formulaire simple, remplissez le Captcha et vous aurez créé un compte avec succès. Après avoir ouvert l'application ou le site Web Discord, cliquez sur l'icône plus sur le côté gauche, où se trouve la liste des serveurs. Lorsque vous cliquez dessus, vous serez invité à choisir un modèle ou à créer le vôtre.
Nous choisirons l'option «Créer moi-même». Passons à la question suivante. Nous appellerons notre serveur Discord "Smashing Example". Vous pouvez également fournir une photo pour votre serveur. Cliquez sur le bouton «Créer» pour créer votre serveur.
Enregistrement du bot avec Discord
Avant de coder le bot, nous devons obtenir un jeton fourni par Discord . Ce jeton établira une connexion de notre code à Discord. Pour obtenir le jeton, nous devons enregistrer notre bot sur notre serveur. Pour enregistrer le bot, nous devons visiter le portail des développeurs de Discord . Si vous créez une application Discord pour la première fois, vous y trouverez une liste vide. Pour enregistrer notre application, cliquez sur le lien «Nouvelle application» dans le coin supérieur droit. Donnez un nom à votre application et cliquez sur le bouton «Créer». Nous nommerons notre application «Smashing App».
Le nouveau menu nous offre quelques options. Sur le côté droit se trouve une option intitulée «Bot». Cliquez dessus et sélectionnez "Ajouter un robot". Cliquez sur la confirmation, modifiez le nom du bot si vous le souhaitez, enregistrez les modifications et copiez le jeton reçu depuis cette page. Notre bot est maintenant enregistré avec Discord. Nous pouvons commencer à ajouter des fonctionnalités et à coder le bot.
Construire le bot
Qu'est-ce que Discord.js?
Discord.js se définit comme ceci:
Discord.js est un nœud puissant. js qui vous permet d'interagir très facilement avec l'API Discord. Il adopte une approche beaucoup plus orientée objet que la plupart des autres bibliothèques JS Discord, ce qui rend le code de votre bot nettement plus ordonné et plus facile à comprendre.
Discord.js facilite donc les interactions avec l'API Discord. Il a une couverture à 100% avec l'API Discord officielle.
Initialisation du bot
Ouvrez votre éditeur de texte préféré et créez un dossier dans lequel tous vos fichiers seront enregistrés. Ouvrez l'interface de ligne de commande (CLI), cd
dans le dossier et initialisez le dossier avec npm: npm init -y
.
Nous aurons besoin de deux paquets pour commencer à construire le bot. Le premier est dotenv, et le second, évidemment, est le module Discord.js Node.js. Si vous connaissez Node.js, vous serez familiarisé avec le package dotenv. Il charge les variables d'environnement d'un fichier nommé .env
à process.env
.
Installez ces deux en utilisant npm i dotenv discord.js
.
] Une fois l'installation terminée, créez deux fichiers dans votre dossier racine. Nommez l'un des fichiers .env
. Nommez l'autre fichier principal comme vous le souhaitez. Je vais l'appeler app.js
. La structure des dossiers ressemblera à ceci:
│ .env
│ app.js
│ package-lock.json
│ package.json
└─── node_modules
Nous stockerons les jetons et autres informations sensibles dans le fichier .env
et le code qui produit les résultats dans le fichier app.js
.
Ouvrez le .env
et créez une nouvelle variable. Appelons la variable BOT_TOKEN
pour cet exemple. Collez votre jeton dans ce fichier. Le fichier .env
ressemblera à ceci maintenant:
BOT_TOKEN = ODAxNzE1NTA2Njc1NDQ5ODY3.YAktvw.xxxxxxxxxxxxxxxxxxxxxxxx
Nous pouvons commencer à travailler sur le fichier app.js
. La première chose à faire est d'exiger les modules que nous avons installés.
const Discord = require ('discord.js');
require ('dotenv'). config ();
Le module dotenv
est initialisé en utilisant la méthode config ()
. Nous pouvons passer des paramètres à la méthode config ()
. Mais comme il s’agit d’une utilisation très simple du module dotenv, nous n’avons besoin d’aucune fonction spéciale.
Pour commencer à utiliser le module Discord.js, nous devons initialiser un constructeur. Ceci est montré dans la documentation:
const client = new Discord.Client ();
Le module Discord.js fournit une méthode nommée client.on
. La méthode client.on
écoute divers événements. La bibliothèque Discord.js est basée sur les événements ce qui signifie que chaque fois qu'un événement est émis par Discord, la fonctionnalité attachée à cet événement sera invoquée.
Le premier événement que nous écouterons est le prêt
événement. Cette méthode se déclenchera lorsque la connexion avec l'API Discord sera prête. Dans cette méthode, nous pouvons transmettre des fonctions qui seront exécutées lorsqu'une connexion est établie entre l'API Discord et notre application. Passons une instruction console.log
dans cette méthode, afin que nous puissions savoir si une connexion est établie. La méthode client.on
avec l'événement ready
ressemblera à ceci:
client.on ('ready', () => {
console.log ('Bot est prêt');
});
Mais cela n'établit pas de connexion avec l'API car nous ne nous sommes pas connectés au bot avec le serveur Discord. Pour activer cela, le module Discord.js fournit une méthode login
. En utilisant la méthode login
disponible sur le client et en transmettant le jeton dans cette méthode, nous pouvons nous connecter à l'application avec le serveur Discord.
client.login (process.env.BOT_TOKEN)
Si vous démarrez l'application maintenant – avec node app.js
ou, si vous utilisez nodemon, avec nodemon app.js
– vous pourrez voir la console message que vous avez défini. Notre bot s'est connecté avec succès au serveur Discord maintenant. Nous pouvons commencer à expérimenter certaines fonctionnalités.
Commençons par obtenir le contenu du message en fonction du code.
L'événement message
L'événement
L'événement message
écoute certains un message. En utilisant la méthode reply
nous pouvons programmer le bot pour qu'il réponde en fonction du message de l'utilisateur.
client.on ('message', (msg) => {
if (msg.content === 'Bonjour') msg.reply ('Salut');
});
Cet exemple de code répondra par un «Salut» chaque fois qu'un message «Bonjour» est reçu. Mais pour que cela fonctionne, nous devons connecter le bot à un serveur.
Connecter le bot à un serveur Discord
Jusqu'à présent, le bot n'est connecté à aucun serveur. Pour vous connecter à notre serveur ( Smashing Example ), visitez le portail des développeurs de Discord . Cliquez sur le nom de l'application que nous avons créée précédemment dans ce tutoriel (dans notre cas, «Smashing App»). Sélectionnez l'application et cliquez sur l'option «OAuth2» dans le menu. Vous trouverez un groupe nommé "Scopes". Cochez la case «bot» et copiez l'URL générée.
Visitez cette URL dans un nouveau , choisissez votre serveur et cliquez sur «Autoriser». Terminez le Captcha, et notre bot sera maintenant connecté au serveur que nous avons choisi.
Si vous visitez le serveur Discord maintenant, vous verrez qu'une notification a déjà été envoyée par Discord, et le bot apparaît maintenant également dans la liste des membres sur le côté droit.
Ajout de fonctionnalités au bot
Maintenant que notre bot est connecté au serveur, si vous envoyez un «Bonjour» au serveur, le bot répondra par un «Salut ». Ceci est juste une introduction à l'API Discord. Le vrai plaisir est sur le point de commencer.
Pour nous familiariser un peu plus avec le module Discord.js, ajoutons une fonctionnalité qui envoie une blague chaque fois qu'une commande particulière est reçue. C'est similaire à ce que nous venons de faire.
Ajout d'une fonction de blague aléatoire au bot
Pour rendre cette partie plus claire et plus facile à comprendre, nous n'allons pas utiliser d'API. Les blagues que notre bot retournera seront un simple tableau. Un nombre aléatoire sera généré à chaque fois dans la plage du tableau, et cet emplacement spécifique du tableau sera accessible pour renvoyer une blague.
Au cas où vous auriez déjà utilisé une fonctionnalité fournie par un bot dans Discord, vous pourriez avoir remarqué qu'un certain caractère spécial distingue les messages normaux des commandes spéciales. Je vais utiliser un ?
devant nos commandes pour leur donner un aspect différent des messages normaux. Donc, notre commande blague sera ? Joke
.
Nous allons créer un tableau nommé blokes
dans notre fichier app.js
. La façon dont nous obtiendrons une blague aléatoire du tableau consiste à utiliser cette formule:
blokes [Math.floor(Math.random() * jokes.length)]
La formule Math.random () * jokes.length
générera un nombre aléatoire dans la plage du tableau. La méthode Math.floor
supprimera le nombre généré.
Si vous console.log ()
ceci, Math.floor (Math.random () * jokes.length)
vous aurez une meilleure compréhension. Finalement, blokes []
nous donnera une blague aléatoire du tableau blokes
.
Vous avez peut-être remarqué que notre premier code a été utilisé pour répondre à notre message. Mais nous ne voulons pas obtenir de réponse ici. Nous voulons plutôt faire passer une blague sous forme de message, sans marquer personne. Pour cela, le module Discord.js dispose d'une méthode nommée channel.send ()
. En utilisant cette méthode, nous pouvons envoyer des messages au canal où la commande a été appelée. Ainsi, le code complet jusqu'à présent ressemble à ceci:
const Discord = require ('discord.js');
require ('dotenv'). config ();
client const = nouveau Discord.Client ();
client.login (process.env.BOT_TOKEN);
client.on ('ready', () => console.log ('Le Bot est prêt!'));
// Ajout de la fonction de blagues
// Blagues de dcslsoftware.com/20-one-liners-only-software-developers-understand/
// www.journaldev.com/240/my-25-favorite-programming-quotes-that-are-funny-too
blagues const = [
'I went to a street where the houses were numbered 8k, 16k, 32k, 64k, 128k, 256k and 512k. It was a trip down Memory Lane.',
'“Debugging” is like being the detective in a crime drama where you are also the murderer.',
'The best thing about a Boolean is that even if you are wrong, you are only off by a bit.',
'A programmer puts two glasses on his bedside table before going to sleep. A full one, in case he gets thirsty, and an empty one, in case he doesn’t.',
'If you listen to a UNIX shell, can you hear the C?',
'Why do Java programmers have to wear glasses? Because they don’t C#.',
'What sits on your shoulder and says “Pieces of 7! Pieces of 7!”? A Parroty Error.',
'When Apple employees die, does their life HTML5 in front of their eyes?',
'Without requirements or design, programming is the art of adding bugs to an empty text file.',
'Before software can be reusable it first has to be usable.',
'The best method for accelerating a computer is the one that boosts it by 9.8 m/s2.',
'I think Microsoft named .Net so it wouldn’t show up in a Unix directory listing.',
'There are two ways to write error-free programs; only the third one works.',
];
client.on ('message', (msg) => {
if (msg.content === '? blague') {
msg.channel.send (blagues [Math.floor(Math.random() * jokes.length)]);
}
});
J'ai supprimé la partie "Hello" / "Salut" du code car cela ne nous sert plus à rien.
Maintenant que vous avez une compréhension de base du module Discord.js, allons plus loin. Mais le module peut faire beaucoup plus – par exemple, ajouter des rôles à une personne ou les bannir ou les expulser. Pour l'instant, nous allons construire un système de rôle de réaction simple.
Construire un système de rôle de réaction
Chaque fois qu'un utilisateur répond avec un emoji spécial dans un message ou un canal particulier, un rôle lié à cet emoji sera attribué à l'utilisateur. La mise en œuvre sera très simple. Mais avant de construire ce système de réaction-rôle, nous devons comprendre les partiels.
Partials
Partial est un concept Discord.js. Discord.js met généralement en cache tous les messages, ce qui signifie qu'il stocke les messages dans une collection. Lorsqu'un message mis en cache reçoit un événement, comme l'obtention d'un message ou d'une réponse, un événement est émis. Mais les messages envoyés avant le démarrage du bot ne sont pas mis en cache. Ainsi, réagir à de telles instances n'émettra aucun événement, sauf si nous les récupérons avant de les utiliser. La version 12 de la bibliothèque Discord.js introduit le concept de partiels. Si nous voulons capturer de tels événements non cachés nous devons opter pour les partiels. La bibliothèque comporte cinq types de partiels:
USER
-
CHANNEL
-
GUILD_MEMBER
-
MESSAGE
-
REACTION
Dans notre cas, nous n'aurons besoin que de trois types de partiels:
-
USER
la personne qui réagit; -
MESSAGE
le message auquel on réagit ; -
REACTION
la réaction donnée par l'utilisateur au message.
La documentation a plus d'informations sur les partiels .
La bibliothèque Discord.js fournit un outil très simple manière d'utiliser les partiels. Il suffit d'ajouter une seule ligne de code, en passant un objet dans le constructeur Discord.Client ()
. Le nouveau constructeur ressemble à ceci:
const client = new Discord.Client ({
partiels: ['MESSAGE', 'REACTION', 'CHANNEL'],
});
Création de rôles sur le serveur Discord
Pour activer le système de rôle de réaction, nous devons créer des rôles. Le premier rôle que nous allons créer est le rôle de bot . Pour créer un rôle, allez dans «Paramètres du serveur»:
Dans les paramètres du serveur, accédez aux «Rôles ”, Et cliquez sur le petit plus ( +
) à côté de l'endroit où il est écrit“ Rôles ”.
Source link