cb708127394d0743e0c363ab2050f2408a6cd00b
- Optimized Markov chain storage: Switched from full rewrites to incremental DB updates. - Improved AI creativity: Reduced repetitions using presence/frequency penalties and prompt tuning. - Increased Markov randomness: Lowered order to 1 and enabled learning of special characters/emojis. - Added @-ping protection: Automatically strips '@' symbols from AI and Markov responses. - Enhanced robustness: Added startup token checks, directory auto-creation, and admin/bot-info caching.
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)
# 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
# Abhängigkeiten installieren
npm install
# .env erstellen
cp .env.example .env
# BOT_TOKEN in .env eintragen
# Kompilieren
npm run build
# Starten
npm start
Entwicklung
npm install
npm run dev # Hot-Reload aktiv
Bot erstellen
- @BotFather auf Telegram öffnen
/newbotsenden- Namen und Username wählen
- Den erhaltenen Token in
.envalsBOT_TOKENeintragen
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
/ai setupin einer Gruppe ausführen- Der Bot sendet eine private Nachricht mit Setup-Wizard
- Provider, API-Key, Model konfigurieren
- 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)
# 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 setupergänzen
Ablauf beim ersten Start:
- Bot prüft ob
data/system-prompt.txtexistiert - Falls nicht → Kopiert von
dist/system-prompt.txt(mitgelieferte Vorlage) - Lädt System-Prompt aus
data/system-prompt.txt
Datei bearbeiten:
data/system-prompt.txtkann 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
Description
Languages
TypeScript
99.4%
Dockerfile
0.6%