Implement Owner Panel features and maintenance mode handling

- Introduced the Owner Panel with new routes and UI components for managing guilds, user blacklists, feature flags, and bot presence.
- Added maintenance mode functionality to prevent non-owner users from executing commands during maintenance periods.
- Enhanced localization with new keys for Owner Panel features in both English and German.
- Updated job processing to include a presence refresh job, ensuring the bot's status is regularly updated.
- Improved environment configuration to support owner user IDs for access control.
This commit is contained in:
smueller
2026-07-22 16:10:30 +02:00
parent bcbfa07697
commit 8a8aefb4fb
42 changed files with 2385 additions and 50 deletions

View File

@@ -518,7 +518,97 @@
"themeDark": "Dunkel",
"themeLight": "Hell",
"logout": "Abmelden",
"loggingOut": "Meldet ab…"
"loggingOut": "Meldet ab…",
"ownerPanel": "Owner-Panel"
},
"owner": {
"nav": {
"title": "Owner",
"backToDashboard": "Zum Dashboard",
"overview": "Übersicht",
"guilds": "Server",
"users": "User-Blacklist",
"flags": "Feature-Flags",
"presence": "Präsenz",
"team": "Team",
"jobs": "Jobs",
"changelog": "Changelog",
"audit": "Audit"
},
"common": {
"empty": "Keine Einträge.",
"noteOptional": "Notiz (optional)"
},
"overview": {
"title": "Owner-Übersicht",
"subtitle": "Globale Bot-Kennzahlen und letzte Owner-Aktionen.",
"guilds": "Server",
"blacklistedUsers": "Gesperrte User",
"blacklistedGuilds": "Gesperrte Server",
"maintenance": "Wartungsmodus",
"uptime": "WebUI-Uptime",
"recentAudit": "Letzte Owner-Aktivität",
"emptyAudit": "Noch keine Owner-Aktionen.",
"viewAudit": "Audit öffnen",
"changelog": "Changelog",
"emptyChangelog": "Noch keine Changelog-Einträge.",
"manageChangelog": "Changelog verwalten"
},
"guilds": {
"title": "Server-Verwaltung",
"subtitle": "Server suchen, blacklisten oder den Bot entfernen.",
"search": "Server-ID suchen…",
"blacklisted": "Blacklist",
"blacklist": "Blacklisten",
"unblacklist": "Blacklist entfernen",
"leave": "Server verlassen",
"leaveConfirm": "Bot wirklich von diesem Server entfernen?"
},
"users": {
"title": "User-Blacklist",
"subtitle": "Global gesperrte Discord-User (Bot ignoriert sie überall).",
"userIdPlaceholder": "Discord User-ID"
},
"flags": {
"title": "Feature-Flags",
"subtitle": "Module global steuern und Rollouts konfigurieren.",
"keyPlaceholder": "Flag-Key (z. B. new.module)",
"rollout": "Rollout %"
},
"presence": {
"title": "Bot-Präsenz",
"subtitle": "Status, Aktivität und Wartungsmodus.",
"status": "Status",
"activityType": "Aktivitätstyp",
"activityText": "Aktivitätstext",
"rotating": "Rotierende Nachrichten (eine pro Zeile)",
"maintenanceMode": "Wartungsmodus aktiv",
"maintenanceMessage": "Wartungsnachricht"
},
"team": {
"title": "Team",
"subtitle": "Weitere Owner/Admins mit abgestuften Rechten.",
"bootstrap": "Bootstrap-Owner (OWNER_USER_IDS)",
"noBootstrap": "Keine Bootstrap-Owner in OWNER_USER_IDS gesetzt."
},
"jobs": {
"title": "Jobs & Migrationen",
"subtitle": "BullMQ-Queues und Prisma-Migrationsstatus.",
"queues": "Queues",
"migrations": "Migrationen",
"retryFailed": "Fehlgeschlagene neu starten"
},
"changelog": {
"title": "Changelog",
"subtitle": "Versionshinweise für das Dashboard.",
"version": "Version",
"titleField": "Titel",
"body": "Inhalt"
},
"audit": {
"title": "Owner-Audit",
"subtitle": "Alle Owner-Aktionen im globalen Audit-Log."
}
},
"serverSwitcher": {
"switchServer": "Server wechseln",

View File

@@ -518,7 +518,97 @@
"themeDark": "Dark",
"themeLight": "Light",
"logout": "Log out",
"loggingOut": "Logging out…"
"loggingOut": "Logging out…",
"ownerPanel": "Owner panel"
},
"owner": {
"nav": {
"title": "Owner",
"backToDashboard": "Back to dashboard",
"overview": "Overview",
"guilds": "Guilds",
"users": "User blacklist",
"flags": "Feature flags",
"presence": "Presence",
"team": "Team",
"jobs": "Jobs",
"changelog": "Changelog",
"audit": "Audit"
},
"common": {
"empty": "No entries.",
"noteOptional": "Note (optional)"
},
"overview": {
"title": "Owner overview",
"subtitle": "Global bot metrics and recent owner actions.",
"guilds": "Guilds",
"blacklistedUsers": "Blacklisted users",
"blacklistedGuilds": "Blacklisted guilds",
"maintenance": "Maintenance mode",
"uptime": "WebUI uptime",
"recentAudit": "Recent owner activity",
"emptyAudit": "No owner actions yet.",
"viewAudit": "Open audit",
"changelog": "Changelog",
"emptyChangelog": "No changelog entries yet.",
"manageChangelog": "Manage changelog"
},
"guilds": {
"title": "Guild management",
"subtitle": "Search guilds, blacklist them, or leave with the bot.",
"search": "Search guild ID…",
"blacklisted": "Blacklisted",
"blacklist": "Blacklist",
"unblacklist": "Remove blacklist",
"leave": "Leave guild",
"leaveConfirm": "Really remove the bot from this guild?"
},
"users": {
"title": "User blacklist",
"subtitle": "Globally blocked Discord users (bot ignores them everywhere).",
"userIdPlaceholder": "Discord user ID"
},
"flags": {
"title": "Feature flags",
"subtitle": "Control modules globally and configure rollouts.",
"keyPlaceholder": "Flag key (e.g. new.module)",
"rollout": "Rollout %"
},
"presence": {
"title": "Bot presence",
"subtitle": "Status, activity, and maintenance mode.",
"status": "Status",
"activityType": "Activity type",
"activityText": "Activity text",
"rotating": "Rotating messages (one per line)",
"maintenanceMode": "Maintenance mode enabled",
"maintenanceMessage": "Maintenance message"
},
"team": {
"title": "Team",
"subtitle": "Additional owners/admins with graded permissions.",
"bootstrap": "Bootstrap owners (OWNER_USER_IDS)",
"noBootstrap": "No bootstrap owners set in OWNER_USER_IDS."
},
"jobs": {
"title": "Jobs & migrations",
"subtitle": "BullMQ queues and Prisma migration status.",
"queues": "Queues",
"migrations": "Migrations",
"retryFailed": "Retry failed"
},
"changelog": {
"title": "Changelog",
"subtitle": "Release notes for the dashboard.",
"version": "Version",
"titleField": "Title",
"body": "Body"
},
"audit": {
"title": "Owner audit",
"subtitle": "All owner actions in the global audit log."
}
},
"serverSwitcher": {
"switchServer": "Switch server",