Skip to main content

Chapitre 3 - Démarrer le bot

Nous rejoindre sur Discord

Ça y est, nous y sommes, nous allons enfin démarrer notre bot. Dans notre structure, le fichier qui permet de lancer notre bot est le app.js. Pour lancer notre bot, il suffit d'utiliser la commande node . dans un terminal de commandes (attention, le terminal doit être ouvert au même endroit que notre fichier app.js).

Si vous lancer cette commande maintenant, il ne se passera rien, puisque notre fichier app.js est vide !

Connecter le bot

Pour se connecter à notre bot, nous aurons besoin du code suivant :

require('log-timestamp'); // Avoir la date sur tous les logs générés
require('dotenv').config(); // Lire le fichier .env

const { Client } = require('discord.js'); // Utiliser les éléments de Discord
const path = require('path'); // Gérer les liens vers les répertoires

/* Initialisation de notre bot */
const client = new Client({intents:[]}); // Pour le moment, on ne met aucune intention

// Connexion à notre bot
client.login(process.env.TOKEN).then(()=>{
    console.log(`Logged in as ${client.user.tag} !`);
});

On peut voir maintenant que notre bot est connecté sur notre serveur :

Bien qu'on ne puisse rien faire pour le moment, on peut déjà récupérer des informations sur celui-ci. C'est ce que l'on a fait à la ligne 11 au moment du log : nous avons récupérer le nom de notre bot.

Utiliser les logs

Lorsque vous développez vos fonctionnalités, nous vous recommandons fortement d'utiliser les logs. Ils vous permettront d'obtenir des informations importante sur la structure de la variable présente dedans. Par exemple, voici ce que nous obtenons si nous affichons la structure de la variable client avec console.log(client); :

Client {
  options: { ... },
  rest: REST { ... },
  ws: WebSocketManager { ... },
  actions: ActionsManager { ... },
  voice: ClientVoiceManager { adapters: Map(0) {} },
  shard: null,
  users: UserManager {},
  guilds: GuildManager {},
  channels: ChannelManager {},
  sweepers: Sweepers { ... },
  presence: ClientPresence {
    userId: null,
    guild: null,
    status: 'online',
    activities: [],
    clientStatus: null
  },
  user: ClientUser {
    id: '1003016587437166612',
    bot: true,
    system: false,
    flags: UserFlagsBitField { bitfield: 0 },
    username: 'Formation Bot',
    discriminator: '3871',
    avatar: '8f35d791bf2a5e3af3b8a2be1ee493a9',
    banner: undefined,
    accentColor: undefined,
    verified: true,
    mfaEnabled: true
  },
  application: ClientApplication { ... }
  },
  readyTimestamp: 1659360905580,
  [Symbol(kCapture)]: true
}

Énormémement d'informations sont présent dans cette variable, mais dans notre cas ce qui nous intéresse c'est juste de récupérer le nom de notre application.

Les intentions

Pour que notre bot puisse recevoir certains informations, il faut que nous lui ajoutons les intentions que l'on souhaite récupérer au moment de sa déclaration. Il suffit alors de les ajouter de la manière suivante :

const client = new Client({
    intents: [
        GatewayIntentBits.Guilds, // Évènement sur le serveur
        GatewayIntentBits.GuildMembers, // Évènement sur l'arrivé/départ/modification de membre
        GatewayIntentBits.GuildMessages, // Évènement sur un message
        GatewayIntentBits.MessageContent, // Récupérer le contenu d'un message
    ],
});

Au fur et à mesure de l'évolution de notre bot, les demandes d'intentions pourront évoluées.

Pour savoir ce que les intentions permettent de faire, voici un lien avec les détails de chaque intentions : List of intent

Développement de l'app.js

Nous allons maintenant développer l'ensemble de notre fichier app.js afin que notre bot puisse récupérer toutes les commandes, les events, etc. La structure mise en place actuellement, nous permet de séparer les différents fonctionnalités dans des fichiers différents. Mais notre bot à besoin de les lires et de les récupérés à son initialisation.

  1. A la suite de la connexion de notre bot, nous allons créer deux collections : une qui contiendra toutes nos commandes et une seconde pour nos réactions.
/* Création des collections */
client.commands = new Collection();
client.reactions = new Collection();
/* Création des collections */
  1. Nous allons maintenant écrire un script qui va nous permettre de récupérer toutes les commandes, events et réactions disponible dans nos fichiers:
/* Récupération des instructions */
const commandsPath = path.join(__dirname, 'src', 'commands');
const eventsPath = path.join(__dirname, 'src', 'events');
const reactionsPath = path.join(__dirname, 'src', 'reactions');

const commandsFiles = fs.readdirSync(commandsPath).filter((file) => file.endsWith('.js'));
const reactionsFiles = fs.readdirSync(reactionsPath).filter((file) => file.endsWith('.js'));
const eventsFiles = fs.readdirSync(eventsPath).filter((file) => file.endsWith('.js'));
/* Récupération des instructions */