Files
pixelpoebel/README.md
sarah 390297936d
All checks were successful
Auto Build and Push Docker Image / build (push) Successful in 28s
fix: make trigger list public and ephemeral, fix rolesetup types, and improve bot safety
- Make /trigger list and help public subcommands with ephemeral replies
- Restrict /trigger add and remove to moderators/admins
- Use Unicode-aware regex and strip URLs before trigger word matching
- Ensure guild_settings exist before UPDATE queries in welcome and log commands
- Fix rolesetup edit neue_rolle type to addRoleOption and prevent label truncation
- Reset select menu components after selection so users can re-click same options
- Validate Twitch streamers via Helix Users API and prevent interaction timeouts with deferReply
- Connect TwitchMonitor automatically on startup and when first channel is added
- Add moderation role-hierarchy checks to admin commands and enforce timeout limits
- Disable DM execution on server-bound commands to prevent SQLite null constraint errors
- Update README.md and AGENTS-BOT.md with new constraints and command documentation
2026-11-01 12:34:54 +01:00

177 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Pixelpöbel Discord Bot
Ein moderner, modularer Discord-Bot in TypeScript.
## 🚀 Installation
```bash
npm install
```
## ⚙️ Konfiguration
Erstelle `.env` Datei:
```env
DISCORD_TOKEN=dein_bot_token
CLIENT_ID=deine_client_id
TWITCH_CLIENT_ID=deine_twitch_id
TWITCH_CLIENT_SECRET=deine_twitch_secret
TWITCH_USERNAME=dein_twitch_username
TWITCH_OAUTH_TOKEN=oauth:xxxxxxxxxxxxxxxxxx
BOT_OWNER_ID=deine_discord_user_id
# Optional: Automatische Slash-Command Registrierung bei Bot-Start (default: true)
AUTO_DEPLOY=true
```
### TwitchMonitor Setup
1. **Twitch OAuth Token holen:** https://chatterino.com/client_login
2. **Username:** Dein Twitch Username
3. **Bot Owner ID:** Deine Discord User ID (für Fehlerbenachrichtigungen)
> ⚠️ **Hinweis:** Der Twitch OAuth Token kann ungültig werden. In diesem Fall wirst du automatisch per Discord DM benachrichtigt.
## 🚀 Start
```bash
# Development
npm run dev
# Production
npm run build
npm start
```
## 🐳 Docker
```bash
# Build und Start
docker-compose up -d --build
# Logs ansehen
docker-compose logs -f pixelpoebel-bot
# Stoppen
docker-compose down
# Container neu bauen
docker-compose up -d --build --force-recreate
```
## 📋 Commands registrieren
Befehle werden standardmäßig **automatisch bei jedem Bot-Start** registriert. Du kannst dies über `AUTO_DEPLOY=false` in der `.env` deaktivieren.
Für manuelle Updates oder im Notfall:
```bash
npm run deploy
```
## 🎮 Befehle
### Öffentlich
- `/ping` – Latenz test
- `/help` – Alle Befehle
- `/cat [typ]` – Zufälliges Katzenbild oder Katzen-GIF (Auswahl: Bild / GIF)
- `/catgif` – Zufälliges Katzen-GIF direkt posten
- `/twitch online <channel>` – Twitch-Status
- `/twitch list` – Überwachte Kanäle
- `/twitch help` – Twitch-Hilfe
- `/timer list` – Timer dieses Kanals
- `/timer help` – Timer-Hilfe
- `/trigger list` – Alle Trigger anzeigen (ephemeral)
- `/trigger help` – Trigger-Hilfe (ephemeral)
### Timer (Erinnerungen)
- `/timer add <zeit> <nachricht>` – Timer hinzufügen
- `/timer remove <id>` – Timer entfernen (Mod)
- `/timer list` – Timer dieses Kanals
- `/timer listall` – Alle Timer (Mod)
- `/timer help` – Timer-Hilfe
### Stoppuhr (Hochzählender Timer)
- `/stopwatch start <name> [startzeit]` – Startet eine neue Stoppuhr mit Namen (Mod)
- `/stopwatch status [name]` – Abgelaufene Zeit öffentlich abfragen (Für alle sichtbar)
- `/stopwatch stop <name>` – Stoppuhr beenden & Laufzeit ausgeben (Mod)
- `/stopwatch list` – Aktive Stoppuhren des Servers öffentlich auflisten (Für alle sichtbar)
- `/stopwatch help` – Stoppuhr-Hilfe
### Trigger (Auto-Antworten)
- `/trigger add <wort> <antwort>` – Trigger hinzufügen (Mod)
- `/trigger remove <wort>` – Trigger entfernen (Mod)
- `/trigger list` – Alle Trigger anzeigen (Für alle User, ephemeral)
- `/trigger help` – Trigger-Hilfe (Für alle User, ephemeral)
### Twitch
- `/twitch online <kanal>` – Prüft ob Kanal online ist
- `/twitch add <streamer1, streamer2, ...>` – Streamer überwachen (Mod)
- `/twitch remove <streamer1, streamer2, ...>` – Streamer entfernen (Mod)
- `/twitch list` – Überwachte Kanäle
- `/twitch listall` – Alle überwachten Streamer (Mod)
- `/twitch help` – Twitch-Hilfe
### TwitchMonitor (IRC Chat Logging)
- `/twitchmonitor add <twitch> <discord>` – Twitch-Kanal zum IRC-Monitoring hinzufügen (Mod)
- `/twitchmonitor remove <twitch>` – Kanal vom Monitoring entfernen (Mod)
- `/twitchmonitor list` – Alle überwachten Twitch-Kanäle
- `/twitchmonitor help` – Hilfe anzeigen
### Rollen-Auswahl
- `/rolesetup create <#kanal> <name>` – Rollen-Auswahl Message erstellen
- `/rolesetup add <kategorie> <@rolle> [emoji]` – Rolle zur Auswahl hinzufügen
- `/rolesetup edit <kategorie> <rolle> [neue_rolle] [neues_emoji]` – Rolle oder Emoji ändern
- `/rolesetup remove <kategorie> <rolle>` – Rolle entfernen
- `/rolesetup delete <kategorie>` – Kategorie löschen
- `/rolesetup config <kategorie> max:1 exclusive:true` – Einstellungen
- `/rolesetup list` – Alle Kategorien anzeigen
### Welcome & Goodbye
- `/welcome setchannel <#kanal>` – Kanal für Willkommen/Abschied setzen (Mod)
- `/welcome add <welcome|goodbye> <nachricht>` – Nachricht setzen (Mod)
- `/welcome remove <welcome|goodbye>` – Nachricht entfernen (Mod)
- `/welcome list` – Aktuelle Einstellungen anzeigen (Mod)
- `/welcome help` – Welcome-Hilfe
### Log (Server-Logs)
- `/log setchannel <#kanal>` – Log-Kanal setzen (Mod)
- `/log enable <event>` – Event zum Loggen aktivieren (Mod)
- `/log disable <event>` – Event deaktivieren (Mod)
- `/log list` – Aktive Log-Events anzeigen (Mod)
- `/log help` – Log-Hilfe
### Admin
- `/admin kick <user>` – Nutzer kicken
- `/admin warn <user> <reason>` – Nutzer verwarnen
- `/admin unwarn <user>` – Letzte Warnung entfernen
- `/admin mute <user> <dauer> <einheit>` – Nutzer muten
- `/admin unmute <user>` – Nutzer entmuten
- `/admin ban <user>` – Nutzer bannen
- `/admin unban <id>` – Nutzer entbannen
- `/admin purge amount <1-100>` – X Nachrichten löschen
- `/admin purge time <dauer> <min|hour>` – Nachrichten der letzten X Zeit löschen
- `/admin purge user <user> <1-100>` – X Nachrichten eines Nutzers löschen
- `/admin purge all` – Alle Nachrichten löschen (max 100)
- `/admin config` – Warn-System konfigurieren
- `/admin help` – Admin-Hilfe
### Owner
- `/owner deploy` – Commands neu registrieren
- `/owner stats` – Bot-Statistiken
- `/owner servers` – Alle Server
- `/owner help` – Owner-Hilfe
## 📡 Features & Optimierungen
- ✅ **Modular Architecture:** TypeScript-basiert, ESM-Unterstützung, strikte Typisierung.
- ✅ **High Performance Database:** SQLite mit **WAL-Modus**, **Fremdschlüssel-Unterstützung**, **Datenbank-Indizes** (für schnelle Abfragen von Mod-Logs, Timern und Twitch-Monitoren) und **chirurgischem In-Memory Caching** für Guild-Settings und Trigger.
- ✅ **Centralized Event Logging:** Ein zentrales `EventLogger`-System zur strukturierten und verlässlichen Erfassung von Server-Ereignissen (Nachrichten, Rollen, Nicknames, Kanäle, Kicks, Bans, Warnungen).
- ✅ **Optimized Twitch Polling:** Nutzt **Batch-Requests** (100 Kanäle pro Request), Datenbank-Transaktionen und ein 2-Minuten-Intervall für zeitnahe Benachrichtigungen.
- ✅ **TwitchMonitor IRC:** Echtzeit IRC Chat-Logging (Mod-Events) via **wiederverwendbaren Webhooks** und FIFO-Cache.
- ✅ **Advanced Moderation & Safety:** Warn-System mit Auto-Actions, umfangreiches Purge-System, Rollen-Hierarchie-Schutz (Moderatoren können sich oder höherrangige Rollen nicht kicken/bannen/muten), abgesicherte Timeout-Limits (max. 28 Tage gemäß Discord-API) und vollständiges Exception handling.
- ✅ **Role Selection:** Self-Service Rollen-System über Discord Select Menus mit automatischer Berechtigungsprüfung, Menü-Reset nach Auswahl und Fehlerabfangung.
- ✅ **Smart Auto-Response System:** Präzises Trigger-Wort-Matching mit Unicode-Wortgrenzen (`\p{L}`), URL-Filterung gegen False Positives und ephemeraler Trigger-Liste für alle Server-Mitglieder.
- ✅ **Reminders:** Intelligentes Zeit-Parsing (z.B. "morgen 15:00", "30min").
- ✅ **Persistent Stopwatches:** Namentliche hochzählende Stoppuhren mit SQLite-Speicherung, Unterstützung für optionale vergangene Startzeiten (z.B. "14:30", "2h"), Duplikat-Schutz und relativer Discord-Zeitdarstellung.
- ✅ **Developer & Team Support:** Unterstützung von Discord Developer Teams und `BOT_OWNER_ID` Fallback für Owner-Befehle.
- ✅ **Docker Support:** Containerisiertes Deployment inklusive Volume-Mounts für Daten.