Avant d'entamer ce défi, assure toi d'avoir déjà fait ceux ci:

Ensuite, assure-toi que tu sois bien connecté à ton compte Repl.It, et que tu aies ton projet de la fois passée.

Notre challenge aujourd'hui est de créer un bot avec une craie utilité. On a déjà vu tous les outils nécessaires pour le créer, donc tu devrais pouvoir y arriver!

Notre bot sera un QuizBot. Tu peux aller créer un nouveau bot sur le site développeur de Discord. Si tu as oublié comment faire, tu peux revoir l'activité numéro 1.

Ensuite, invite le au serveur. Donne lui toutes les permissions de la colonne du milieu, la colonne "Text Permissions". Finalement, il va te falloir créer un nouveau Repl.it, et bien l'initialiser, de nouveau comme dans la première activité.


              const Discord = require('discord.js');
              const bot = new Discord.Client();

              bot.on('...', function() {
                // ...
              });

              bot.on('...', function() {
                // ...
              });

              bot.login("TOKEN");
            

Mais quel sera le but de notre bot? Bonne question! Notre bot va nous donner une question. On va alors devoir répondre, et notre bot va mettre des réactions à nos réponses en fonction de si c'est la bonne réponse ou non. On pourra même ajouter d'autres fonctionalités par après!

Pour arriver à bien coder ce QuizBot, on va explorer les commandes de base, les réponses aléatoires, les messages limités à un canal, les timeouts, les réactions, les embeds et autres.

Pour ma part, mon bot va poser des question de maths. Fais en sorte que ton bot soit plus créatif!

Allons-y, on a du travail!

Notre bot va poser une question quand on enverra la commande !math. Fais d'abord en sorte qu'il réponde simplement "Bonjour, Je suis MathBot".


              if ( /* contenu du message */ == '...' ) {
                /* répondre au message */
              }
            

Mais notre bot devrait nous donner une question plutôt que de dire bonjour! Change la réponse en une question.

Par après, on remarque que c'est pas drôle si la question est toujours la même... Crée une liste de questions, et envoie une question aléatoire


              const questions = ['...', '...', '...'];

              if ( /* contenu du message */ == '...' ) {
                /* envoyer réponse aléatoire */
              }
            

L'utilisateur va alors répondre au message du bot en envoyer !reponse 42. Le bot va alors soit mettre un "✅" si c'est la bonne réponse, sinon un "❌".

Pour vérifier si un message commence par une commande, on fait ceci:


              const msg_sep = msg.split(" ");

              if ( /* premier mot de msg_sep */ == /* commande à vérifier */ ) {
                // ...
              }
            

Mais pour pouvoir vérifier si la réponse est correcte, il faut que tu te souvienne de la réponse. Lorsque tu poses la question, tu généres un nombre aléatoire qui est l'indice de la question. Tu dois stocker ce nombre dans une variable globale pour pouvoir la réutiliser lorsque tu checkes la réponse!


              let indice = 0;

              bot.on('message', function(msg) {
                const questions = // ...
                const reponses = // ...

                if ( /* contenu */ == '!math' ) {
                  // Poser une question aléatoires
                  const random = Math.floor ( /* etc */ );
                  msg.reply( questions[random] );

                  // Changer indice
                  indice = random;
                }
                if ( /* contenu commence par !reponse */ ) {
                  /* Checker si la réponse est la même que reponses[indice] (Bonne reponse) */
                }
              })
            

Finalement, si c'est la bonne réponse, tu dois réagir avec un ✅ (Ou dans le style), sinon un ❌. Pour réagir, on utilise


              msg.react("👁‍🗨");
            

Tu peux mettre une limite au temps autorisé pour une question. Par example, au bout de 1 minutes, le bot va donner la réponse. Pour ce faire, on utilise des timeout!


              setTimeout(function() {
                // ...
              }, /* Temps en millisecondes */)
            

Tu peux, par exemple, lui faire envoyer un embed quand le temps est écroulé avec la réponse. Ici, tu peux de nouveau faire une liste d'embeds, comme pour les réponses.


              const embed1 = /* Premier embed */
              const embed2 = /* Second embed */
              const embed3 = /* Troisième embed */

              const listeEmbeds = [embed1, embed2, embed3];
            

Après, limite ton bot à un canal spécifique. Normalement, ton animateur aura créé un canal speecifique pour les Quiz.

Aussi, essaye de faire en sorte que, lorsque quelqu'un trouve la réponse, le bot envoie directement l'embed au lieu d'attendre.

Finalement, fait un compteur du nombre de personnes qui ont essayé la question! Tu peux l'envoyer quand quelqu'un a trouvé la réponse, avec une mention "Bravo, tu as battu [102] personnes". Pour ce faire, tu aura de nouveau besoin d'une variable globale.