Implement maintenance mode and presence updates in bot and WebUI

- Added maintenance mode functionality in the bot, allowing for a custom message and DND status when enabled.
- Updated the OwnerPresencePage to include read-only access for VIEWER roles, with save permissions restricted to ADMIN roles.
- Enhanced the PresenceForm component to support immediate application of changes and added a confirmation for maintenance mode activation.
- Introduced localization updates for presence-related messages in both English and German, improving user guidance.
- Implemented a presence refresh queue to handle updates efficiently after configuration changes.
This commit is contained in:
smueller
2026-07-24 11:11:58 +02:00
parent 211403d54d
commit e45642b6f9
13 changed files with 414 additions and 153 deletions

View File

@@ -1034,12 +1034,35 @@
"presence": {
"title": "Bot presence",
"subtitle": "Status, activity, and maintenance mode.",
"editorTitle": "Edit presence",
"editorDescription": "Changes apply to the bot immediately after saving.",
"previewTitle": "Preview",
"previewRotatingHint": "Preview shows the first rotating line; Discord rotates about every minute.",
"status": "Status",
"activityType": "Activity type",
"activityText": "Activity text",
"activityTextHint": "Fallback when no rotating messages are set.",
"rotating": "Rotating messages (one per line)",
"rotatingHint": "Max. 20 lines of 128 characters. Rotates about every minute.",
"maintenanceMode": "Maintenance mode enabled",
"maintenanceMessage": "Maintenance message"
"maintenanceMessage": "Maintenance message",
"maintenanceHint": "Slash commands will only reply with the maintenance notice.",
"maintenanceConfirm": "Really enable maintenance mode? Users will not be able to use commands.",
"maintenancePreviewBanner": "Maintenance mode: Discord shows DND and the maintenance text.",
"maintenanceFallbackActivity": "Maintenance",
"readOnly": "View only — saving requires Admin owner role or higher.",
"statusLabel": {
"online": "Online",
"idle": "Idle",
"dnd": "Do not disturb",
"invisible": "Invisible"
},
"activityTypeLabel": {
"Playing": "Playing",
"Listening": "Listening to",
"Watching": "Watching",
"Competing": "Competing in"
}
},
"team": {
"title": "Team",