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 à notre newsletter

Abonnez-vous pour mieux comprendre le développement logiciel. Recevez les dernière nouvelles, vidéos et conseils.

Nous respectons votre vie privée. Vous pouvez vous désabonner à tout moment par un simple click ou via email.

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 !

Social
Made by kodaps · All rights reserved.
© 2024