From c065d432f0a4933ca8968a813e9a6790113338c7 Mon Sep 17 00:00:00 2001 From: OpenClaw Agent Date: Wed, 11 Mar 2026 17:31:07 +0100 Subject: [PATCH] telegram: treat message_id as explicit delete input --- extensions/telegram/src/channel-actions.ts | 3 ++- src/channels/plugins/actions/actions.test.ts | 23 ++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/extensions/telegram/src/channel-actions.ts b/extensions/telegram/src/channel-actions.ts index 26cf762fe77..460a34f4dbe 100644 --- a/extensions/telegram/src/channel-actions.ts +++ b/extensions/telegram/src/channel-actions.ts @@ -216,7 +216,8 @@ export const telegramMessageActions: ChannelMessageActionAdapter = { if (action === "delete") { const chatId = readTelegramChatIdParam(params); - const hasMessageIdParam = Object.hasOwn(params, "messageId"); + const hasMessageIdParam = + Object.hasOwn(params, "messageId") || Object.hasOwn(params, "message_id"); const messageId = readTelegramMessageIdParam(params, { required: false }); if (hasMessageIdParam && typeof messageId !== "number") { throw new Error("messageId must be a valid number for action=delete."); diff --git a/src/channels/plugins/actions/actions.test.ts b/src/channels/plugins/actions/actions.test.ts index b9e8f8fdb55..e8fa82b3fdd 100644 --- a/src/channels/plugins/actions/actions.test.ts +++ b/src/channels/plugins/actions/actions.test.ts @@ -892,6 +892,29 @@ describe("telegramMessageActions", () => { expect(handleTelegramAction).not.toHaveBeenCalled(); }); + it("rejects invalid snake_case delete message_id instead of falling back to topic deletion", async () => { + const cfg = telegramCfg(); + const handleAction = telegramMessageActions.handleAction; + if (!handleAction) { + throw new Error("telegram handleAction unavailable"); + } + + await expect( + handleAction({ + channel: "telegram", + action: "delete", + params: { + to: "-1001234567890", + message_id: "oops", + topicId: 271, + }, + cfg, + }), + ).rejects.toThrow(/messageId must be a valid number for action=delete/i); + + expect(handleTelegramAction).not.toHaveBeenCalled(); + }); + it("rejects topic-delete when threadId/topicId is missing", async () => { const cfg = telegramCfg(); const handleAction = telegramMessageActions.handleAction;