2020-02-04 16:03:52 +01:00
|
|
|
Bei diesem Projekt handelt es sich um einen Telegram-Bot, der täglich (und auf
|
|
|
|
Anfrage) den Speiseplan der Mensa Mittweida abruft und an registrierte Chats
|
|
|
|
versendet. Der Bot wurde in Python geschrieben und nutzt die
|
|
|
|
[Telepot](https://github.com/nickoala/telepot)-Bibliothek zur Kommunikation
|
|
|
|
mit der Telegram-API.
|
|
|
|
|
|
|
|
## Was kann der Bot
|
|
|
|
### alle Nutzer
|
|
|
|
- Registrierung und Entfernen von Chats (`/start` bzw. `/stop`)
|
|
|
|
- schnelles Abrufen des Plans (`/essen`, ggf. mit *en* oder *de* dahinter)
|
|
|
|
- Ändern der Sprache (`/settings` (damit kann dieser Befehl automatisch über
|
|
|
|
die Optionen aufgerufen werden))
|
|
|
|
- Anzeige von Informationen/Befehlen (`/help`; gleicher Grund wie oben)
|
|
|
|
### nur für in der Konfigurationsdatei festgelegte Admins
|
|
|
|
- Anzeige des aktuellen Status (`/status`)
|
|
|
|
- einfache Logging-Funktion (`/logging [on/off]`, ohne Parameter für aktuellen Status)
|
|
|
|
|
|
|
|
## Vorraussetzungen
|
|
|
|
### Hardware
|
|
|
|
Der Bot sollte möglichst immer aktiv sein. Dafür eignet sich z. B. ein
|
|
|
|
Raspberry Pi gut. Eine Installation auf einem Cloudcomputer ist vermutlich auch
|
|
|
|
möglich, allerdings ist der Bot nicht darauf ausgelegt und könnte so evtl. zu
|
|
|
|
hohen Kosten führen, da er immer aktiv auf Nachrichten lauscht (ich weiß nicht,
|
|
|
|
wie genau das umgesetzt wurde, vielleicht ist es auch nicht so). Auf einem
|
|
|
|
"normalen" Rechner läuft der Bot auch, allerdings naatürlich nur, solange auch
|
|
|
|
der Rechner an ist.
|
|
|
|
|
|
|
|
### Sonstiges
|
|
|
|
Für einen Bot wird ein Bot-Token benötigt. Dieser kann über den
|
|
|
|
[BotFather](https://t.me/botfather) angefordert werden. Darüber können auch
|
|
|
|
Bild, Name (momentan "*HSMensaW*"), Beschreibung (wird im Bot-Chat oben
|
|
|
|
angezeigt; momentan "*Dieser Bot versendet täglich um 10 Uhr den aktuellen
|
|
|
|
Mensaplan der Hochschule Mittweida (wenn sie geöffnet hat). Außerdem kann der
|
|
|
|
aktuelle Plan abgerufen werden. Mit dem Befehl /info werden alle anderen
|
|
|
|
Befehle angezeigt.*") und Über-Text (wird im "Profil" des Bots angezeigt;
|
|
|
|
momentan "*Versendet täglich um 10 Uhr den aktuellen Mensaplan der Hochschule
|
|
|
|
Mittweida.*") angepasst werden.
|
|
|
|
|
|
|
|
## Installation
|
|
|
|
### Abhängigkeiten
|
2020-02-20 18:21:00 +01:00
|
|
|
Der Bot läuft mit [Python 3](https://www.python.org/). Die benötigten Bibliotheken (*telepot*, *babel* und
|
2020-02-04 16:03:52 +01:00
|
|
|
*googletrans*) können (normalerweise, evtl. auch ohne die "3"; ggf anpassen)
|
|
|
|
über folgenden Befehl installiert werden:
|
|
|
|
|
|
|
|
pip3 install telepot babel googletrans
|
|
|
|
|
|
|
|
### Minimalkonfiguration
|
|
|
|
Der Bot liest beim Start die Konfiguration aus einer Konfigurationsdatei
|
|
|
|
(*config.json*) ein (und schreibt ggf. eine geänderte Konfiguration dorthin).
|
|
|
|
Auch beim ersten Start muss diese Datei existieren und mindestens folgenden
|
|
|
|
Inhalt haben:
|
|
|
|
|
|
|
|
{
|
|
|
|
"telegram_bot_token": "123456789:ABC-t3l36RaM_t0K3n",
|
|
|
|
"url": "https://app.hs-mittweida.de/speiseplan/all",
|
|
|
|
"ids": {},
|
|
|
|
"config_ids": [],
|
|
|
|
"logging_enabled": false
|
|
|
|
}
|
|
|
|
|
|
|
|
Sinnvollerweise sollte auch mindestens eine Config-ID gesetzt sein
|
|
|
|
([Chat-ID](https://stackoverflow.com/q/31078710) des Besitzers). Eine echte
|
|
|
|
Konfigurationsdatei könnte so aussehen:
|
|
|
|
|
|
|
|
{
|
|
|
|
"telegram_bot_token": "123456789:ABC-t3l36RaM_t0K3n",
|
|
|
|
"url": "https://app.hs-mittweida.de/speiseplan/all",
|
|
|
|
"ids": {
|
2020-02-20 18:21:00 +01:00
|
|
|
"12345678": "GERMAN",
|
|
|
|
"11235813": "ENGLISH",
|
2020-02-04 16:03:52 +01:00
|
|
|
"-98765432": "GERMAN_ENGLISH"
|
|
|
|
},
|
|
|
|
"config_ids": [
|
|
|
|
12345678
|
|
|
|
],
|
|
|
|
"logging_enabled": false
|
|
|
|
}
|
|
|
|
|
|
|
|
### Start
|
2020-02-20 19:06:52 +01:00
|
|
|
### einfach
|
2020-02-04 16:03:52 +01:00
|
|
|
Der Bot kann über `python3 <Bot.py>` gestartet werden (die aktuelle Version
|
|
|
|
heißt *HSMensaW_botA.py*). Danach sollte er problemlos laufen. *stdout* und
|
|
|
|
*stderr* werden jeweils in eine Datei (*out.log* bzw. *err.log*) umgeleitet,
|
2020-02-20 19:06:52 +01:00
|
|
|
wobei es dort u. U. erst nach dem Beenden des Bots auftaucht.
|
|
|
|
|
|
|
|
### immer
|
|
|
|
Im Projektordner gibt es ein Shellscript (*telebot_watchdog*), welches beim
|
|
|
|
Ausführen dafür sorgt, dass der Bot exakt einmal läuft. Wenn dieses Skript
|
|
|
|
(z. B. per Cron) regelmäßig gestartet wird, wird sichergestellt, dass der
|
|
|
|
Bot immer läuft (auch nach einem Neustart oder Crash).
|
|
|
|
Dafür müssen folgende Zeilen in die [Crontab](https://wiki.ubuntuusers.de/Cron/#Cronjobs-manuell-einrichten) eingetragen werden:
|
|
|
|
|
|
|
|
@reboot /home/pi/scripts/telebot_watchdog
|
|
|
|
* * * * * /home/pi/scripts/telebot_watchdog
|
|
|
|
|
|
|
|
(wobei die erste Zeile eigentlich überflüssig ist). Die Pfade müssen
|
|
|
|
natürlich angepasst werden, genauso im Skript selbst.
|