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.
This commit is contained in:
@@ -1,140 +1,182 @@
|
||||
# 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
|
||||
|
||||
# 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.
|
||||
|
||||
Reference in New Issue
Block a user