# Ulfbot Ein Telegram-Bot, der mithilfe von Markov Chains neue Sätze aus vorherigen Nachrichten generiert. Optional mit KI/LLM-Integration. ## 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) - **KI/LLM-Integration** (OpenAI, Ollama, OpenRouter, etc.) - 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 ### Markov (Standard) | Befehl | Beschreibung | |--------|--------------| | `/start` | Begrüßung anzeigen | | `/hilfe` | Hilfe anzeigen | | `/prob` | Aktuelle Antwortwahrscheinlichkeit | | `/setprob <0-100>` | Wahrscheinlichkeit setzen (Admins) | | `/cleanup` | Datenbank bereinigen (Admins) | ### KI/LLM | Befehl | Beschreibung | |--------|--------------| | `/ai setup` | KI-Setup starten (Admins, Privat-Chat) | | `/ai status` | Aktuelle KI-Konfiguration | | `/ai on/off` | KI aktivieren/deaktivieren | | `/ask-ai [text]` | KI-Antwort generieren | ## Trigger für Antworten ### Markov (Standard) - Reply auf Bot-Nachricht - @Username-Erwähnung - Zufällig (einstellbare Wahrscheinlichkeit) ### KI/LLM - `/ask-ai [text]` Command - Konfigurierbares Triggerwort (z.B. `ask-ai`) - Zufällig (einstellbare Wahrscheinlichkeit) ## KI-Integration ### Setup 1. `/ai setup` in einer Gruppe ausführen 2. Der Bot sendet eine private Nachricht mit Setup-Wizard 3. Provider, API-Key, Model konfigurieren 4. API-Keys werden sicher gespeichert und maskiert angezeigt ### Unterstützte Provider | Provider | API-Format | |----------|------------| | OpenAI | OpenAI API | | Ollama | OpenAI-kompatibel (lokal) | | OpenRouter | OpenAI-kompatibel | | Custom | OpenAI-kompatibel | ### Umgebungsvariablen (.env) ```env # Bot Token (erforderlich) BOT_TOKEN=your_telegram_bot_token # KI/LLM Settings (optional) AI_DEFAULT_API_KEY=your_openai_api_key AI_DEFAULT_BASE_URL=https://api.openai.com/v1 AI_DEFAULT_MODEL=gpt-4o-mini AI_SYSTEM_PROMPT=Du bist ein freundlicher Chat-Bot... ``` ### Prompt-System - **Globaler System-Prompt** - Immer aktiv, geladen aus: 1. `data/system-prompt.txt` (persistent, wird automatisch erstellt) 2. Fallback: Default "SchrottBot"-Persönlichkeit - **Gruppen-Prompt** (pro Chat) - Leer voreingestellt, kann `/ai setup` ergänzen **system-prompt.txt:** - Wird beim ersten Start automatisch in `data/` erstellt - Enthält die UlfBot/SchrottBot-Persönlichkeit - Kann bearbeitet werden, ohne den Container neu zu bauen ## Technisches ### Architektur ``` src/ ├── index.ts # Bot-Logik, Commands, Setup-Wizard ├── markov.ts # Markov Chain Implementation ├── database.ts # SQLite Persistenz └── ai.ts # OpenAI-kompatibler Client ``` - **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) ## Lizenz ISC