Ich habe hier einige Backup-Scripte, die auch mal etwas länger laufen, wo ich eine Benachrichtigung haben wollte. Unter anderem muss nach einem Backup-Lauf die externe USB-Festplatte für mein Offsite-Backup wieder abgezogen werden.

Da ich eh schon einen Discord-Account hatte, bot es sich an, per Webhook mir aus dem jeweiligen Script heraus eine Nachricht zu schicken.

Channel anlegen

Es bietet sich an, einen extra Channel im Discord dafür anzulegen. Meiner heißt “bots”.

Kanal des Bots bearbeiten

Hook anlegen

Um einen Webhook anzulegen, wählt man den gewünschten Channel aus, klickt auf das daneben stehende Rädchen, um den Kanal zu bearbeiten. Im folgenden Menü auf den Unterpunkt “Integrationen” klicken und als nächstes die Schaltfläche “Webhook erstellen” anklicken.

Webhook erstellen

Über den Pfeil, die weiteren Optionen aufklappen:

Webhook bearbeiten

Hier den Hook umbenennen oder doch noch einem anderen Channel zuweisen. Der Klick auf die Schaltfläche “WebHook-URL kopieren” bringt diesen in die Zwischenablage.

Webhook URL

Scripte

Zuerst kam der Wunsch auf, sich bei Ende des Backup-Scriptes eine Meldung zuschicken zu lasssen, dass es fertig ist. Entweder kann dann das nächste angeworfen werden oder es kann die externe USB-Festplatte abgekoppelt werden. Später kam dann der Wunsch auf, dass ich auch bei Fehlern eine Benachrichtigung bekomme. Weil ich keine große Lust hatte, da ein ordentliches Script mit einer Fall-Unterscheidung zu schreiben, habe ich es der Einfachheit halber dupliziert.

OK-Meldung

Die Gut-Meldung hat einen grünen Balken an der Seite und meldet ein “Backup fertig”.

Webhook Info-Meldung

Im Nachfolgenden Script discord-bot.sh muss die Webhook-URL noch durch den Inhalt der Variablen discord_url ersetzt werden.

 1#!/bin/bash
 2# Discord Webhook
 3THE_SCRIPTNAME="${1}"
 4discord_url="https://discord.com/api/webhooks/958845757975330887/wr21BPYs5jECw2OTAo86crAjGrAvbgaexvCAKqCFCgVDr5IFxQtrm5ON4CRAaBmP"
 5
 6generate_post_data() {
 7  cat <<EOF
 8{
 9  "content": "Backup fertig",
10  "embeds": [{
11    "title": "Backup Script ist fertig!",
12    "description": "Script ${1}",
13    "color": "45973"
14  }]
15}
16EOF
17}
18
19# POST request to Discord Webhook
20curl -H "Content-Type: application/json" -X POST -d "$(generate_post_data ${THE_SCRIPTNAME} )" $discord_url

Fehlermeldung

Wenn ein Fehler passiert, gibt es einen roten Balken an der Seite. Zusätzlich habe ich dem Text einen Zeilenumbruch mit \n verpasst.

Webhook Fehler-Meldung

Auch hier im nachfolgenden Script discord-bot-error.sh den Variablen-Inhalt discord_url wieder ersetzen.

 1#!/bin/bash
 2# Discord Webhook
 3THE_SCRIPTNAME="${1}"
 4FEHLER_MELDUNG="${2}"
 5discord_url="https://discord.com/api/webhooks/958845757975330887/wr21BPYs5jECw2OTAo86crAjGrAvbgaexvCAKqCFCgVDr5IFxQtrm5ON4CRAaBmP"
 6
 7generate_post_data() {
 8  cat <<EOF
 9{
10  "content": "Backup Error",
11  "embeds": [{
12    "title": "Backup Script wirft Fehler!",
13    "description": "Script ${1}\nIrgendwas ist bei diesem Script schiefgelaufen.",
14    "color": "15548997"
15  }]
16}
17EOF
18}
19
20# POST request to Discord Webhook
21curl -H "Content-Type: application/json" -X POST -d "$(generate_post_data ${THE_SCRIPTNAME} ${FEHLER_MELDUNG})" $discord_url

Die Farbe der Balken

Die Farbe der Balken lässt sich ändern. Weiter unten ist eine tabellarische Auflistung.

Verwendung bzw. Aufruf im Backup-Script

Der Aufruf im Backup-Script ist dann simpel, hier das discord-bot.sh in der letzten Zeile aufrufen:

1discord-bot.sh "${0}"

Im Fehlerfall an entsprechender Stelle

1discord-bot-error.sh "${0}"

Die beiden Bash-Dateien sollte natürlich ausführbar im Suchpfad von $PATH sein.

Farben der Balken

Die erlaubten Farbwerte hatte ich irgendwo mal in diesem Internet gefunden, leider weiß ich nicht mehr wo.

Name Wert bei color
Aqua 1752220
Blue 3447003
DarkAqua 1146986
DarkBlue 2123412
DarkerGrey 8359053
DarkGold 12745742
DarkGreen 2067276
DarkGrey 9936031
DarkNavy 2899536
DarkOrange 11027200
DarkPurple 7419530
DarkRed 10038562
DarkVividPink 11342935
Gold 15844367
Green 5763719
Grey 9807270
LightGrey 12370112
LuminousVividPink 15277667
Navy 3426654
Orange 15105570
Purple 10181046
Red 15548997
Yellow 16776960

Verbesserungsvorschläge

Ihr könnt gerne auf GitLab einen Pull-Request einreichen.