Some checks failed
Auto Build and Push Docker Image / build (push) Failing after 8s
- Include SchrottBot personality as bundled default - Copy to data/ on first startup (persistent, editable) - Load from persistent location after first run - Changes survive container rebuilds Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
170 lines
4.0 KiB
Markdown
170 lines
4.0 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 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 <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 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 |