diff --git a/extensions/discord/src/channel.ts b/extensions/discord/src/channel.ts index 241d6c28a68..875595a0b9c 100644 --- a/extensions/discord/src/channel.ts +++ b/extensions/discord/src/channel.ts @@ -70,7 +70,7 @@ import { discordSetupAdapter } from "./setup-adapter.js"; import { createDiscordPluginBase, discordConfigAdapter } from "./shared.js"; import { collectDiscordStatusIssues } from "./status-issues.js"; import { parseDiscordTarget } from "./target-parsing.js"; -import { DiscordUiContainer } from "./ui.js"; +import { normalizeDiscordAccentColor, resolveDiscordAccentColor } from "./ui-colors.js"; type DiscordSendFn = typeof import("./send.js").sendMessageDiscord; type DiscordCarbonModule = typeof import("@buape/carbon"); @@ -251,7 +251,7 @@ function buildDiscordCrossContextComponents(params: { cfg: OpenClawConfig; accountId?: string | null; }) { - const { Separator, TextDisplay } = loadDiscordCarbonModule(); + const { Container, Separator, TextDisplay } = loadDiscordCarbonModule(); const trimmed = params.message.trim(); const components: Array = []; if (trimmed) { @@ -259,7 +259,15 @@ function buildDiscordCrossContextComponents(params: { components.push(new Separator({ divider: true, spacing: "small" })); } components.push(new TextDisplay(`*From ${params.originLabel}*`)); - return [new DiscordUiContainer({ cfg: params.cfg, accountId: params.accountId, components })]; + const configuredAccent = resolveDiscordAccentColor({ + cfg: params.cfg, + accountId: params.accountId, + }); + return [ + new Container(components, { + accentColor: normalizeDiscordAccentColor(configuredAccent) ?? configuredAccent, + }), + ]; } const resolveDiscordAllowlistGroupOverrides = createNestedAllowlistOverrideResolver({ diff --git a/extensions/discord/src/ui-colors.ts b/extensions/discord/src/ui-colors.ts new file mode 100644 index 00000000000..d7abbe28a08 --- /dev/null +++ b/extensions/discord/src/ui-colors.ts @@ -0,0 +1,27 @@ +import type { OpenClawConfig } from "openclaw/plugin-sdk/config-runtime"; +import { inspectDiscordAccount } from "./account-inspect.js"; + +export const DEFAULT_DISCORD_ACCENT_COLOR = "#5865F2"; + +type ResolveDiscordAccentColorParams = { + cfg: OpenClawConfig; + accountId?: string | null; +}; + +export function normalizeDiscordAccentColor(raw?: string | null): string | null { + const trimmed = (raw ?? "").trim(); + if (!trimmed) { + return null; + } + const normalized = trimmed.startsWith("#") ? trimmed : `#${trimmed}`; + if (!/^#[0-9a-fA-F]{6}$/.test(normalized)) { + return null; + } + return normalized.toUpperCase(); +} + +export function resolveDiscordAccentColor(params: ResolveDiscordAccentColorParams): string { + const account = inspectDiscordAccount({ cfg: params.cfg, accountId: params.accountId }); + const configured = normalizeDiscordAccentColor(account.config.ui?.components?.accentColor); + return configured ?? DEFAULT_DISCORD_ACCENT_COLOR; +} diff --git a/extensions/discord/src/ui.ts b/extensions/discord/src/ui.ts index 50f818f1471..fcce75cbca0 100644 --- a/extensions/discord/src/ui.ts +++ b/extensions/discord/src/ui.ts @@ -1,34 +1,11 @@ import { Container } from "@buape/carbon"; import type { OpenClawConfig } from "openclaw/plugin-sdk/config-runtime"; -import { inspectDiscordAccount } from "./account-inspect.js"; +import { normalizeDiscordAccentColor, resolveDiscordAccentColor } from "./ui-colors.js"; -const DEFAULT_DISCORD_ACCENT_COLOR = "#5865F2"; +export { normalizeDiscordAccentColor, resolveDiscordAccentColor } from "./ui-colors.js"; type DiscordContainerComponents = ConstructorParameters[0]; -type ResolveDiscordAccentColorParams = { - cfg: OpenClawConfig; - accountId?: string | null; -}; - -export function normalizeDiscordAccentColor(raw?: string | null): string | null { - const trimmed = (raw ?? "").trim(); - if (!trimmed) { - return null; - } - const normalized = trimmed.startsWith("#") ? trimmed : `#${trimmed}`; - if (!/^#[0-9a-fA-F]{6}$/.test(normalized)) { - return null; - } - return normalized.toUpperCase(); -} - -export function resolveDiscordAccentColor(params: ResolveDiscordAccentColorParams): string { - const account = inspectDiscordAccount({ cfg: params.cfg, accountId: params.accountId }); - const configured = normalizeDiscordAccentColor(account.config.ui?.components?.accentColor); - return configured ?? DEFAULT_DISCORD_ACCENT_COLOR; -} - export class DiscordUiContainer extends Container { constructor(params: { cfg: OpenClawConfig; diff --git a/package.json b/package.json index 5a47c530e0b..a2f85fb7f0c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "openclaw", - "version": "2026.4.20-beta.1", + "version": "2026.4.20-beta.2", "description": "Multi-channel AI gateway with extensible messaging integrations", "keywords": [], "homepage": "https://github.com/openclaw/openclaw#readme", diff --git a/src/config/schema.base.generated.ts b/src/config/schema.base.generated.ts index 5a160efb6ee..e4cfa34f047 100644 --- a/src/config/schema.base.generated.ts +++ b/src/config/schema.base.generated.ts @@ -27646,6 +27646,6 @@ export const GENERATED_BASE_CONFIG_SCHEMA: BaseConfigSchemaResponse = { tags: ["advanced", "url-secret"], }, }, - version: "2026.4.20-beta.1", + version: "2026.4.20-beta.2", generatedAt: "2026-03-22T21:17:33.302Z", };