Enhance component message handling and introduce new features

- Added `ComponentMessageBinding` model to manage message components in the database.
- Updated `WelcomeConfig`, `Tag`, and `ScheduledMessage` models to support new component fields.
- Integrated component handling in various modules, including Scheduler and Tags, to improve message customization.
- Enhanced user experience by implementing new commands for creating and managing component messages in the utility module.
- Updated localization files to reflect new component-related features and improve user guidance.
This commit is contained in:
TheOnlyMace
2026-07-22 22:55:37 +02:00
parent 95eed45ec4
commit 4e135bcf43
46 changed files with 4505 additions and 194 deletions

View File

@@ -50,6 +50,78 @@
"timestampPreview": "gerade eben",
"mediaHint": "Bild-URLs müssen mit http(s) beginnen. Für Welcome kannst du {user.avatar} und {server.icon} nutzen."
},
"componentsV2Builder": {
"blocks": "Layout-Blöcke",
"addBlock": "Block hinzufügen…",
"addNestedBlock": "Verschachtelten Block hinzufügen…",
"empty": "Noch keine Blöcke — füge einen Container oder Textblock hinzu.",
"preview": "Vorschau",
"previewEmptyText": "Textinhalt…",
"previewInvalidUrl": "Ungültige Bild-URL",
"clear": "Layout leeren",
"clearHint": "Ungültige Blöcke werden beim Speichern verworfen.",
"actionsTitle": "Button- & Select-Aktionen",
"textPlaceholder": "Text (Discord-Formatierung)",
"divider": "Trennlinie anzeigen",
"spacing": "Abstand",
"spacingSmall": "Klein",
"spacingLarge": "Groß",
"accentColor": "Akzentfarbe (Dezimalwert)",
"spoiler": "Spoiler-Container",
"sectionText": "Abschnittstext",
"accessoryType": "Zubehör",
"accessoryThumbnail": "Thumbnail",
"accessoryButton": "Button",
"urlPlaceholder": "https://… oder {user.avatar}",
"addMediaItem": "Bild hinzufügen",
"addButton": "Button hinzufügen",
"addSelect": "Select hinzufügen…",
"buttonLabel": "Button-Label",
"linkUrl": "Link-URL (https://…)",
"actionId": "Action-ID",
"centralActionId": "Zentrale Action-ID (optional)",
"optionLabel": "Options-Label",
"optionValue": "Options-Wert",
"optionActionId": "Action-ID pro Option (optional)",
"addOption": "Option hinzufügen",
"removeOption": "Option entfernen",
"selectPlaceholder": "Select-Platzhalter",
"replyContent": "Antwortnachricht",
"roleAction": "Zielrolle",
"defaultButtonLabel": "Button",
"blockTypes": {
"container": "Container",
"text_display": "Text",
"separator": "Trenner",
"section": "Abschnitt",
"media_gallery": "Medien-Galerie",
"action_row": "Action Row",
"button": "Button"
},
"buttonStyles": {
"Primary": "Primär",
"Secondary": "Sekundär",
"Success": "Erfolg",
"Danger": "Gefahr",
"Link": "Link"
},
"selectTypes": {
"string_select": "String-Select",
"user_select": "User-Select",
"role_select": "Rollen-Select",
"channel_select": "Kanal-Select",
"mentionable_select": "Mentionable-Select"
},
"actionTypes": {
"EPHEMERAL_REPLY": "Ephemere Antwort",
"PUBLIC_REPLY": "Öffentliche Antwort",
"ASSIGN_ROLE": "Rolle zuweisen",
"REMOVE_ROLE": "Rolle entfernen",
"TOGGLE_ROLE": "Rolle umschalten",
"ASSIGN_SELECTED_ROLES": "Ausgewählte Rollen zuweisen",
"NONE": "Keine Aktion"
}
},
"placeholders": {
"toggle": "Verfügbare Platzhalter anzeigen",
"hint": "Zum Einfügen auf Kopieren tippen. Nur die hier gelisteten Platzhalter funktionieren in diesem Feld.",
@@ -174,6 +246,10 @@
"guildbackup": {
"label": "Backups",
"description": "Server-Backup und -Wiederherstellung"
},
"messages": {
"label": "Nachrichten",
"description": "Embeds oder Components-V2-Layouts in einen Kanal senden"
}
},
"login": {
@@ -361,12 +437,14 @@
"type": {
"TEXT": "Text",
"EMBED": "Embed",
"IMAGE": "Bild-Karte"
"IMAGE": "Bild-Karte",
"COMPONENTS_V2": "Components V2"
},
"welcomeContent": "Nachrichtentext",
"contentPlaceholder": "Willkommen {user} auf {server}!",
"placeholdersHint": "Verfügbare Platzhalter: siehe Liste unten.",
"welcomeEmbed": "Embed",
"welcomeComponents": "Components-V2-Layout",
"welcomeDmEnabled": "Willkommens-DM aktiviert",
"dmContentPlaceholder": "Optionale private Nachricht an neue Mitglieder",
"userAutoroles": "Autoroles für Nutzer",
@@ -377,9 +455,16 @@
"leaveDescription": "Nachricht und Kanal, wenn ein Mitglied den Server verlässt.",
"leaveEnabledLabel": "Abschiedsnachricht aktiviert",
"leaveChannelId": "Abschieds-Kanal-ID",
"leaveType": "Nachrichtentyp",
"leaveTypes": {
"TEXT": "Text",
"EMBED": "Embed",
"COMPONENTS_V2": "Components V2"
},
"leaveContent": "Nachrichtentext",
"leaveContentPlaceholder": "Tschüss {user.tag} — bis bald auf {server}!",
"leaveEmbed": "Embed",
"leaveComponents": "Components-V2-Layout",
"leaveEmbedTitlePlaceholder": "Auf Wiedersehen",
"leaveEmbedDescriptionPlaceholder": "{user.tag} hat {server} verlassen."
},
@@ -550,12 +635,15 @@
"responseType": "Antworttyp",
"responseTypes": {
"TEXT": "Text",
"EMBED": "Embed"
"EMBED": "Embed",
"COMPONENTS_V2": "Components V2"
},
"triggerWord": "Auslöse-Wort (optional)",
"content": "Inhalt",
"embed": "Embed",
"components": "Components-V2-Layout",
"embedRequired": "Für Embed-Tags sind Titel oder Beschreibung erforderlich.",
"componentsRequired": "Components-V2-Tags benötigen mindestens einen Block.",
"allowedRoleIds": "Erlaubte Rollen",
"allowedChannelIds": "Erlaubte Kanal-IDs",
"idsPlaceholder": "Eine oder mehrere IDs, kommagetrennt",
@@ -658,10 +746,18 @@
"runAt": "Ausführen am",
"content": "Nachrichtentext",
"embed": "Embed (optional)",
"cronHint": "Cron-Ausdruck für wiederkehrende Nachrichten ODER ein einmaliges Datum/Uhrzeit angeben - nicht beides. Text und/oder Embed sind erforderlich.",
"components": "Components-V2-Layout",
"contentMode": "Nachrichtenformat",
"contentModes": {
"text": "Text",
"embed": "Embed",
"components_v2": "Components V2"
},
"componentsPreview": "(Components V2)",
"cronHint": "Cron-Ausdruck für wiederkehrende Nachrichten ODER ein einmaliges Datum/Uhrzeit — nicht beides. Wähle Text, Embed oder Components V2 (gegenseitig ausgeschlossen).",
"create": "Nachricht planen",
"created": "Nachricht geplant.",
"formIncomplete": "Bitte Kanal, Inhalt oder Embed sowie Cron-Ausdruck oder Datum/Uhrzeit ausfüllen.",
"formIncomplete": "Bitte Kanal, Nachrichtenformat mit Inhalt sowie Cron-Ausdruck oder Datum/Uhrzeit ausfüllen.",
"confirmDelete": "Diesen Zeitplan wirklich löschen?",
"listTitle": "Geplante Nachrichten",
"listDescription": "Anstehende und wiederkehrende geplante Nachrichten.",
@@ -692,6 +788,23 @@
"confirmDelete": "Dieses Backup wirklich löschen?",
"ownerOnlyBadge": "Wiederherstellung nur durch Owner"
},
"messages": {
"sendTitle": "Nachricht senden",
"sendDescription": "Embed oder Components-V2-Layout über den Bot in einen Kanal posten.",
"channelId": "Zielkanal",
"channelRequired": "Bitte zuerst einen Kanal wählen.",
"mode": "Nachrichtentyp",
"modes": {
"EMBED": "Embed",
"COMPONENTS_V2": "Components V2"
},
"embedRequired": "Embed-Modus benötigt Titel, Beschreibung oder eine Farbe.",
"componentsRequired": "Füge mindestens einen gültigen Components-V2-Block hinzu.",
"send": "Nachricht senden",
"sending": "Sende…",
"sent": "Nachricht gesendet.",
"sentWithId": "Nachricht gesendet (ID: {id})."
},
"commands": {
"title": "Commands",
"description": "Einzelne Slash-Commands aktivieren/deaktivieren und per Rolle, Kanal oder Cooldown einschränken.",