Catégories
Automatisation / scripts unRaid

Script, webhooks et serveur Discord

Dans cet article, nous allons voir comment scripter l’envoi de messages sur un serveur discord à l’aide de webhooks.

De mon coté, j’effectue une sauvegarde régulière des données de mon NAS sur un Raspberry Pi distant, et ça m’embêtait de ne pas avoir de retour de l’état de sauvegarde. Je me suis donc rendu compte seulement aujourd’hui que le backup n’avait pas été effectué depuis plus d’un mois en allant fouiller dans les logs…

J’utilise pas mal les webhooks de discord pour me notifier le statut des services que j’héberge, notamment grâce à Uptime Kuma et j’avais cru comprendre que ça n’était pas si compliqué de poster des messages en passant par une requête POST. Je m’explique :


La méthode : GET / POST

Pour faire simple, il existe plusieurs méthodes pour échanger des données avec un serveur web. La plupart du temps, on utilise GET qui permet de se faire envoyer des données. C’est de cette manière qu’on affiche une page web : le serveur nous envoie le code de la page à notre navigateur qui l’interprète.

Quand on se connecte à un site, là c’est nous qui envoyons des données au site, très concrètement nos login et mot de passe, afin qu’il vérifie que nous sommes bien inscrit. Le navigateur utilise dans ce cas un POST.

Un webhooks Discord, c’est quoi ?

Un webhooks, c’est tout simplement un service qui va être à l’écoute de ce qu’on va lui envoyer. Sur un serveur Discord, il va récupérer ce qui lui est envoyé et le poster dans un canal de discussion déterminé. Ca tombe bien, c’est exactement ce que je veux faire.

Mon script

Dans mon cas, je vais faire un script, enfin deux, avec tous les paramètres à destination du webhooks, que je vais lancer dans le script principal juste avant le début et après la fin de la sauvegarde. Le tout est en bash, j’utilise rsync pour faire de la sauvegarde incrémentale : cette commande à l’avantage de ne synchroniser que les fichiers qui ont été modifiés depuis la précédente sauvegarde.

J’ouvre mon éditeur préféré avec la commande

nano discord_start.sh

Et j’insère le code suivant :

#!/bin/bash


set -e

SMILEY=':white_check_mark:'
DATE=$(date)
MESSAGE=': Synchronisation terminée'
WEBHOOK=https://discord.com/api/webhooks/url_du_webhook_dans_discord
USERNAME='Nom_du_bot'
AVATAR=http://url_du_logo.png

curl -X POST \
     -F "content=${SMILEY} ${DATE} ${MESSAGE}" \
     -F "username=${USERNAME}" \
     -F "avatar_url=${AVATAR}" \
     "${WEBHOOK}"

Je déclare d’abord toutes les variables et je formule la requête POST avec les paramètres dans un second temps. Notez ici que j’ai plusieurs éléments à poster : un smiley, la date et l’heure actuelle, et enfin le message en lui même.

Je ferme l’éditeur avec CTRL+X, puis Y pour sauvegarder et enfin ENTREE. Je rends le fichier exécutable avec la commande

chmod +x discord_start.sh

Je copie ensuite le script pour envoyer un autre message à la fin de la sauvegarde.

J’aurais pu écrire la commande en une fois directement, et même la mettre dans le script de sauvegarde. Mais c’est beaucoup plus facile à maintenir en séparant les commandes et en faisant passer des variables.

Voilà le résultat pour un peu plus de 20Go synchronisé à 14MBps

Dans mon script principal, j’appelle les scripts discord juste avant le début et juste après la fin de la sauvegarde.

./discord_start.sh

Evidemment, mes scripts sont dans le même dossier. Cela fait que je n’ai pas à spécifier le chemin absolu de discord_start.sh


Pour ceux qui veulent aller plus loin

J’ai, dans mon exemple, envoyé les champs « content » username » & « avatar_url », mais il y en a d’autres. Le webhook peut recevoir les champs suivants :

Le mot de la fin

Voilà pour ce premier contact avec les webhooks discord en dehors d’outils préconfigurés.

J’ai juste survolé le sujet car il y a moyen d’envoyer des requêtes bien plus fournies, avec une mise en page plus jolie …

Exemple de publication faite avec Uptime Kuma

Pour une autre fois peut-être !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.