Skip to main content

Chapitre 4 - Les évènements

Nous rejoindre sur Discord

Définition

Lorsque l'on souhaite intéragir avec Discord, notre bot réagit avec un évènement. Il existe deux types d'évènement :

  • once : émet l'évènement une fois que le bot est prêt
  • on : émet à chaque fois qu'un évènement est reçue.

Que ce soit pour la lecture d'un message ou encore l'utilisation d'une commande, en fonction de l'évènement qu'il reçoit le bot va utiliser des instructions différentes.

La liste de tous les évènement possibles est présente sur : Discord JS - Client

Structure des évènement

Voici la structure que nous allons utiliser lorsque nous allons créer nos fichiers :

require('log-timestamp'); // Présent sur chaque fichier

module.exports = {
    name: 'event_name', // Nom de l'évènement
    once: true, // once : true | on : false
    execute(client, ..args) { // On récupère le client que l'on a envoyé, et on y ajoute les autres paramètres nécessaire
      /**
      * Instruction de l'évènement
      */
    },
};

Lorsque vous voulez écouter un évènement, nous vous conseillons d'appeler le fichier qui le contient de la même manière que son nom afin de vous retrouver facilement.

Évènement - Ready

Le premier évènement que l'on va créer se nomme : ready. Cette évènement se produit une fois que notre bot est prêt ( il sera donc de type : once). Jusqu'à maintenant, lorsque l'on démarrait notre bot, voici ) quoi ça ressemblait :

Nous allons y ajouter une action :

require('log-timestamp');

module.exports = {
    name: 'ready',
    once: true,
    execute(client) {
        /* Modification du statut de présence */
        client.user.setPresence({
            activities: [{ name: 'Formation Xelyos - Bot Discord' }],
            status: 'online',
        });
    },
};

Évènement - interactionCreate

L'évènement interactionCreate correspond au moment où un commande ou une réaction est utilisée. C'est cette évènement qui va faire en sorte que nos commandes puisse être utilisée. Voici la structure de ce fichier :

require('log-timestamp');

module.exports = {
    name: 'interactionCreate',
    once: false,
    async execute(client, interaction) { // On récupère le client et l'interaction
        /* Commande Slash */
        if (interaction.isChatInputCommand()) { // l'interaction est de type commande
            const command = client.commands.get(interaction.commandName); // On récupère donc la commande correspondant au nom de l'intéraction
            if (!command) return; // Si on ne l'a trouve pas, on ne fait rien
            try {
                await command.execute(interaction, client); // On execute les instructions de notre commande
            } catch (error) {
                /* Une erreur est survenue lors de l'exécution de la commande */
                console.error(interaction.commandName, error);
                await interaction.reply({
                    content: 'There was an error while executing this command!',
                    ephemeral: true,
                });
            }
        }
        /* Commande Slash */

        /* Réponse aux réactions */
        if (interaction.isButton() || interaction.isSelectMenu()) { // Notre réaction est de type button ou menu de sélection
            if (interaction.message.author.id !== client.user.id) return; // On ne réagit pas à nous même
            const reaction = client.reactions.get(interaction.customId);
            if (!reaction) return;
            reaction.execute(interaction, client);
        }
        /* Réponse aux réactions */
    },
};