# Ulfbot Ein Telegram-Bot, der mithilfe von Markov Chains neue Sätze aus vorherigen Nachrichten generiert. ## Features - Lernt von allen Text-Nachrichten in einer Gruppe - Generiert grammatikalisch sinnvolle Sätze mit Trigrammen - Antwortet bei Reply, Erwähnung (@username) oder zufällig - Pro-Chat-Wahrscheinlichkeit einstellbar (Admins) - Persistente SQLite-Datenbank - Docker-Support ## Schnellstart ### Mit Docker (empfohlen) ```bash # Repository klonen git clone cd ulfbot # .env erstellen cp .env.example .env # BOT_TOKEN in .env eintragen # Bauen und starten npm run build docker compose up -d --build ``` ### Ohne Docker ```bash # Abhängigkeiten installieren npm install # .env erstellen cp .env.example .env # BOT_TOKEN in .env eintragen # Kompilieren npm run build # Starten npm start ``` ### Entwicklung ```bash npm install npm run dev # Hot-Reload aktiv ``` ## Bot erstellen 1. [@BotFather](https://t.me/BotFather) auf Telegram öffnen 2. `/newbot` senden 3. Namen und Username wählen 4. Den erhaltenen Token in `.env` als `BOT_TOKEN` eintragen ## Befehle | Befehl | Beschreibung | |--------|--------------| | `/start` | Begrüßung anzeigen | | `/hilfe` | Hilfe anzeigen | | `/prob` | Aktuelle Antwortwahrscheinlichkeit | | `/setprob <0-100>` | Wahrscheinlichkeit setzen (Admins) | | `/cleanup` | Datenbank bereinigen (Admins) | ## Trigger für Antworten Der Bot antwortet wenn: - Auf eine seiner Nachrichten geantwortet wird (Reply) - Sein @Username erwähnt wird - Zufällig (basierend auf eingestellter Wahrscheinlichkeit) In privaten Chats antwortet er immer. ## Technisches ### Architektur - **Markov Chain** mit Trigrammen für bessere Grammatik - **SQLite** für persistente Speicherung - Pro Chat separate Daten/Lernkurve ### Datenbank-Cleanup - Automatisch alle 24 Stunden - Entfernt seltene Übergänge (nur einmal gesehen) - Limitiert auf 10.000 Übergänge pro Chat - Schützt neue Chats (min. 100 Übergänge nötig) ### Projektstruktur ``` src/ ├── index.ts # Bot-Logik, Commands ├── markov.ts # Markov Chain Implementation └── database.ts # SQLite Persistenz ``` ## Lizenz ISC