Spaces:
Sleeping
Sleeping
| import type { OpenClawConfig } from "../config/config.js"; | |
| import type { TelegramInlineButtonsScope } from "../config/types.telegram.js"; | |
| import { listTelegramAccountIds, resolveTelegramAccount } from "./accounts.js"; | |
| import { parseTelegramTarget } from "./targets.js"; | |
| const DEFAULT_INLINE_BUTTONS_SCOPE: TelegramInlineButtonsScope = "allowlist"; | |
| function normalizeInlineButtonsScope(value: unknown): TelegramInlineButtonsScope | undefined { | |
| if (typeof value !== "string") { | |
| return undefined; | |
| } | |
| const trimmed = value.trim().toLowerCase(); | |
| if ( | |
| trimmed === "off" || | |
| trimmed === "dm" || | |
| trimmed === "group" || | |
| trimmed === "all" || | |
| trimmed === "allowlist" | |
| ) { | |
| return trimmed as TelegramInlineButtonsScope; | |
| } | |
| return undefined; | |
| } | |
| function resolveInlineButtonsScopeFromCapabilities( | |
| capabilities: unknown, | |
| ): TelegramInlineButtonsScope { | |
| if (!capabilities) { | |
| return DEFAULT_INLINE_BUTTONS_SCOPE; | |
| } | |
| if (Array.isArray(capabilities)) { | |
| const enabled = capabilities.some( | |
| (entry) => String(entry).trim().toLowerCase() === "inlinebuttons", | |
| ); | |
| return enabled ? "all" : "off"; | |
| } | |
| if (typeof capabilities === "object") { | |
| const inlineButtons = (capabilities as { inlineButtons?: unknown }).inlineButtons; | |
| return normalizeInlineButtonsScope(inlineButtons) ?? DEFAULT_INLINE_BUTTONS_SCOPE; | |
| } | |
| return DEFAULT_INLINE_BUTTONS_SCOPE; | |
| } | |
| export function resolveTelegramInlineButtonsScope(params: { | |
| cfg: OpenClawConfig; | |
| accountId?: string | null; | |
| }): TelegramInlineButtonsScope { | |
| const account = resolveTelegramAccount({ cfg: params.cfg, accountId: params.accountId }); | |
| return resolveInlineButtonsScopeFromCapabilities(account.config.capabilities); | |
| } | |
| export function isTelegramInlineButtonsEnabled(params: { | |
| cfg: OpenClawConfig; | |
| accountId?: string | null; | |
| }): boolean { | |
| if (params.accountId) { | |
| return resolveTelegramInlineButtonsScope(params) !== "off"; | |
| } | |
| const accountIds = listTelegramAccountIds(params.cfg); | |
| if (accountIds.length === 0) { | |
| return resolveTelegramInlineButtonsScope(params) !== "off"; | |
| } | |
| return accountIds.some( | |
| (accountId) => resolveTelegramInlineButtonsScope({ cfg: params.cfg, accountId }) !== "off", | |
| ); | |
| } | |
| export function resolveTelegramTargetChatType(target: string): "direct" | "group" | "unknown" { | |
| if (!target.trim()) { | |
| return "unknown"; | |
| } | |
| const parsed = parseTelegramTarget(target); | |
| const chatId = parsed.chatId.trim(); | |
| if (!chatId) { | |
| return "unknown"; | |
| } | |
| if (/^-?\d+$/.test(chatId)) { | |
| return chatId.startsWith("-") ? "group" : "direct"; | |
| } | |
| return "unknown"; | |
| } | |