Enhance bot and WebUI functionality with new features and environment updates

- Added support for new environment variables in `.env.example` for public site and legal operator information.
- Integrated core commands into the bot's command structure for improved functionality.
- Implemented a new `publishBotStatus` function to update bot status in Redis, enhancing monitoring capabilities.
- Updated the landing page to include features, invite links, and support server access, improving user experience.
- Enhanced localization with new keys for core commands and landing page elements in both English and German.
- Improved error handling and logging for bot presence updates and status publishing.
This commit is contained in:
smueller
2026-07-22 16:47:09 +02:00
parent 0b4ac0da29
commit 4852f16f79
32 changed files with 1579 additions and 83 deletions

View File

@@ -36,26 +36,86 @@
"integrations": "Integrationen"
},
"modules": {
"moderation": { "label": "Moderation", "description": "Bans, Verwarnungen, Timeouts und das Fall-System" },
"automod": { "label": "Auto-Moderation", "description": "Spam-, Raid- und Nuke-Schutz" },
"logging": { "label": "Logging", "description": "Log-Kanäle für Server-Events" },
"welcome": { "label": "Willkommen & Abschied", "description": "Join- und Leave-Nachrichten, Autoroles" },
"verification": { "label": "Verifizierung", "description": "Button- und Captcha-Verifizierung" },
"leveling": { "label": "Leveling & XP", "description": "Text- und Voice-XP, Rollen-Belohnungen" },
"economy": { "label": "Economy", "description": "Währung, Shop und Spiele" },
"fun": { "label": "Fun & Spiele", "description": "Minispiele und Medien-Commands" },
"giveaways": { "label": "Giveaways", "description": "Button-basierte Giveaways" },
"tickets": { "label": "Tickets", "description": "Support-Ticket-Panels und Transkripte" },
"selfroles": { "label": "Self Roles", "description": "Reaktions-, Button- und Dropdown-Rollenpanels" },
"tags": { "label": "Tags", "description": "Custom Commands und Auto-Responder" },
"starboard": { "label": "Starboard", "description": "Beliebte Nachrichten hervorheben" },
"suggestions": { "label": "Vorschläge", "description": "Community-Vorschläge mit Abstimmung" },
"birthdays": { "label": "Geburtstage", "description": "Geburtstags-Ankündigungen und -Rollen" },
"tempvoice": { "label": "Temp-Voice", "description": "Join-to-Create Voice-Kanäle" },
"stats": { "label": "Server-Statistiken", "description": "Automatische Statistik-Kanäle und Invites" },
"feeds": { "label": "Social Feeds", "description": "Twitch-, YouTube-, RSS- und Reddit-Benachrichtigungen" },
"scheduler": { "label": "Scheduler", "description": "Geplante und wiederkehrende Ankündigungen" },
"guildbackup": { "label": "Backups", "description": "Server-Backup und -Wiederherstellung" }
"moderation": {
"label": "Moderation",
"description": "Bans, Verwarnungen, Timeouts und das Fall-System"
},
"automod": {
"label": "Auto-Moderation",
"description": "Spam-, Raid- und Nuke-Schutz"
},
"logging": {
"label": "Logging",
"description": "Log-Kanäle für Server-Events"
},
"welcome": {
"label": "Willkommen & Abschied",
"description": "Join- und Leave-Nachrichten, Autoroles"
},
"verification": {
"label": "Verifizierung",
"description": "Button- und Captcha-Verifizierung"
},
"leveling": {
"label": "Leveling & XP",
"description": "Text- und Voice-XP, Rollen-Belohnungen"
},
"economy": {
"label": "Economy",
"description": "Währung, Shop und Spiele"
},
"fun": {
"label": "Fun & Spiele",
"description": "Minispiele und Medien-Commands"
},
"giveaways": {
"label": "Giveaways",
"description": "Button-basierte Giveaways"
},
"tickets": {
"label": "Tickets",
"description": "Support-Ticket-Panels und Transkripte"
},
"selfroles": {
"label": "Self Roles",
"description": "Reaktions-, Button- und Dropdown-Rollenpanels"
},
"tags": {
"label": "Tags",
"description": "Custom Commands und Auto-Responder"
},
"starboard": {
"label": "Starboard",
"description": "Beliebte Nachrichten hervorheben"
},
"suggestions": {
"label": "Vorschläge",
"description": "Community-Vorschläge mit Abstimmung"
},
"birthdays": {
"label": "Geburtstage",
"description": "Geburtstags-Ankündigungen und -Rollen"
},
"tempvoice": {
"label": "Temp-Voice",
"description": "Join-to-Create Voice-Kanäle"
},
"stats": {
"label": "Server-Statistiken",
"description": "Automatische Statistik-Kanäle und Invites"
},
"feeds": {
"label": "Social Feeds",
"description": "Twitch-, YouTube-, RSS- und Reddit-Benachrichtigungen"
},
"scheduler": {
"label": "Scheduler",
"description": "Geplante und wiederkehrende Ankündigungen"
},
"guildbackup": {
"label": "Backups",
"description": "Server-Backup und -Wiederherstellung"
}
},
"login": {
"title": "Nexumi",
@@ -141,7 +201,11 @@
"addEscalation": "Regel hinzufügen",
"warnCount": "Anzahl Verwarnungen",
"action": "Aktion",
"actions": { "TIMEOUT": "Timeout", "KICK": "Kick", "BAN": "Ban" },
"actions": {
"TIMEOUT": "Timeout",
"KICK": "Kick",
"BAN": "Ban"
},
"durationMs": "Dauer (ms)",
"reason": "Grund",
"reasonPlaceholder": "Optionaler Standardgrund",
@@ -197,7 +261,11 @@
"welcomeEnabledLabel": "Willkommensnachricht aktiviert",
"welcomeChannelId": "Willkommens-Kanal-ID",
"welcomeType": "Nachrichtentyp",
"type": { "TEXT": "Text", "EMBED": "Embed", "IMAGE": "Bild-Karte" },
"type": {
"TEXT": "Text",
"EMBED": "Embed",
"IMAGE": "Bild-Karte"
},
"welcomeContent": "Nachrichtentext",
"contentPlaceholder": "Willkommen {user} auf {server}!",
"placeholdersHint": "Verfügbare Platzhalter: {user}, {user.name}, {user.tag}, {user.id}, {server}, {memberCount}",
@@ -337,7 +405,11 @@
"channelId": "Kanal-ID",
"panelTitle": "Panel-Titel",
"mode": "Modus",
"modes": { "BUTTONS": "Buttons", "DROPDOWN": "Dropdown", "REACTIONS": "Reaktionen" },
"modes": {
"BUTTONS": "Buttons",
"DROPDOWN": "Dropdown",
"REACTIONS": "Reaktionen"
},
"behavior": "Verhalten",
"behaviors": {
"NORMAL": "Normal (frei umschaltbar)",
@@ -361,7 +433,10 @@
"createDescription": "Custom Commands und Auto-Responder, ausgelöst per Name oder Stichwort.",
"name": "Name",
"responseType": "Antworttyp",
"responseTypes": { "TEXT": "Text", "EMBED": "Embed" },
"responseTypes": {
"TEXT": "Text",
"EMBED": "Embed"
},
"triggerWord": "Auslöse-Wort (optional)",
"content": "Inhalt",
"allowedRoleIds": "Erlaubte Rollen-IDs",
@@ -620,5 +695,88 @@
"forbidden": "Du hast keinen Zugriff auf diesen Server.",
"notFound": "Nicht gefunden.",
"generic": "Etwas ist schiefgelaufen. Bitte erneut versuchen."
},
"site": {
"nav": {
"status": "Status",
"invite": "Einladen",
"support": "Support",
"login": "Anmelden",
"dashboard": "Dashboard",
"theme": "Design"
},
"footer": {
"status": "Status",
"impressum": "Impressum",
"privacy": "Datenschutz",
"terms": "Nutzungsbedingungen",
"dashboard": "Dashboard"
}
},
"landing": {
"hero": {
"subtitle": "Selbst gehosteter Discord-Bot mit Moderations-, Community- und Integrationsmodulen sowie Web-Dashboard.",
"invite": "Bot einladen",
"login": "Zum Dashboard",
"dashboard": "Dashboard öffnen",
"support": "Support-Server"
},
"stats": {
"guilds": "Server",
"users": "Nutzer (ca.)"
},
"features": {
"title": "Module",
"subtitle": "Funktionen, die Nexumi pro Server bereitstellt."
}
},
"status": {
"title": "Status",
"subtitle": "Verfügbarkeit, Shard-Status und aktuelle Hinweise.",
"overall": {
"operational": "Betriebsbereit",
"maintenance": "Wartung",
"degraded": "Eingeschränkt"
},
"latency": "API-Latenz",
"guilds": "Server",
"uptime": "Bot-Uptime",
"shardsTitle": "Shards",
"shardsEmpty": "Keine Shard-Daten vom Bot (Redis bot:status fehlt oder ist abgelaufen).",
"shardLabel": "Shard {id}",
"shardStatus": "Status",
"updatesTitle": "Updates & Incidents",
"updatesEmpty": "Noch keine Einträge.",
"incident": "Incident"
},
"legal": {
"navTitle": "Rechtliches",
"scaffoldNotice": "Gerüsttext — bitte vor Produktion rechtlich prüfen und anpassen.",
"impressum": {
"title": "Impressum",
"intro": "Angaben gemäß § 5 DDG.",
"name": "Anbieter",
"address": "Anschrift",
"email": "E-Mail",
"phone": "Telefon",
"notConfigured": "Betreiberdaten fehlen. Bitte LEGAL_OPERATOR_NAME, LEGAL_OPERATOR_ADDRESS und LEGAL_OPERATOR_EMAIL in der .env setzen.",
"p1": "Verantwortlich für den Inhalt dieser Website und den Betrieb von Nexumi ist der oben genannte Anbieter.",
"p2": "Für Inhalte externer Links übernehmen wir keine Haftung. Für den Inhalt der verlinkten Seiten sind ausschließlich deren Betreiber verantwortlich."
},
"privacy": {
"title": "Datenschutzerklärung",
"p1": "Nexumi verarbeitet Discord-Daten, soweit dies für den Betrieb des Bots und des Dashboards erforderlich ist (z. B. Server-IDs, Nutzer-IDs, Moderationsfälle, Modul-Einstellungen).",
"p2": "Die Anmeldung am Dashboard erfolgt über Discord OAuth2 (Scopes identify und guilds). Es werden Sitzungsdaten in Redis gespeichert.",
"p3": "Daten werden in der selbst gehosteten PostgreSQL-Datenbank gespeichert. Aufbewahrungsdauern sind über Modul-Einstellungen bzw. Löschanfragen steuerbar.",
"p4": "Es findet keine Weitergabe an Dritte statt, außer soweit für den Betrieb technisch erforderlich (z. B. Discord API, optional Sentry).",
"p5": "Betroffene können Auskunft, Berichtigung und Löschung verlangen. Kontakt über die im Impressum genannte Adresse oder den Bot-Command /gdpr sofern verfügbar."
},
"terms": {
"title": "Nutzungsbedingungen",
"p1": "Nexumi wird als selbst gehosteter Discord-Bot bereitgestellt. Die Nutzung erfolgt auf eigene Verantwortung.",
"p2": "Missbrauch, Spam oder Verstöße gegen die Discord Terms of Service können zum Ausschluss (Blacklist) führen.",
"p3": "Wir übernehmen keine Gewähr für unterbrechungsfreien Betrieb. Wartungsfenster werden nach Möglichkeit angekündigt.",
"p4": "Es gilt das Recht der Bundesrepublik Deutschland, soweit zwingende Verbraucherschutzvorschriften nichts anderes vorsehen."
}
}
}