From efd303dbc4b90d25afbf2309786644d32c23f882 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 2 Mar 2026 03:05:46 +0000 Subject: [PATCH] fix: normalize Discord wildcard sentinel parsing (#29459) (thanks @Sid-Qin) --- CHANGELOG.md | 1 + src/discord/components.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ac9f554b9ac..baff0ddb5ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ Docs: https://docs.openclaw.ai ### Fixes +- Discord/Components wildcard handlers: use distinct internal registration sentinel IDs and parse those sentinels as wildcard keys so select/user/role/channel/mentionable/modal interactions are not dropped by raw customId dedupe paths. Landed from contributor PR #29459 by @Sid-Qin. Thanks @Sid-Qin. - Model directives/Auth profiles: split `/model` profile suffixes at the first `@` after the last slash so email-based auth profile IDs (for example OAuth profile IDs) resolve correctly. Landed from contributor PR #30932 by @haosenwang1018. Thanks @haosenwang1018. - Windows/Plugin install: avoid `spawn EINVAL` on Windows npm/npx invocations by resolving to `node` + npm CLI scripts instead of spawning `.cmd` directly. Landed from contributor PR #31147 by @codertony. Thanks @codertony. - LINE/Voice transcription: classify M4A voice media as `audio/mp4` (not `video/mp4`) by checking the MPEG-4 `ftyp` major brand (`M4A ` / `M4B `), restoring voice transcription for LINE voice messages. Landed from contributor PR #31151 by @scoootscooob. Thanks @scoootscooob. diff --git a/src/discord/components.ts b/src/discord/components.ts index fae3cba2bed..2052c5baf69 100644 --- a/src/discord/components.ts +++ b/src/discord/components.ts @@ -662,7 +662,7 @@ export function parseDiscordComponentCustomIdForCarbon(id: string): ComponentPar } export function parseDiscordModalCustomIdForCarbon(id: string): ComponentParserResult { - if (id === "*" || id === "__openclaw_discord_component_modal_wildcard__") { + if (id === "*" || isDiscordComponentWildcardRegistrationId(id)) { return { key: "*", data: {} }; } const parsed = parseCustomId(id);