Enhance bot functionality with new features and improvements

- Updated package dependencies to include `@sentry/node` for error tracking.
- Refactored command routing to incorporate user and guild blacklisting checks, improving command execution safety.
- Enhanced health server metrics to include queue waiting times, providing better insights into system performance.
- Introduced confirmation handling for guild backup commands, streamlining user interactions.
- Improved moderation commands with better error handling and case management, ensuring robust moderation capabilities.
- Added new duration parsing functions to handle timeout durations effectively, enhancing moderation features.
- Updated localization files to reflect new command structures and user guidance improvements.
This commit is contained in:
smueller
2026-07-23 09:53:44 +02:00
parent 4e135bcf43
commit ffaa1e26fd
31 changed files with 1831 additions and 363 deletions

View File

@@ -59,6 +59,9 @@ const de: Dictionary = {
'generic.commandChannelBlocked': 'Dieser Befehl ist in diesem Kanal nicht erlaubt.',
'generic.commandRoleBlocked': 'Du darfst diesen Befehl mit deinen Rollen nicht nutzen.',
'generic.commandCooldown': 'Bitte warte noch {seconds} Sekunden, bevor du diesen Befehl erneut nutzt.',
'generic.moduleDisabled': 'Dieses Modul ist auf diesem Server deaktiviert.',
'generic.userBlacklisted': 'Du darfst Nexumi derzeit nicht nutzen.',
'generic.guildBlacklisted': 'Dieser Server darf Nexumi derzeit nicht nutzen.',
'core.help.title': 'Nexumi Hilfe',
'core.help.subtitle': 'Commands nach Modul. Optional: `/help module:<name>`.',
'core.help.moduleLine': '**{module}**: {commands}',
@@ -111,10 +114,23 @@ const de: Dictionary = {
'gdpr.delete.doneBody':
'Gelöscht/anonymisiert: {warnings} Verwarnungen, {levels} Level-Einträge, {economy} Economy-Einträge, {cases} Cases anonymisiert.',
'moderation.success': 'Aktion erfolgreich ausgeführt.',
'moderation.success.case': 'Aktion erfolgreich ausgeführt (Fall #{caseNumber}).',
'moderation.duration.invalid': 'Ungültige Dauer. Nutze z. B. 30m, 12h oder 7d.',
'moderation.duration.invalidTimeout':
'Ungültige Timeout-Dauer. Nutze z. B. 30m oder 1d (max. 28 Tage).',
'moderation.hierarchy.self': 'Du kannst diese Aktion nicht auf dich selbst anwenden.',
'moderation.hierarchy.owner': 'Der Server-Owner kann nicht moderiert werden.',
'moderation.hierarchy.moderator':
'Du kannst keine Mitglieder moderieren, die gleich oder höher in der Rollenhierarchie stehen.',
'moderation.hierarchy.bot':
'Der Bot kann dieses Mitglied wegen der Rollenhierarchie oder fehlender Rechte nicht moderieren.',
'moderation.hierarchy.notMember': 'Dieses Mitglied ist nicht auf dem Server.',
'moderation.reason.none': 'Kein Grund angegeben',
'moderation.warning.created': 'Verwarnung erstellt: {warningId}',
'moderation.warning.none': 'Keine Verwarnungen vorhanden.',
'moderation.warning.defaultReason': 'Kein Grund',
'moderation.warning.notFound': 'Verwarnung nicht gefunden.',
'moderation.purge.done': '{deletedCount} Nachrichten gelöscht (Fall #{caseNumber}).',
'moderation.note.none': 'Keine Notizen vorhanden.',
'moderation.case.notFound': 'Fall nicht gefunden.',
'moderation.escalation.durationRequired':
@@ -124,6 +140,14 @@ const de: Dictionary = {
'Eskalationsregel gespeichert: {warnCount} Verwarnungen => {action}{duration}.',
'moderation.escalation.removed':
'Eskalationsregel für {warnCount} Verwarnungen entfernt.',
'moderation.escalation.defaultReason': 'Auto-Eskalation bei {warnCount} Verwarnungen',
'moderation.escalation.skippedDuration':
'Eskalationsregel für {warnCount} Verwarnungen übersprungen (fehlende Dauer).',
'moderation.escalation.skippedPermission':
'Eskalationsregel für {warnCount} Verwarnungen übersprungen (fehlende Bot-Rechte).',
'moderation.escalation.appliedTimeout': 'Auto-Eskalation angewendet: Timeout ({durationMs} ms).',
'moderation.escalation.appliedKick': 'Auto-Eskalation angewendet: Kick.',
'moderation.escalation.appliedBan': 'Auto-Eskalation angewendet: Ban.',
'moderation.confirm.button.confirm': 'Bestätigen',
'moderation.confirm.button.cancel': 'Abbrechen',
'moderation.confirm.permanent': 'dauerhaft',
@@ -612,6 +636,9 @@ const en: Dictionary = {
'generic.commandChannelBlocked': 'This command is not allowed in this channel.',
'generic.commandRoleBlocked': 'You are not allowed to use this command with your roles.',
'generic.commandCooldown': 'Please wait {seconds} more seconds before using this command again.',
'generic.moduleDisabled': 'This module is disabled on this server.',
'generic.userBlacklisted': 'You are not allowed to use Nexumi right now.',
'generic.guildBlacklisted': 'This server is not allowed to use Nexumi right now.',
'core.help.title': 'Nexumi Help',
'core.help.subtitle': 'Commands by module. Optional: `/help module:<name>`.',
'core.help.moduleLine': '**{module}**: {commands}',
@@ -664,10 +691,23 @@ const en: Dictionary = {
'gdpr.delete.doneBody':
'Deleted/anonymized: {warnings} warnings, {levels} level rows, {economy} economy rows, {cases} cases anonymized.',
'moderation.success': 'Action executed successfully.',
'moderation.success.case': 'Action executed successfully (case #{caseNumber}).',
'moderation.duration.invalid': 'Invalid duration. Use e.g. 30m, 12h, or 7d.',
'moderation.duration.invalidTimeout':
'Invalid timeout duration. Use e.g. 30m or 1d (max 28 days).',
'moderation.hierarchy.self': 'You cannot apply this action to yourself.',
'moderation.hierarchy.owner': 'The server owner cannot be moderated.',
'moderation.hierarchy.moderator':
'You cannot moderate members with equal or higher roles.',
'moderation.hierarchy.bot':
'The bot cannot moderate this member due to role hierarchy or missing permissions.',
'moderation.hierarchy.notMember': 'That member is not on this server.',
'moderation.reason.none': 'No reason provided',
'moderation.warning.created': 'Warning created: {warningId}',
'moderation.warning.none': 'No warnings.',
'moderation.warning.defaultReason': 'No reason',
'moderation.warning.notFound': 'Warning not found.',
'moderation.purge.done': 'Deleted {deletedCount} messages (case #{caseNumber}).',
'moderation.note.none': 'No notes.',
'moderation.case.notFound': 'Case not found.',
'moderation.escalation.durationRequired': 'Duration is required for TIMEOUT escalation.',
@@ -675,6 +715,14 @@ const en: Dictionary = {
'moderation.escalation.saved':
'Escalation rule saved: {warnCount} warnings => {action}{duration}.',
'moderation.escalation.removed': 'Escalation rule removed for {warnCount} warnings.',
'moderation.escalation.defaultReason': 'Auto escalation at {warnCount} warnings',
'moderation.escalation.skippedDuration':
'Escalation rule for {warnCount} warns skipped (missing duration).',
'moderation.escalation.skippedPermission':
'Escalation rule for {warnCount} warns skipped (missing bot permissions).',
'moderation.escalation.appliedTimeout': 'Auto escalation applied: timeout ({durationMs} ms).',
'moderation.escalation.appliedKick': 'Auto escalation applied: kick.',
'moderation.escalation.appliedBan': 'Auto escalation applied: ban.',
'moderation.confirm.button.confirm': 'Confirm',
'moderation.confirm.button.cancel': 'Cancel',
'moderation.confirm.permanent': 'permanent',