Enhance bot functionality with AutoMod, Logging, Welcome, and Verification features

- Implemented AutoMod capabilities including spam filtering, anti-raid, and anti-nuke actions.
- Added Logging module to track moderation actions and events across the bot.
- Introduced Welcome module for customizable welcome messages and autoroles.
- Developed Verification system with captcha and role assignment features.
- Updated Prisma schema to include new models for AutoMod, Logging, Welcome, and Verification.
- Enhanced command localization for new features in both German and English.
- Improved health server to handle captcha verification requests.
- Added new environment variable for public base URL to support captcha links.
This commit is contained in:
smueller
2026-07-22 12:28:42 +02:00
parent a44f4d6641
commit 2518119257
37 changed files with 3002 additions and 108 deletions

View File

@@ -3,6 +3,7 @@ import { z } from 'zod';
export * from './audit.js';
export * from './command-locales.js';
export * from './discord-localization.js';
export * from './phase2.js';
export const LocaleSchema = z.enum(['de', 'en']);
export type Locale = z.infer<typeof LocaleSchema>;
@@ -66,7 +67,32 @@ const de: Dictionary = {
'moderation.confirm.caseDelete': 'Fall #{caseNumber} wirklich löschen?',
'moderation.confirm.expired': 'Bestätigung abgelaufen. Bitte den Befehl erneut ausführen.',
'moderation.confirm.cancelled': 'Aktion abgebrochen.',
'moderation.confirm.unauthorized': 'Nur der ausführende Moderator kann diese Bestätigung nutzen.'
'moderation.confirm.unauthorized': 'Nur der ausführende Moderator kann diese Bestätigung nutzen.',
'automod.status.header':
'**AutoMod enabled:** {enabled}\n**Anti-raid:** {antiRaid}\n**Anti-nuke:** {antiNuke}\n**Lockdown:** {lockdown}',
'automod.status.ruleLine': '- {type} → {action}',
'automod.status.noRules': 'Keine aktiven Regeln.',
'automod.status.yes': 'ja',
'automod.status.no': 'nein',
'welcome.notConfigured': 'Willkommensnachricht ist noch nicht konfiguriert.',
'welcome.invalidChannel': 'Der konfigurierte Willkommenskanal ist ungültig.',
'welcome.testSent': 'Test-Willkommensnachricht gesendet.',
'verification.disabled': 'Verifizierung ist deaktiviert.',
'verification.success': 'Du wurdest erfolgreich verifiziert.',
'verification.setupDone': 'Verifizierung konfiguriert.',
'verification.notConfigured': 'Verifizierung ist noch nicht eingerichtet. Nutze `/verify setup`.',
'verification.invalidChannel': 'Der Verifizierungskanal ist ungültig.',
'verification.panelPosted': 'Verifizierungs-Panel gepostet.',
'verification.captchaLink': 'Öffne diesen Link zur Captcha-Verifizierung: {url}',
'verification.error.not_configured': 'Verifizierung ist nicht konfiguriert.',
'verification.error.member_not_found': 'Mitglied nicht gefunden.',
'verification.error.account_too_young': 'Dein Account ist zu jung für die Verifizierung.',
'verification.error.missing_permissions': 'Dem Bot fehlen Berechtigungen.',
'verification.error.invalid_role': 'Die Verifizierungsrolle ist ungültig.',
'verification.error.generic': 'Verifizierung fehlgeschlagen.',
'verification.captcha.success': 'Captcha bestanden. Du wurdest verifiziert.',
'verification.captcha.invalid': 'Captcha ungültig oder abgelaufen.',
'verification.captcha.title': 'Nexumi Verifizierung'
};
const en: Dictionary = {
'generic.noPermission': 'You do not have permission for this action.',
@@ -97,7 +123,32 @@ const en: Dictionary = {
'moderation.confirm.caseDelete': 'Really delete case #{caseNumber}?',
'moderation.confirm.expired': 'Confirmation expired. Please run the command again.',
'moderation.confirm.cancelled': 'Action cancelled.',
'moderation.confirm.unauthorized': 'Only the moderator who started this action can confirm it.'
'moderation.confirm.unauthorized': 'Only the moderator who started this action can confirm it.',
'automod.status.header':
'**AutoMod enabled:** {enabled}\n**Anti-raid:** {antiRaid}\n**Anti-nuke:** {antiNuke}\n**Lockdown:** {lockdown}',
'automod.status.ruleLine': '- {type} → {action}',
'automod.status.noRules': 'No active rules.',
'automod.status.yes': 'yes',
'automod.status.no': 'no',
'welcome.notConfigured': 'Welcome message is not configured yet.',
'welcome.invalidChannel': 'The configured welcome channel is invalid.',
'welcome.testSent': 'Test welcome message sent.',
'verification.disabled': 'Verification is disabled.',
'verification.success': 'You have been verified successfully.',
'verification.setupDone': 'Verification configured.',
'verification.notConfigured': 'Verification is not set up yet. Use `/verify setup`.',
'verification.invalidChannel': 'The verification channel is invalid.',
'verification.panelPosted': 'Verification panel posted.',
'verification.captchaLink': 'Open this link to complete captcha verification: {url}',
'verification.error.not_configured': 'Verification is not configured.',
'verification.error.member_not_found': 'Member not found.',
'verification.error.account_too_young': 'Your account is too young to verify.',
'verification.error.missing_permissions': 'Bot lacks permissions.',
'verification.error.invalid_role': 'Verification role is invalid.',
'verification.error.generic': 'Verification failed.',
'verification.captcha.success': 'Captcha passed. You have been verified.',
'verification.captcha.invalid': 'Captcha invalid or expired.',
'verification.captcha.title': 'Nexumi Verification'
};
const locales: Record<Locale, Dictionary> = { de, en };