chore: initial commit with counter bot, docker compose enhancements, html formatting, startup + join announcements
This commit is contained in:
110
README.md
110
README.md
@@ -1,2 +1,110 @@
|
||||
# GigalativBot
|
||||
# GigalativBot (Telegram Counter Bot)
|
||||
|
||||
Ein schlanker Telegram-Bot zum Verwalten einfacher Integer-Counter. Läuft per Long Polling in einem Docker-Container.
|
||||
|
||||
## Features
|
||||
- /add <name> – legt Counter (0) an
|
||||
- /remove <name> – löscht Counter
|
||||
- /increment <name> – erhöht Counter um 1 (Antwort mit neuem Wert)
|
||||
- /decrement <name> – verringert Counter um 1 (Antwort mit neuem Wert)
|
||||
- /list – zeigt alle Counter
|
||||
- /help – Übersicht
|
||||
- Counter-Namen case-insensitive (intern lowercase gespeichert)
|
||||
- Persistenz als JSON unter `/data/counters.json` (Docker Volume)
|
||||
- Zugriffsbeschränkung via allowed_chat_ids in `config.yaml`
|
||||
- Startup-Benachrichtigung an definierte Chats via ENV `STARTUP_ANNOUNCE_CHAT_IDS`
|
||||
- Begrüßung neuer Mitglieder (optional) via ENV `ANNOUNCE_ALL_JOINS=true`
|
||||
- Automatische Willkommens-Nachricht, wenn der Bot einer Gruppe hinzugefügt wird
|
||||
|
||||
## Struktur
|
||||
```
|
||||
.
|
||||
├─ bot.py
|
||||
├─ requirements.txt
|
||||
├─ Dockerfile
|
||||
├─ docker-compose.yaml
|
||||
├─ config.example.yaml (umbenennen zu config.yaml und anpassen)
|
||||
└─ README.md
|
||||
```
|
||||
|
||||
## Konfiguration
|
||||
Passe `config.example.yaml` an und benenne sie zu `config.yaml`.
|
||||
|
||||
Beispiel:
|
||||
```yaml
|
||||
bot_token: "123456:ABCDEF..." # oder via ENV BOT_TOKEN
|
||||
allowed_chat_ids: [123456789, -1001122334455]
|
||||
initial_counters:
|
||||
beispiel: 5
|
||||
log_level: INFO
|
||||
```
|
||||
Wenn `allowed_chat_ids` leer oder fehlt, sind alle Chats erlaubt.
|
||||
|
||||
### Wichtige Environment Variablen
|
||||
| Variable | Beschreibung | Beispiel |
|
||||
|----------|--------------|----------|
|
||||
| BOT_TOKEN | Telegram Bot Token (sensitiv, nicht committen) | 123456:ABCDEF |
|
||||
| STARTUP_ANNOUNCE_CHAT_IDS | Kommagetrennte Liste von Chat IDs für Start-Meldung | -4549916385,-1001122334455 |
|
||||
| ANNOUNCE_ALL_JOINS | `true` um alle neuen Mitglieder zu begrüßen | true |
|
||||
| CONFIG_FILE | Pfad zur Config Datei | /app/config.yaml |
|
||||
| DATA_DIR | Verzeichnis für Persistenz | /data |
|
||||
|
||||
## Start (Docker Compose)
|
||||
Setze dein Bot Token als Environment Variable oder trage es in der config.yaml ein.
|
||||
|
||||
### Variante 1: Token via .env
|
||||
Datei `.env` anlegen:
|
||||
```
|
||||
BOT_TOKEN=123456:ABCDEF...
|
||||
```
|
||||
Dann:
|
||||
```
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
### Variante 2: Token in config.yaml
|
||||
Trage `bot_token:` dort ein und entferne den `BOT_TOKEN` Eintrag aus `docker-compose.yaml` oder lass die ENV leer.
|
||||
|
||||
### Startup Ankündigung aktivieren
|
||||
Füge in `.env` hinzu (optional):
|
||||
```
|
||||
STARTUP_ANNOUNCE_CHAT_IDS=-4549916385
|
||||
ANNOUNCE_ALL_JOINS=true
|
||||
```
|
||||
|
||||
## Persistenz / Volume
|
||||
Alle Counter werden nach jeder Änderung in `/data/counters.json` gespeichert. Das Volume `counterbot_data` stellt dauerhafte Speicherung sicher.
|
||||
|
||||
## Sicherheit
|
||||
- Non-root User `appuser`
|
||||
- Kein Port-Expose (Long Polling)
|
||||
|
||||
## Logging
|
||||
Standard: INFO. Anpassbar über `log_level` in der Config.
|
||||
|
||||
Antwort-Ausgabe nutzt jetzt HTML-Formatierung (statt MarkdownV2) um Parse-Fehler bei Sonderzeichen zu vermeiden.
|
||||
|
||||
## Beispiel-Interaktion
|
||||
```
|
||||
/add test
|
||||
Counter test wurde angelegt (Wert 0).
|
||||
/increment test
|
||||
Counter test steht jetzt auf 1.
|
||||
/list
|
||||
Aktuelle Counter:
|
||||
- test: 1
|
||||
/remove test
|
||||
Counter test wurde gelöscht.
|
||||
```
|
||||
|
||||
## Erweiterungsideen
|
||||
- /set <name> <value>
|
||||
- /rename <old> <new>
|
||||
- Export als CSV/JSON über /export
|
||||
- Webhook-Modus + Traefik Labels
|
||||
- Rate Limiting pro User
|
||||
|
||||
## Lizenz
|
||||
Keine explizite Lizenz enthalten (privat). Ergänze bei Bedarf.
|
||||
|
||||
Viel Spaß!
|
||||
|
||||
Reference in New Issue
Block a user