Files
ulfbot/README.md
sarah e49bd060d2
Some checks failed
Auto Build and Push Docker Image / build (push) Failing after 46s
Docs: Update README and CLAUDE.md for recent architecture changes
- Updated docs to reflect switch to Bigrams (order 1)
- Documented incremental DB updates and performance caching
- Added mention of @-ping protection in features
- Updated AI context guidance (20 messages instead of 50)
- Fixed AI_SYSTEM_PROMPT env fallback in index.ts
2026-05-14 13:38:23 +02:00

171 lines
4.1 KiB
Markdown

# 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 kreative Sätze mit Bigrammen (hohe Diversität)
- **Automatischer @-Ping-Schutz** (entfernt @ vor dem Senden)
- Antwortet bei Reply, Erwähnung (@username) oder zufällig
- Pro-Chat-Wahrscheinlichkeit einstellbar (Admins)
- **KI/LLM-Integration** (OpenAI, Ollama, OpenRouter, etc.)
- **Leistungsoptimiert:** Inkrementelle SQLite-Updates statt kompletter Rewrites
- Docker-Support
## Schnellstart
### Mit Docker (empfohlen)
```bash
# Repository klonen
git clone <repo-url>
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:
- `data/system-prompt.txt` (persistentes Verzeichnis)
- Wird beim ersten Start aus der mitgelieferten Vorlage kopiert
- Kann bearbeitet werden, Änderungen überleben Container-Rebuilds
- **Gruppen-Prompt** (pro Chat) - Leer voreingestellt, kann `/ai setup` ergänzen
**Ablauf beim ersten Start:**
1. Bot prüft ob `data/system-prompt.txt` existiert
2. Falls nicht → Kopiert von `dist/system-prompt.txt` (mitgelieferte Vorlage)
3. Lädt System-Prompt aus `data/system-prompt.txt`
**Datei bearbeiten:**
- `data/system-prompt.txt` kann direkt editiert werden
- Neustart des Containers nicht nötig (wird bei jeder KI-Anfrage geladen)
## 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 Bigrammen für hohe Kreativität und Abwechslung
- **SQLite** mit performanten ON CONFLICT Updates
- 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