refactor(telegram): unify inline button capability parsing

This commit is contained in:
Ayaan Zaidi
2026-03-28 09:51:58 +05:30
parent 4a014083ff
commit 39829b5dc6
3 changed files with 17 additions and 17 deletions

View File

@@ -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<void>;
};
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,

View File

@@ -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: {

View File

@@ -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: {