Files
Nexumi/docs/PHASE-TRACKING.md
smueller 12066befa8 Add stats, feeds, scheduler, and guild backup features to the bot
- Introduced new models in the Prisma schema for statistics, social feeds, scheduled messages, and guild backups, enhancing the bot's functionality.
- Implemented command modules for managing stats channels, feeds, scheduling messages, and creating/restoring backups, improving user engagement and server management.
- Updated job handling to include dedicated workers for stats updates, feed polling, scheduling, and backup restoration, enhancing automation.
- Enhanced command localization for new features in both German and English.
- Documented the new features and their setup processes in PHASE-TRACKING.md for clarity on implementation steps.
2026-07-22 13:36:39 +02:00

215 lines
8.7 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.
# Nexumi Phasen-Tracking
Dieses Dokument hält den aktuellen Implementierungsstand fest. Es wird bei jedem Arbeitsfortschritt aktualisiert.
## Assets
- Bot-Logo vorhanden: `docs/logo/nexumi-logo.svg`
## Phase 1 Fundament (Status: abgeschlossen, manuelle Discord-Tests ausstehend)
### Bereits abgeschlossen
- Monorepo-Basis mit Workspaces:
- `apps/bot`
- `packages/shared`
- Basis-Tooling:
- TypeScript strict
- ESLint
- Prettier
- Vitest
- Turbo
- Docker-Compose-Grundstack:
- `postgres` mit Healthcheck
- `redis` mit Healthcheck
- `bot`
- `webui`-Scaffold-Service (temporär)
- `backups` Volume angebunden
- Prisma-Grundmodell inkl. Moderationsdaten:
- `Guild`
- `GuildSettings`
- `User`
- `Case`
- `Warning`
- `ModNote`
- `EscalationRule`
- Bot-Grundarchitektur:
- Sharding-Startpfad
- Command-Registrierung
- Command-Routing
- zentraler Permission-Check
- Basis-i18n in `@nexumi/shared`
- Guild-Locale-Auflösung über DB-Settings mit Fallback auf Env-Default
- Health-Endpoint (`/health`) und token-geschütztes `/metrics`-Scaffold
- BullMQ-Integration:
- Moderation-Queue
- Temp-Ban-Expire-Job
- täglicher Backup-Job (`pg_dump`)
- Backup-Retention-Cleanup
- Moderation als Referenzmodul (implementiert):
- `/ban`, `/unban`, `/kick`, `/timeout`, `/untimeout`
- `/warn add|list|remove|clear`
- `/warn escalation-set|escalation-list|escalation-remove`
- `/purge` (Filter: User, Bots, Links, Attachments, Regex)
- `/slowmode`, `/lock`, `/unlock`
- `/nick set|reset`
- `/case view|edit|delete`
- `/modnote add|list`
- user-facing Reply-Strings im Moderationsfluss auf i18n-Keys umgestellt (`de`/`en`)
- Slash-Command-Beschreibungen und Optionstexte lokalisiert (`de` + `en-US` via Discord-Localizations)
- Bestätigungsflow für destruktive Aktionen (`/ban`, `/purge`, `/case delete`) mit Buttons
- standardisierte Case-Audit-Metadaten über `@nexumi/shared` (`buildCaseMetadata`)
- Docker-Build/Runtime-Fixes für E2E:
- `.dockerignore` ergänzt
- Prisma-Migration beim Bot-Start (`prisma migrate deploy`)
- Bot-Healthcheck auf `/health`
- E2E-Verifikation (automatisiert, lokal):
- `docker compose up -d --build` erfolgreich
- Postgres/Redis healthy
- Migration `20260722123000_init` angewendet
- Bot online (`Nexumi#9122`), 13 Slash-Commands registriert
- Bot-Container healthy
- Tests (aktuell vorhanden):
- `packages/shared/src/i18n.test.ts`
- `packages/shared/src/audit.test.ts`
- `apps/bot/src/modules/moderation/duration.test.ts`
### Manuelle Discord-Tests (noch offen)
- Bot auf Test-Server einladen (falls noch nicht geschehen)
- Slash-Commands testen: `/ban`, `/warn add`, `/purge`, `/case view`
- Bestätigungsbuttons bei `/ban` und `/purge` prüfen
## Phase 2 AutoMod, Logging, Welcome, Verifizierung (Status: implementiert, manuelle Tests ausstehend)
### Abgeschlossen
- Prisma-Erweiterung + Migration `20260722140000_phase2_modules`:
- `AutoModConfig`, `AutoModRule`
- `LoggingConfig`, `LogChannel`
- `WelcomeConfig`
- `VerificationConfig`
- Shared-Schemas und Hilfsfunktionen (`packages/shared/src/phase2.ts`)
- **AutoMod** (`apps/bot/src/modules/automod/`):
- Filter: Spam, Massen-Mentions, Caps, Invite-Links, externe Links, Wortfilter, Duplikate, Emoji-Spam, Zalgo, Phishing-Blockliste
- Standardregeln werden pro Guild beim ersten Zugriff angelegt
- Anti-Raid (Join-Rate → Lockdown)
- Anti-Nuke (Massen-Bans/Channel-Löschungen → Rechteentzug)
- `/automod status`
- Phishing-Listen-Refresh via BullMQ (alle 6h + beim Start)
- **Logging** (`apps/bot/src/modules/logging/`):
- Event-Handler für alle SPEC-Events (Nachrichten, Member, Bans, Rollen, Kanäle, Voice, Invites, Emoji/Sticker, Threads, Guild-Update)
- Mod-Action-Log verknüpft mit Case-System (`logModAction` in `createCase`)
- Ignore-Listen (Kanäle, Rollen, Bots) über DB
- Log-Kanal-Zuordnung über `LogChannel`-Tabelle (Konfiguration künftig WebUI)
- **Welcome/Leave** (`apps/bot/src/modules/welcome/`):
- Text-, Embed- und Bild-Karten (Canvas via `@napi-rs/canvas`)
- Platzhalter-System
- Autoroles (User/Bots getrennt)
- Welcome-DM
- `/welcome test`, `/welcome preview`
- **Verifizierung** (`apps/bot/src/modules/verification/`):
- `/verify setup`, `/verify panel`
- Button-Verify und Captcha-Verify (Captcha-Seite unter `/verify/captcha` am Health-Server)
- Mindest-Accountalter, Fehlschlag-Aktionen (Kick/Ban/None)
- Unverified-Rolle bei Join
- Bot-Intents erweitert:
- `GuildMembers`, `GuildMessages`, `MessageContent`, `GuildModeration`, `GuildVoiceStates`, `GuildEmojisAndStickers`, `GuildInvites`
- Neue Env-Variable: `PUBLIC_BASE_URL` (Captcha-Links)
- Tests: `packages/shared/src/phase2.test.ts`
### Manuelle Discord-Tests (noch offen)
- **Privileged Intents** im Developer Portal aktivieren:
- `SERVER MEMBERS INTENT`
- `MESSAGE CONTENT INTENT`
- AutoMod: Spam-/Invite-Testnachrichten senden
- `/automod status` prüfen
- Logging: Log-Kanäle per DB/ später WebUI setzen, Events auslösen
- `/welcome preview` und `/welcome test` (Konfiguration zunächst per DB oder später WebUI)
- `/verify setup` + `/verify panel`, Button- und Captcha-Flow testen
- `PUBLIC_BASE_URL` auf erreichbare URL setzen (für Captcha außerhalb localhost)
### Hinweise
- Welcome-/Logging-Konfiguration erfolgt in Phase 2 über die Datenbank; die WebUI-Editoren kommen in Phase 7.
- Captcha-Seite läuft am Bot-Health-Port (`HEALTH_PORT`); in Produktion muss `PUBLIC_BASE_URL` darauf zeigen oder über Reverse-Proxy geroutet werden.
## Phase 3 Leveling, Economy, Utility, Fun (Status: implementiert, manuelle Tests ausstehend)
### Abgeschlossen
- Prisma-Migration `20260722150000_phase3_modules`:
- `LevelingConfig`, `MemberLevel`, `LevelReward`
- `EconomyConfig`, `MemberEconomy`, `ShopItem`, `InventoryItem`
- `Poll`, `PollVote`, `Reminder`, `AfkStatus`
- Shared-Helfer `packages/shared/src/phase3.ts` + Tests
- Commands und Events in Root verdrahtet (`commands.ts`, `index.ts`)
### Leveling (`apps/bot/src/modules/leveling/`)
- `/rank` (Canvas-Rankkarte), `/leaderboard`, `/xp give|remove|reset`
- Text-XP (Cooldown Redis) und Voice-XP
- Multiplikatoren, No-XP-Kanäle/-Rollen, Level-Rewards, Level-Up CHANNEL/DM/OFF
### Economy (`apps/bot/src/modules/economy/`)
- `/balance`, `/daily`, `/weekly`, `/work`, `/pay`
- `/gamble`, `/slots`, `/blackjack` (Buttons), `/coinflip` (Wette)
- `/shop view|buy`, `/inventory`, `/eco leaderboard|give|remove|reset`
- Währung pro Server in `EconomyConfig`
### Utility (`apps/bot/src/modules/utility/`)
- `/userinfo`, `/serverinfo`, `/roleinfo`, `/channelinfo`, `/avatar`, `/banner`
- `/poll create` (Buttons, DB, Ablauf via BullMQ)
- `/remindme`, `/reminders list|delete` (BullMQ)
- `/afk set`, `/emoji add|remove|steal`, `/sticker add`, `/timestamp`
- Context-Menu **Translate**, `/snipe`, `/editsnipe`, `/embed builder`
### Fun (`apps/bot/src/modules/fun/`)
- `/8ball`, `/dice`, `/flip` (freier Münzwurf; Economy behält `/coinflip`)
- `/rps`, `/choose`, `/trivia`, `/tictactoe`, `/connect4`, `/hangman`
- `/meme`, `/cat`, `/dog` (abschaltbar via Redis `fun:config:{guildId}`)
### Manuelle Discord-Tests (Phase 3 bestätigt)
- Manuell auf Test-Server bestätigt (User-Freigabe).
## Phase 4 Giveaways … Temp-Voice (Status: abgeschlossen, manuell bestätigt)
- Manuell auf Test-Server bestätigt (User-Freigabe).
## Phase 5 Stats/Invites, Feeds, Scheduler, Guild-Backup (Status: implementiert + deployed, manuelle Discord-Tests ausstehend)
### Abgeschlossen
- Prisma-Migration `20260722170000_phase5_modules` (deployed)
- Shared `packages/shared/src/phase5.ts` + Tests
- Module verdrahtet in `commands.ts`, `index.ts`, `jobs.ts`
- Queues/Worker: `stats`, `feeds`, `schedules`, `guild-backups`
- Optional: `TWITCH_CLIENT_ID` / `TWITCH_CLIENT_SECRET`
- E2E: `docker compose up -d --build bot` OK; Bot ready; 74 Guild-Commands registriert
### Module
| Modul | Features |
|--------|----------|
| **Stats/Invites** | `/stats setup\|refresh`, `/invites view\|leaderboard`, Invite-Tracking, ActivityStat, 10-Min-Kanal-Update |
| **Feeds** | `/feeds add\|remove\|list\|test` (Twitch/YouTube/RSS/Reddit), Poll alle 5 Min |
| **Scheduler** | `/schedule create\|list\|delete`, `/announce`, BullMQ once/cron |
| **Guild-Backup** | `/backup create\|list\|info\|delete\|restore` (Owner + Doppelbestätigung) |
### Manuelle Discord-Tests (offen)
- `/stats setup` + Kanal-Update; Invite-Join → `/invites view|leaderboard`
- `/feeds add` (RSS/Reddit) + `/feeds test`
- `/schedule create` (once) + `/announce`
- `/backup create|list|info` und Delete/Restore-Bestätigung (Owner)
## Nächster geplanter Schritt
- Manuelle Phase-5-Tests, dann nach Freigabe Phase 6 (WebUI-Fundament: OAuth, Layout, Settings-Framework, API).