From 39829b5dc6dc093ed5a55c1e9aaebf7699c478de Mon Sep 17 00:00:00 2001 From: Ayaan Zaidi Date: Sat, 28 Mar 2026 09:51:58 +0530 Subject: [PATCH] refactor(telegram): unify inline button capability parsing --- extensions/telegram/src/bot-message-context.ts | 11 +++-------- extensions/telegram/src/exec-approvals.ts | 7 ++----- extensions/telegram/src/inline-buttons.ts | 16 ++++++++++++---- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/extensions/telegram/src/bot-message-context.ts b/extensions/telegram/src/bot-message-context.ts index 904b376d438..d94e7e01044 100644 --- a/extensions/telegram/src/bot-message-context.ts +++ b/extensions/telegram/src/bot-message-context.ts @@ -70,15 +70,10 @@ export const buildTelegramMessageContext = async ({ const isGroup = msg.chat.type === "group" || msg.chat.type === "supergroup"; const senderId = msg.from?.id ? String(msg.from.id) : ""; const messageThreadId = (msg as { message_thread_id?: number }).message_thread_id; - const api = bot.api as unknown as { - setMessageReaction?: ( - chatId: number | string, - messageId: number, - reactions: Array<{ type: "emoji"; emoji: string }>, - ) => Promise; - }; const reactionApi = - typeof api.setMessageReaction === "function" ? api.setMessageReaction.bind(api) : null; + typeof bot.api.setMessageReaction === "function" + ? bot.api.setMessageReaction.bind(bot.api) + : null; const getChatApi: TelegramGetChat = bot.api.getChat.bind(bot.api); const isForum = await resolveTelegramForumFlag({ chatId, diff --git a/extensions/telegram/src/exec-approvals.ts b/extensions/telegram/src/exec-approvals.ts index 10ae8dd35a0..28ea55d379f 100644 --- a/extensions/telegram/src/exec-approvals.ts +++ b/extensions/telegram/src/exec-approvals.ts @@ -3,6 +3,7 @@ import type { TelegramExecApprovalConfig } from "openclaw/plugin-sdk/config-runt import { getExecApprovalReplyMetadata } from "openclaw/plugin-sdk/infra-runtime"; import type { ReplyPayload } from "openclaw/plugin-sdk/reply-runtime"; import { resolveTelegramAccount } from "./accounts.js"; +import { resolveTelegramInlineButtonsConfigScope } from "./inline-buttons.js"; import { resolveTelegramTargetChatType } from "./targets.js"; function normalizeApproverId(value: string | number): string { @@ -77,11 +78,7 @@ function resolveExecApprovalButtonsExplicitlyDisabled(params: { accountId?: string | null; }): boolean { const capabilities = resolveTelegramAccount(params).config.capabilities; - if (!capabilities || Array.isArray(capabilities) || typeof capabilities !== "object") { - return false; - } - const inlineButtons = (capabilities as { inlineButtons?: unknown }).inlineButtons; - return typeof inlineButtons === "string" && inlineButtons.trim().toLowerCase() === "off"; + return resolveTelegramInlineButtonsConfigScope(capabilities) === "off"; } export function shouldEnableTelegramExecApprovalButtons(params: { diff --git a/extensions/telegram/src/inline-buttons.ts b/extensions/telegram/src/inline-buttons.ts index 5341f2d09f1..d90bc4bdb14 100644 --- a/extensions/telegram/src/inline-buttons.ts +++ b/extensions/telegram/src/inline-buttons.ts @@ -21,7 +21,16 @@ function normalizeInlineButtonsScope(value: unknown): TelegramInlineButtonsScope return undefined; } -function resolveInlineButtonsScopeFromCapabilities( +export function resolveTelegramInlineButtonsConfigScope( + capabilities: unknown, +): TelegramInlineButtonsScope | undefined { + if (!capabilities || Array.isArray(capabilities) || typeof capabilities !== "object") { + return undefined; + } + return normalizeInlineButtonsScope((capabilities as { inlineButtons?: unknown }).inlineButtons); +} + +export function resolveTelegramInlineButtonsScopeFromCapabilities( capabilities: unknown, ): TelegramInlineButtonsScope { if (!capabilities) { @@ -34,8 +43,7 @@ function resolveInlineButtonsScopeFromCapabilities( return enabled ? "all" : "off"; } if (typeof capabilities === "object") { - const inlineButtons = (capabilities as { inlineButtons?: unknown }).inlineButtons; - return normalizeInlineButtonsScope(inlineButtons) ?? DEFAULT_INLINE_BUTTONS_SCOPE; + return resolveTelegramInlineButtonsConfigScope(capabilities) ?? DEFAULT_INLINE_BUTTONS_SCOPE; } return DEFAULT_INLINE_BUTTONS_SCOPE; } @@ -45,7 +53,7 @@ export function resolveTelegramInlineButtonsScope(params: { accountId?: string | null; }): TelegramInlineButtonsScope { const account = resolveTelegramAccount({ cfg: params.cfg, accountId: params.accountId }); - return resolveInlineButtonsScopeFromCapabilities(account.config.capabilities); + return resolveTelegramInlineButtonsScopeFromCapabilities(account.config.capabilities); } export function isTelegramInlineButtonsEnabled(params: {