- 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.
7.8 KiB
7.8 KiB
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/botpackages/shared
- Basis-Tooling:
- TypeScript strict
- ESLint
- Prettier
- Vitest
- Turbo
- Docker-Compose-Grundstack:
postgresmit Healthcheckredismit Healthcheckbotwebui-Scaffold-Service (temporär)backupsVolume angebunden
- Prisma-Grundmodell inkl. Moderationsdaten:
GuildGuildSettingsUserCaseWarningModNoteEscalationRule
- 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-USvia 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:
.dockerignoreergänzt- Prisma-Migration beim Bot-Start (
prisma migrate deploy) - Bot-Healthcheck auf
/health
- E2E-Verifikation (automatisiert, lokal):
docker compose up -d --builderfolgreich- Postgres/Redis healthy
- Migration
20260722123000_initangewendet - Bot online (
Nexumi#9122), 13 Slash-Commands registriert - Bot-Container healthy
- Tests (aktuell vorhanden):
packages/shared/src/i18n.test.tspackages/shared/src/audit.test.tsapps/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
/banund/purgeprüfen
Phase 2 – AutoMod, Logging, Welcome, Verifizierung (Status: implementiert, manuelle Tests ausstehend)
Abgeschlossen
- Prisma-Erweiterung + Migration
20260722140000_phase2_modules:AutoModConfig,AutoModRuleLoggingConfig,LogChannelWelcomeConfigVerificationConfig
- 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 (
logModActionincreateCase) - 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
- Text-, Embed- und Bild-Karten (Canvas via
- Verifizierung (
apps/bot/src/modules/verification/):/verify setup,/verify panel- Button-Verify und Captcha-Verify (Captcha-Seite unter
/verify/captchaam 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 INTENTMESSAGE CONTENT INTENT
- AutoMod: Spam-/Invite-Testnachrichten senden
/automod statusprüfen- Logging: Log-Kanäle per DB/ später WebUI setzen, Events auslösen
/welcome previewund/welcome test(Konfiguration zunächst per DB oder später WebUI)/verify setup+/verify panel, Button- und Captcha-Flow testenPUBLIC_BASE_URLauf 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 mussPUBLIC_BASE_URLdarauf 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 createmit Buttons, DB (Poll/PollVote), optionaler Ablauf via BullMQ (pollClose)/remindme,/reminders list|deletemit BullMQ (reminderSend)/afk setmit 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:
reminderQueueinqueues.ts, Worker injobs.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 Redisfun:config:{guildId}→{mediaEnabled}) - Exports für Wiring:
funCommands,isFunButton,handleFunButtonausindex.ts - i18n-Keys + Command-Locales in
@nexumi/shared(de/en) - Manuelles Wiring durch Parent noch nötig:
funCommandsincommands.ts,isFunButton/handleFunButtoninindex.ts
Manuelle Discord-Tests Fun (offen)
/flipvs. 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.