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
2026-03-23 20:11:18 +01:00
2026-03-23 20:11:18 +01:00
2026-03-23 20:11:18 +01:00
2026-03-23 20:11:18 +01:00

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)

# 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

  1. @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)

# 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

Description
No description provided
Readme 128 KiB
Languages
TypeScript 99.4%
Dockerfile 0.6%