Discord est venu pour énormément de gens un véritable incontournable. Il a même pour certaines écoles et entreprises remplacé des outils jugés plus « pros » comme Slack. C’est par exemple sur cette plateforme que je donnais cours pendant le Covid suite à un choix des étudiants. La raison ? Les élèves/employés l’utilisent déjà en grande partie. Pas besoin donc d’installer un énième logiciel. Et surtout ce qui fait la force de Discord, c’est la simplicité de création de bots personnalisés. C’est partit, donc, pour découvrir ensemble comment créer un bot Discord à l’aide de Node.js !
Configurer son bot Discord
Tout d’abord, rendez-vous sur la plateforme dev de Discord. Vous retrouverez ici toutes vos applications. C’est à dire probablement aucune si vous êtes en train de lire ceci. Ne tardons donc plus, et cliquons sur « New Application »:

Donnez-lui le nom de votre choix, acceptez les conditions et validez. Vous serez ensuite redirigé vers la page de votre toute nouvelle app. Pour configurer les droits de notre Bot, cliquez à gauche sur « Bot » dans le menu.
En dessous du Username de votre Bot, vous pouvez déjà générer un Token et le noter dans un coin. Descendez en suite tout en bas, et vous trouverez une option nommée « Message Content Intent« . Cochez le toggle pour l’activer puis sauvegardez les modifications.

Et c’est tout bon ! Nous n’avons plus qu’à faire deux choses: connecter notre Bot à un serveur et… le coder !
Connecter notre Bot à un serveur
Maintenant, rendez-vous dans l’onglet OAuth2 dans le menu de gauche. Rendez-vous dans le tableau OAuth2 URL Generator et cochez « bot ». Ça vous fera apparaître un second tableau. Cochez « Send Message » et récupérez l’URL générée tout en dessous. Si vous la lancez dans votre navigateur préféré, vous pourrez choisir sur quel serveur installer votre Bot:

N’hésitez pas à créer un serveur vide dans un premier temps pour le tester. Une fois ceci fait, vous verrez normalement apparaître dans le salon des arrivées un petit message du style « MyFirstApp a bondi dans le serveur. » C’est signe que tout fonctionne et que nous pouvons désormais nous atteler à la partie la plus rigolote !
Parlons peu, parlons code
Créez un dossier pour votre projet et lancez un npm init (ou si le nom du dossier est déjà le bon, un npm init -y). Nous aurons besoin de deux modules pour ce projet, lancez donc:
npm install discord.js dotenv
Créez un fichier .env à la racine avec le contenu suivant:
TOKEN=VOTRE.TOKEN
Et ensuite générons un fichier index.js !
Nous allons commencer par importer les modules dont nous aurons besoin, donc les deux fraichement installés:
require('dotenv').config();
const { Client, GatewayIntentBits } = require('discord.js');
Puis nous allons créer notre client Discord, pour ça nous aurons besoin de trois intent:
- « Guilds« , qui sert à controller ce qui se passe dans le serveur, qui y a accès, …
- « GuildMessages » qui permet d’accéder aux messages des différents salons
- « MessageContent » qui permet de récupérer le contenu d’un message
Ce qui nous donne ceci:
const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent] });
Maintenant que notre client est fonctionnel et avec les bons droits, nous pouvons commencer à ajouter des actions à notre bot. Commençons par afficher un message si notre bot arrive bien à se connecter au serveur:
client.once('ready', () => {
console.log(`Bot connecté en tant que ${client.user.tag}`);
});
Pour ceux qui ont déjà utilisé un outil de socket comme socket.io (que j’ai utilisé par exemple pour l’application Polincorrect) la syntaxe devrait vous paraître familière. On écoute des events, une fois ou à l’infini, et on réagit. Pour lire les messages envoyés par exemple on peut simplement faire:
client.on('messageCreate', message => {
console.log(message);
});
Maintenant nous voulons pouvoir réagir. Nous allons jouer au ping-pong. Nous allons donc vérifier le contenu de notre message. S’il est égal à « !ping », nous répondrons directement au message en disant « Pong ! ». Ça nous donne le code suivant:
client.on('messageCreate', message => {
if (message.content === '!ping') {
message.reply('Pong !');
}
});
Et pour terminer, nous devons connecter notre bot au système, pour cela nous allons utiliser la fonction login() en y passant notre token:
client.login(process.env.TOKEN);
Enfin: vérifier que tout marche
Lancez un node index.js dans votre terminal. Si vous voyez bien apparaître le petit message que nous avons rempli dans le once, c’est que vous êtres bien connectés:

Vous voyez bien son tag affiché, donc son nom en tant qu’utilisateur Discord. Maintenant allez dans le salon d’un de vos serveurs et tapez « !ping » puis laissez la technologie opérer:
