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": "just now",
"mediaHint": "Image URLs must start with http(s). For Welcome you can use {user.avatar} and {server.icon}."
},
"componentsV2Builder": {
"blocks": "Layout blocks",
"addBlock": "Add block…",
"addNestedBlock": "Add nested block…",
"empty": "No blocks yet — add a container or text block to get started.",
"preview": "Preview",
"previewEmptyText": "Text content…",
"previewInvalidUrl": "Invalid image URL",
"clear": "Clear layout",
"clearHint": "Invalid blocks are dropped when saving.",
"actionsTitle": "Button & select actions",
"textPlaceholder": "Markdown-style text (Discord formatting)",
"divider": "Show divider line",
"spacing": "Spacing",
"spacingSmall": "Small",
"spacingLarge": "Large",
"accentColor": "Accent color (decimal)",
"spoiler": "Spoiler container",
"sectionText": "Section text",
"accessoryType": "Accessory",
"accessoryThumbnail": "Thumbnail",
"accessoryButton": "Button",
"urlPlaceholder": "https://… or {user.avatar}",
"addMediaItem": "Add image",
"addButton": "Add button",
"addSelect": "Add select…",
"buttonLabel": "Button label",
"linkUrl": "Link URL (https://…)",
"actionId": "Action ID",
"centralActionId": "Central action ID (optional)",
"optionLabel": "Option label",
"optionValue": "Option value",
"optionActionId": "Per-option action ID (optional)",
"addOption": "Add option",
"removeOption": "Remove option",
"selectPlaceholder": "Select placeholder",
"replyContent": "Reply message",
"roleAction": "Target role",
"defaultButtonLabel": "Button",
"blockTypes": {
"container": "Container",
"text_display": "Text",
"separator": "Separator",
"section": "Section",
"media_gallery": "Media gallery",
"action_row": "Action row",
"button": "Button"
},
"buttonStyles": {
"Primary": "Primary",
"Secondary": "Secondary",
"Success": "Success",
"Danger": "Danger",
"Link": "Link"
},
"selectTypes": {
"string_select": "String select",
"user_select": "User select",
"role_select": "Role select",
"channel_select": "Channel select",
"mentionable_select": "Mentionable select"
},
"actionTypes": {
"EPHEMERAL_REPLY": "Ephemeral reply",
"PUBLIC_REPLY": "Public reply",
"ASSIGN_ROLE": "Assign role",
"REMOVE_ROLE": "Remove role",
"TOGGLE_ROLE": "Toggle role",
"ASSIGN_SELECTED_ROLES": "Assign selected roles",
"NONE": "No action"
}
},
"placeholders": {
"toggle": "Show available placeholders",
"hint": "Tap copy to insert. Only the placeholders listed here work in this field.",
@@ -174,6 +246,10 @@
"guildbackup": {
"label": "Backups",
"description": "Server backup and restore"
},
"messages": {
"label": "Messages",
"description": "Send embeds or Components V2 layouts to a channel"
}
},
"login": {
@@ -361,12 +437,14 @@
"type": {
"TEXT": "Text",
"EMBED": "Embed",
"IMAGE": "Image card"
"IMAGE": "Image card",
"COMPONENTS_V2": "Components V2"
},
"welcomeContent": "Message content",
"contentPlaceholder": "Welcome {user} to {server}!",
"placeholdersHint": "Available placeholders: see the list below.",
"welcomeEmbed": "Embed",
"welcomeComponents": "Components V2 layout",
"welcomeDmEnabled": "Welcome DM enabled",
"dmContentPlaceholder": "Optional private message to new members",
"userAutoroles": "Autoroles for users",
@@ -377,9 +455,16 @@
"leaveDescription": "Message and channel when a member leaves the server.",
"leaveEnabledLabel": "Leave message enabled",
"leaveChannelId": "Leave channel ID",
"leaveType": "Message type",
"leaveTypes": {
"TEXT": "Text",
"EMBED": "Embed",
"COMPONENTS_V2": "Components V2"
},
"leaveContent": "Message content",
"leaveContentPlaceholder": "Goodbye {user.tag} — see you around on {server}!",
"leaveEmbed": "Embed",
"leaveComponents": "Components V2 layout",
"leaveEmbedTitlePlaceholder": "Goodbye",
"leaveEmbedDescriptionPlaceholder": "{user.tag} left {server}."
},
@@ -550,12 +635,15 @@
"responseType": "Response type",
"responseTypes": {
"TEXT": "Text",
"EMBED": "Embed"
"EMBED": "Embed",
"COMPONENTS_V2": "Components V2"
},
"triggerWord": "Trigger word (optional)",
"content": "Content",
"embed": "Embed",
"components": "Components V2 layout",
"embedRequired": "Embed tags need a title or description.",
"componentsRequired": "Components V2 tags need at least one block.",
"allowedRoleIds": "Allowed roles",
"allowedChannelIds": "Allowed channel IDs",
"idsPlaceholder": "One or more IDs, comma-separated",
@@ -658,10 +746,18 @@
"runAt": "Run at",
"content": "Message content",
"embed": "Embed (optional)",
"cronHint": "Set a cron expression for recurring messages, or a one-time date/time - not both. Text and/or embed is required.",
"components": "Components V2 layout",
"contentMode": "Message format",
"contentModes": {
"text": "Text",
"embed": "Embed",
"components_v2": "Components V2"
},
"componentsPreview": "(Components V2)",
"cronHint": "Set a cron expression for recurring messages, or a one-time date/time — not both. Choose text, embed, or Components V2 (mutually exclusive).",
"create": "Schedule message",
"created": "Message scheduled.",
"formIncomplete": "Please fill channel, content or embed, and either a cron expression or a date/time.",
"formIncomplete": "Please fill channel, choose a message format with content, and either a cron expression or a date/time.",
"confirmDelete": "Really delete this schedule?",
"listTitle": "Scheduled messages",
"listDescription": "Upcoming and recurring scheduled messages.",
@@ -692,6 +788,23 @@
"confirmDelete": "Really delete this backup?",
"ownerOnlyBadge": "Owner-only restore"
},
"messages": {
"sendTitle": "Send a message",
"sendDescription": "Post an embed or Components V2 layout to a channel via the bot.",
"channelId": "Target channel",
"channelRequired": "Select a channel first.",
"mode": "Message type",
"modes": {
"EMBED": "Embed",
"COMPONENTS_V2": "Components V2"
},
"embedRequired": "Embed mode needs title, description, or a color.",
"componentsRequired": "Add at least one valid Components V2 block.",
"send": "Send message",
"sending": "Sending…",
"sent": "Message sent.",
"sentWithId": "Message sent (ID: {id})."
},
"commands": {
"title": "Commands",
"description": "Enable/disable individual slash commands and restrict them by role, channel or cooldown.",