Files
Nexumi/docs/PHASE-TRACKING.md
smueller fa5910ec43 Implement leveling and economy features with associated models and commands
- Added new models for leveling and economy functionalities in the Prisma schema, including LevelingConfig, MemberLevel, LevelReward, EconomyConfig, MemberEconomy, ShopItem, and InventoryItem.
- Introduced commands for managing XP, economy transactions, and shop interactions, enhancing user engagement.
- Updated job handling to include reminders and poll closing functionalities.
- Enhanced localization support for new commands and features in both German and English.
- Improved the bot's job processing capabilities with a dedicated reminder worker for scheduled tasks.
2026-07-22 12:49:17 +02:00

183 lines
7.8 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: in Arbeit)
### Utility (`apps/bot/src/modules/utility/`) implementiert
- Info-Commands: `/userinfo`, `/serverinfo`, `/roleinfo`, `/channelinfo`, `/avatar`, `/banner`
- `/poll create` mit Buttons, DB (`Poll`/`PollVote`), optionaler Ablauf via BullMQ (`pollClose`)
- `/remindme`, `/reminders list|delete` mit BullMQ (`reminderSend`)
- `/afk set` mit Auto-Clear und Mention-Antwort
- `/emoji add|remove|steal`, `/sticker add`
- `/timestamp`, Context-Menu **Translate** (MyMemory API)
- `/snipe`, `/editsnipe` (Redis, TTL 1 h, Datenschutz-Hinweis)
- `/embed builder` (Modal)
- Queue: `reminderQueue` in `queues.ts`, Worker in `jobs.ts`
- i18n-Keys in `@nexumi/shared` (de/en) + `command-locales.ts`
- **Manuelles Wiring durch Parent noch nötig** (siehe Modul-README / Agent-Anweisung): Commands, Context-Menüs, Events, Interaction-Handler in `index.ts`/`commands.ts`
### Fun & Games (`apps/bot/src/modules/fun/`) implementiert
- Einfache Commands: `/8ball`, `/dice`, `/flip` (nicht `/coinflip` Economy), `/rps`, `/choose`
- Button-Spiele: `/trivia`, `/tictactoe`, `/connect4`, `/hangman` (Redis-Spielzustand, TTL)
- Medien: `/meme`, `/cat`, `/dog` (API-Fetch; abschaltbar via Redis `fun:config:{guildId}``{mediaEnabled}`)
- Exports für Wiring: `funCommands`, `isFunButton`, `handleFunButton` aus `index.ts`
- i18n-Keys + Command-Locales in `@nexumi/shared` (de/en)
- **Manuelles Wiring durch Parent noch nötig**: `funCommands` in `commands.ts`, `isFunButton`/`handleFunButton` in `index.ts`
### Manuelle Discord-Tests Fun (offen)
- `/flip` vs. Economy `/coinflip` (kein Namenskonflikt)
- Trivia: nur Initiator kann antworten, Ablauf nach 2 min
- Tic-Tac-Toe / Connect 4: Züge nur für Teilnehmer, ephemerale Fehler
- Hangman: Buchstaben-Buttons, Gewinn/Verlust
- `/meme`, `/cat`, `/dog`; Medien deaktivieren via Redis-Config testen
### Manuelle Discord-Tests Utility (offen)
- Poll mit/ohne Dauer, Mehrfachauswahl, anonym
- Reminder einmalig und mit Cron
- AFK setzen, erwähnen, zurückschreiben
- Snipe nach Löschen/Bearbeiten
- Embed-Builder-Modal
- Translate Context-Menu auf Nachricht
## Nächster geplanter Schritt
- Utility- und Fun-Wiring abschließen, dann Leveling/Economy/Fun manuell testen; Phase-3-Freigabe nach grünem Build/Lint/Tests.