From 727a390d134fb1f339c97064bde3cc70486b4bb3 Mon Sep 17 00:00:00 2001 From: Ayaan Zaidi Date: Mon, 9 Feb 2026 22:25:13 +0530 Subject: [PATCH] fix: add telegram command-cap regression test (#12356) (thanks @arosstale) --- CHANGELOG.md | 1 + src/telegram/bot-native-commands.test.ts | 37 ++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c3ea1da585..9d0a4b63fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ Docs: https://docs.openclaw.ai - Errors: prevent false positive context overflow detection when conversation mentions "context overflow" topic. (#2078) Thanks @sbking. - Model failover: treat HTTP 400 errors as failover-eligible, enabling automatic model fallback when providers return bad request errors. (#1879) Thanks @orenyomtov. +- Telegram: truncate command registration to 100 entries to avoid `BOT_COMMANDS_TOO_MUCH` failures on startup. (#12356) Thanks @arosstale. - Exec approvals: format forwarded command text as inline/fenced monospace for safer approval scanning across channels. (#11937) - Config: clamp `maxTokens` to `contextWindow` to prevent invalid model configs. (#5516) Thanks @lailoo. - Docs: fix language switcher ordering and Japanese locale flag in Mintlify nav. (#12023) Thanks @joshp123. diff --git a/src/telegram/bot-native-commands.test.ts b/src/telegram/bot-native-commands.test.ts index 1226ec701c..48594c1e26 100644 --- a/src/telegram/bot-native-commands.test.ts +++ b/src/telegram/bot-native-commands.test.ts @@ -78,4 +78,41 @@ describe("registerTelegramNativeCommands", () => { expect(listSkillCommandsForAgents).toHaveBeenCalledWith({ cfg }); }); + + it("truncates Telegram command registration to 100 commands", () => { + const cfg: OpenClawConfig = { + commands: { native: false }, + }; + const customCommands = Array.from({ length: 120 }, (_, index) => ({ + command: `cmd_${index}`, + description: `Command ${index}`, + })); + const setMyCommands = vi.fn().mockResolvedValue(undefined); + const runtimeLog = vi.fn(); + + registerTelegramNativeCommands({ + ...buildParams(cfg), + bot: { + api: { + setMyCommands, + sendMessage: vi.fn().mockResolvedValue(undefined), + }, + command: vi.fn(), + } as unknown as Parameters[0]["bot"], + runtime: { log: runtimeLog } as RuntimeEnv, + telegramCfg: { customCommands } as TelegramAccountConfig, + nativeEnabled: false, + nativeSkillsEnabled: false, + }); + + const registeredCommands = setMyCommands.mock.calls[0]?.[0] as Array<{ + command: string; + description: string; + }>; + expect(registeredCommands).toHaveLength(100); + expect(registeredCommands).toEqual(customCommands.slice(0, 100)); + expect(runtimeLog).toHaveBeenCalledWith( + "telegram: truncating 120 commands to 100 (Telegram Bot API limit)", + ); + }); });