Comment envoyer un message texte sur un Webhook Discord

Dans ce tutoriel, vous allez configurer votre propre serveur Discord, créer un webhook Discord et écrire un script bot NodeJS qui enverra un message texte vers votre serveur webhook Discord.

Nous allons ici voir l’utilisation des webhooks dans le cadre de Discord, mais cette technique fonctionne avec d’autres services qui le permettent (comme IFTTT par exemple).

Les webhooks peuvent être utilisés lorsque vous avez des sites web critiques afin d’être informé, via des notifications, des problèmes. Ainsi, cela vous permet de les résoudre rapidement avant que cela n’ait un impact sur les utilisateurs. L’une des façons de recevoir des notifications est de configurer des alertes via un système de chat textuel.

Discord est un système de chat hébergé similaire à Slack. Sur lequel il est possible de mettre en place un système de notification gratuit permettant de communiquer par messages texte.

Sommaire

Un webhook qu’est-ce que c’est ?

Selon wikipédia, les webhooks sont des « fonctions de rappels HTTP définies par l’utilisateur ». Ils sont généralement déclenchés par un événement, comme l’envoi de code vers un dépôt ou un commentaire publié sur un blog. Lorsque cet événement se produit, le site source envoie une requête HTTP à l’URL configurée pour le webhook. Plus concrètement, avec les webhooks, des événements sur un site invoquent un comportement sur un autre via l’envoi d’un message.

Configuration de votre serveur Discord

Une fois que vous avez ouvert votre compte Discord, vous pouvez créer votre propre serveur Discord privé.

Tout d’abord, connectez-vous à votre compte Discord et cliquer sur le bouton + à gauche de l’écran (Ajouter un serveur).

Configurer un serveur Discord
Configurer un serveur Discord

Une fenêtre Créer un serveur s’affiche. Vous pouvez vous inspirer de modèles, mais nous allons directement cliquer sur Créer le mien.

Créer  un serveur Discord
Créer un serveur Discord

Choisissez le premier type de serveur Pour mes amis et moi.

Il est possible de personnaliser l’intitulé du serveur en lui donnant un nom dans le champ Nom du serveur et en lui attribuant une image en cliquant sur Upload. Ensuite, cliquez sur Créer.

Personnalisation du serveur Discord
Personnalisation du serveur Discord

Créer un Webhook

Pour créer un Webhook, il faut ouvrir l’onglet Intégrations de vos paramètres de serveur.
Une fois cela fait, sélectionnez l’option  Webhooks  à gauche, puis cliquez sur Créer un webhook.

webhook discord

Vous aurez quelques options ici. Vous pouvez :

  • Modifier l’avatar : En cliquant sur l’avatar à côté du Nom en haut à gauche
  • Choisir le salon dans lequel le Webhook sera publié : En sélectionnant le salon textuel souhaité dans le menu déroulant.
  • Nommer votre Webhook : Cela permet de distinguer plusieurs webhooks pour plusieurs services différents.

Dernière point, Copier l’URL du webhook. C’est cette URL qui nous servira justement à communiquer !

Et voilà, tout est prêt du côté de Discord, place au code maintenant !

Envoi des messages textes

Comme indiqué, l’objectif de notre script sera de simplement faire une requête POST vers l’URL Webhook que nous venons d’obtenir. Pour générer cette dernière, nous allons donc utiliser la bibliothèque https incluse nativement dans NodeJS.

Pour la construction du message texte à envoyer, il faut nous référer à la documentation de Discord au sujet des webhooks. Ainsi, nous remarquons que le message doit contenir un payload json avec

  • Un champ content qui représente un simple message texte pouvant faire jusqu’à 2000 caractères ;
  • OU un champ embeds contenant une liste d’objets embed ;
  • OU un champ file qui contiendra un fichier à envoyer (la payload devra alors être au format multipart/form-data avec un champ payload_json).

Dans ce tutoriel, nous traitons que le premier cas avec l’envoi d’un message texte tout simple qui ressemblera à cela :

Résultat de l'envoi d'un message texte en NodeJS vers un Discord Webhook
Résultat de l’envoi d’un message texte en NodeJS vers un Discord Webhook

Node.js est livré avec les modules HTTP et HTTPS dans la bibliothèque standard. Dans notre exemple, comme il s’agit d’une URL HTTPS, nous utiliserons le module HTTPS pour effectuer l’appel POST.

Voici l’exemple de code avec la fonction httpsPost() :

import https from 'https';

function httpsPost({ body, ...options }) {
    return new Promise((resolve, reject) => {
        const req = https.request({
            method: 'POST',
            ...options,
        }, res => {
            const chunks = [];
            res.on('data', data => chunks.push(data))
            res.on('end', () => {
                let resBody = Buffer.concat(chunks);
                switch (res.headers['content-type']) {
                    case 'application/json':
                        resBody = JSON.parse(resBody);
                        break;
                }
                resolve(resBody)
            })
        })
        req.on('error', reject);
        if (body) {
            req.write(body);
        }
        req.end();
    })
}

Il nous reste qu’à exécuter la requête POST avec les bons paramètres !

Il nous faut préciser dans les variables de l’entête de la requête que

  • nous envoyons au format JSON en indiquant Content-Type': 'application/json'
  • l’on se fait passer pour un navigateur web en précisant 'user-agent': 'Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11'.

Et de renseigner le contenu du message dans la variable content du payload json.

(async () => {
    await httpsPost({
        hostname: 'discord.com',
        path: `/api/webhooks/1053610941880733796/RmEre7Eb4AVkUw3gBMtM6ZYX5sejxZeXCEbuvQA_yBCnhZ_XBgMCh-PxD1Rl5XlkdP69`,
        headers: {
            'user-agent': 'Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11',
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({
            'content': "Salut les Geeks! Ça farte ?",
        })
    })
})();

Et voilà, notre petit bot est opérationnel. Il peut être complété pour faire de plus en plus de choses !

En effet, les webhooks ne sont que la partie émergée des possibilités de bots possibles sur Discord. Si vous êtes motivés, regarder la documentation de l’API Discord pour en savoir plus et ainsi réaliser des bots plus évolués.

En conclusion, sachez aussi qu’il existe la bibliothèque discord.js permettant d’interagir très facilement avec l’API Discord.

Laisser un commentaire