Comment coder un bot Discord avec Node.JS en 2023
Salut les amis ! Je suis David, et aujourd'hui, nous allons construire notre propre robot Discord en utilisant Node.js. Alors, attachez votre ceinture et commençons !
Prérequis et configuration
Avant de commencer, assurez-vous que Node.js est installé sur votre ordinateur. Vous pouvez le télécharger sur nodejs.org. Vous aurez également besoin d'un éditeur de code, comme Visual Studio Code ou Sublime Text.
Une fois Node.js installé, nous allons créer un nouveau dossier pour notre projet, naviguer jusqu'à lui dans le terminal, et lancer npm init
pour créer un nouveau fichier package.json. Ce fichier contiendra les dépendances et les configurations de notre projet.
Créer une application Discord
Maintenant, nous allons nous rendre sur le portail des développeurs de Discord à https://discord.com/developers/applications
et créer une nouvelle application en cliquant sur le bouton 'New Application'. Donnez un nom à votre bot et cliquez sur 'Create'.
Ensuite, naviguez jusqu'à l'onglet "Bot" sur la barre latérale gauche, et cliquez sur "Add Bot". Confirmez l'action, et vous avez maintenant un nouveau robot !
Copiez le jeton secret du robot (ou actualisez-le si vous ne le voyez pas). Le jeton est sensible. C'est ce qui permet à votre code d'agir en tant que bot.
Pour protéger cette information, nous allons la stocker dans un fichier .env
. Créons-le à la racine de notre projet, et écrivons à l'intérieur :
BOT_TOKEN=<la valeur du token>
Pendant que nous y sommes, nous devons aussi ajouter les valeurs APP_ID
et SERVER_ID
au fichier. L'APP_ID
est facile à trouver sur la page General Information
de votre application dans le portail des développeurs Discord. Ajoutons-le au fichier .env
:
APP_ID=<votre identifiant d'application>
Le SERVER_ID
est un peu plus difficile à trouver.
Tout d'abord, vous devez activer le Developper mode
dans Discord. Pour cela, vous devez aller dans l'onglet "Avancé" dans les paramètres de l'utilisateur dans le client Discord et changer le paramètre appelé "Developer Mode".
Ensuite, toujours dans le client Discord, allez sur le serveur Discord, faites un clic droit sur le nom du serveur et sélectionnez "Copier l'ID" tout en bas. Ajoutons-le au fichier .env
:
SERVER_ID=votre identifiant de serveur
Maintenant, une étape importante. Créez un fichier .gitignore
, et ajoutez-y le fichier .env
. Cela exclut le fichier du suivi par git.
.env
Cela empêche notre secret d'être poussé là où notre code est stocké, si nous voulons suivre nos changements avec git
.
Ajouter le bot à un serveur
Avant d'aller plus loin, nous devons également inviter le bot sur le serveur. Pour ce faire, la section Discord App dispose d'un lien d'invitation utile dans la section oAuth2
.
Vous devez sélectionner bot
et application.commands
et les permissions que vous voulez donner, comme "Send Messages" ou "Embed Links". Les permissions exactes dépendent de ce que vous voulez faire exactement. Ne vous inquiétez pas, vous pourrez toujours en ajouter plus tard.
Abonnez-vous pour mieux comprendre le développement logiciel. Recevez les dernière nouvelles, vidéos et conseils.
Installation des dépendances et configuration du projet
Maintenant, dans le dossier de votre projet, lancez la commande suivante dans votre terminal pour installer la bibliothèque Discord.js
:
npm install discord.js
Nous voulons aussi installer la bibliothèque dotenv
pour nous assurer que les variables d'environnement stockées dans le fichier .env
sont lues et ajoutées au code.
Créons un nouveau fichier appelé index.js
dans le dossier de votre projet. Dans ce fichier, nous allons écrire le code pour configurer et lancer notre bot Discord. Tout d'abord, importons les bibliothèques nécessaires et créons un nouveau client Discord. Nous allons importer Client
, Events
et GatewayIntentBits
depuis la bibliothèque discord.js
.
// importer les classes discord.js nécessaires
const { Client, Events, GatewayIntentBits } = require('discord.js') ;
Nous voulons également initialiser nos variables d'environnement en utilisant dotenv
, et pour cela, nous ajoutons :
require('dotenv').config() ;
Maintenant, nous voulons initialiser l'instance du client. Ici, nous appelons le constructeur Client et spécifions la valeur du champ intents
dans l'objet paramètre. Les intents sont essentiellement les droits que vous voulez que votre bot ait. Pour l'instant, spécifions que nous voulons l'objet Guilds
du GatewayIntentBit
. Une Guilde, en langage discord interne, signifie un serveur.
// Créer une nouvelle instance de client
const client = new Client({ intents :[
GatewayIntentBits.Guilds
]}) ;
Ensuite, nous créons un callback pour le client discord à appeler lorsque la connexion est terminée, où nous imprimons essentiellement l'utilisateur sous lequel le client est connecté :
client.once(Events.ClientReady, c => {
console.log(`Ready ! Logged in as ${c.user.tag}`) ;
}) ;
Enfin, nous nous connectons en utilisant le BOT_TOKEN
que nous avons défini dans notre fichier .env
.
client.login('YOUR_BOT_TOKEN') ;
Si nous lançons le bot en utilisant node JS, le bot se connecte maintenant et nous dit sous quel nom il s'est connecté :
node index.js
Maintenant, créons une première commande à laquelle notre robot réagira :
Créer notre première commande
Tout d'abord, nous allons créer un dossier commands
. Il contiendra nos différentes commandes.
Nous allons utiliser l'utilitaire SlashCommandBuilder
de la bibliothèque discord.js
. Commençons par l'importer.
const { SlashCommandBuilder } = require('discord.js') ;
Tout d'abord, nous devons définir les options de la commande. Nous le faisons en créant un objet data qui est une instance de SlashCommandBuilder
.
const data = new SlashCommandBuilder()
Nous devons maintenant le modifier pour qu'il réponde à nos besoins. Nous créons une simple commande ping
pour l'instant, donc nous ajoutons :
.setName('ping')
.setDescription('Répondre avec Pong!')
C'est également ici que nous définissons s'il y a d'autres paramètres supplémentaires, par exemple en utilisant setStringOption.
Nous devons maintenant définir le code que le bot exécutera lorsqu'il recevra la commande, et pour cela, nous définissons une fonction asynchrone execute
qui prend un objet interaction
comme paramètre :
const execute = async (interaction) => {
}
Cet objet possède une fonction reply
, que nous utiliserons pour répondre "Pong" à l'utilisateur.
const execute = async (interaction) => {
await interaction.reply(`Pong!`) ;
}
Maintenant nous devons empaqueter tout cela dans un module qui exporte la configuration data
et le callback execute
:
module.exports = {
data,
execute
} ;
Notre commande ping
est maintenant prête à être ajoutée au robot.
Ajouter la commande au bot
Nous devons dire au bot d'exécuter le code que nous venons de créer. Pour cela, allons à index.js et créons un objet commands
qui importe le code que nous venons d'écrire :
constands = {
ping : require('./commands/ping') ;
}
Créons maintenant un écouteur d'événements pour réagir aux événements Discord :
const listener = async (interaction) => {
}
Dans cette fonction, nous voulons d'abord filtrer toute interaction qui n'est pas une commande en vérifiant que l'interaction est une "Chat Input Command" :
if (!interaction.isChatInputCommand()) return ;
Maintenant que nous savons que l'interaction est une commande, nous pouvons enregistrer son nom en utilisant la propriété commandName
de l'interaction :
console.log(`Received command : ${interaction.commandName}`) ;
Ensuite, récupérons le code correspondant à la commande :
const command = commands[interaction.commandName] ;
Si le code n'existe pas, nous abandonnons :
if (!command) {
on retourne ;
}
Et maintenant, on exécute le code : await command.execute(interaction) ; Idéalement, si nous construisions une application complète, nous envelopperions ceci dans un try/catch.
Notre fonction ressemble maintenant à ceci :
const listener = async (interaction) => {
if (!interaction.isChatInputCommand()) return ;
console.log(`Received command : ${interaction.commandName}`)
const command = commands[interaction.commandName]
if (!command) {
return ;
}
await command.execute(interaction) ;
} ;
Maintenant, enregistrons l'écouteur en l'ajoutant :
client.on(Events.InteractionCreate, listener) ;
Démarrez votre bot en lançant node index.js dans votre terminal. Une fois que le bot est en ligne, tapez !ping
dans votre serveur Discord, et le bot devrait répondre par Pong!
.
Félicitations ! Vous venez de construire votre propre robot Discord en utilisant Node.js. Vous pouvez maintenant étendre ses capacités en ajoutant d'autres commandes et fonctionnalités pour répondre à vos besoins. Merci d'avoir lu, et amusez-vous bien à coder !