Cette deuxième partie du tutoriel sur la création d'un bot discord nécessite d'avoir suivi la première partie, disponible juste ici !

Dans la suite de ce tutoriel, nous allons découvrir comment faire interagir notre bot avec un serveur Discord, et comment le faire répondre à des messages !

Générer un lien d'invitation automatiquement

Tout d'abord, nous allons modifier légèrement notre code du tutoriel précédent afin de nous faciliter la tâche. Si vous devez enlever (kicker) votre bot pour le ré-inviter sur votre serveur Discord à de multiples reprises, la manipulation peut être fastidieuse.

Le code ci-dessous génère donc le lien d'invitation et l'affiche à chaque démarrage du bot !

const token  = process.env.DISCORD_TOKEN
const clientId  = process.env.CLIENT_ID
const inviteLink = `https://discord.com/api/oauth2/authorize?client_id=${clientId}&permissions=536870911991&scope=bot%20applications.commands`;

// When the client is ready, the virtual user is shown as "Logged in" in the servers.
client.once("ready", function(){
  console.log(`I am ready! Logged in as ${client.user.tag}!`);
  console.log(`Click to invite me: ${inviteLink}`);
});
À noter que les permissions sont toutes là, afin de faciliter la phase de conception, mais je vous recommande de les réduire au minimum par la suite !

Réagir à l'ajout sur un serveur

Lorsque votre bot est invité sur un serveur, un évènement est envoyé avec les informations du serveur en question.

Attention : Dans le SDK Discord, on ne parle jamais de "serveur" mais de "guild", hors c'est simplement un synonyme.

Il vous suffira d'écouter l'évènement "guildCreate" pour réagir en conséquence. Ici on affiche simplement le nom du serveur :

//Called on guild invite
client.on("guildCreate", function(guild){
  console.log(`I joined the guild: ${guild.name}`);
});
Evidemment, si votre bot n'est pas en cours d'exécution au moment de l'ajout sur le serveur, l'évènement ne sera jamais reçu.

Écouter et répondre aux messages

Comme pour tout le reste, il suffit d'écouter l'évènement "messageCreate" pour récupérer les informations de TOUS les messages envoyés sur le serveur, qu'importe le channel.

Il faut donc bien faire attention dans les conditions que vous entrez avant de répondre ou d'effectuer d'autres actions.

Pour répondre à un message, il suffit d'appeler la méthode "message.reply(...)" comme ci-dessous :


//...
const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] });
//...

//Called on any message
client.on('messageCreate', message => {
  if(message.content.indexOf("/test") > -1){
    message.reply(`I'm a test and it's working !`)
    .then(() => console.log(`Replied to message successfully`))
    .catch(console.error);
  }
});

Même si le code ci-dessus permet d'émuler l'écoute d'une commande slash (/test), il existe une méthode beaucoup plus adaptée que nous verrons dans un futur tutoriel.

N'oubliez pas d'ajouter "GUILD_MESSAGES" à la liste de vos intents, sans quoi vous ne recevrez aucun évènement lié aux messages !

La troisième partie de ce tutoriel dans laquelle on apprendra à faire intéragir votre bot est en cours de rédaction. En attendant, je vous renvoie à la documentation officielle de Discord.js : https://discord.js.org/#/docs/main/stable/general/welcome

J'espère que cet article vous aura été utile, et à bientôt sur le blog !

Les articles les plus populaires du blog

Envie de continuer à lire des articles autour du développement web (entre autres) ? Voici la sélection des articles de mon blog les plus lus par la communauté !

Voir la sélection 🚀

Recevez les articles de la semaine par e-mail pour ne rien manquer !

S'abonner à la newsletter 📧

À propos de l'auteur

Hello, je suis Nicolas Brondin-Bernard, ingénieur web indépendant depuis 2015 passionné par le partage d'expériences et de connaissances.

Aujourd'hui je suis aussi coach pour développeurs web juniors, tu peux me contacter sur nicolas@brondin.com, sur mon site ou devenir membre de ma newsletter pour ne jamais louper le meilleur article de la semaine et être tenu au courant de mes projets !


Photo par Alexander Shatov sur Unsplash