108 lines
2.1 KiB
Markdown
108 lines
2.1 KiB
Markdown
# Ulfbot
|
|
|
|
Ein Telegram-Bot, der mithilfe von Markov Chains neue Sätze aus vorherigen Nachrichten generiert.
|
|
|
|
## 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)
|
|
- 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
|
|
|
|
| Befehl | Beschreibung |
|
|
|--------|--------------|
|
|
| `/start` | Begrüßung anzeigen |
|
|
| `/hilfe` | Hilfe anzeigen |
|
|
| `/prob` | Aktuelle Antwortwahrscheinlichkeit |
|
|
| `/setprob <0-100>` | Wahrscheinlichkeit setzen (Admins) |
|
|
| `/cleanup` | Datenbank bereinigen (Admins) |
|
|
|
|
## Trigger für Antworten
|
|
|
|
Der Bot antwortet wenn:
|
|
- Auf eine seiner Nachrichten geantwortet wird (Reply)
|
|
- Sein @Username erwähnt wird
|
|
- Zufällig (basierend auf eingestellter Wahrscheinlichkeit)
|
|
|
|
In privaten Chats antwortet er immer.
|
|
|
|
## Technisches
|
|
|
|
### Architektur
|
|
|
|
- **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)
|
|
|
|
### Projektstruktur
|
|
|
|
```
|
|
src/
|
|
├── index.ts # Bot-Logik, Commands
|
|
├── markov.ts # Markov Chain Implementation
|
|
└── database.ts # SQLite Persistenz
|
|
```
|
|
|
|
## Lizenz
|
|
|
|
ISC |