From 9b94a751c8d3dbc9b3d43668537a68482e7a2bf2 Mon Sep 17 00:00:00 2001 From: Muhammed Mukhthar CM Date: Fri, 23 Jan 2026 06:52:05 +0000 Subject: [PATCH] Telegram-user: handle media groups --- .../telegram-user/src/monitor/handler.ts | 40 +++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/extensions/telegram-user/src/monitor/handler.ts b/extensions/telegram-user/src/monitor/handler.ts index 01309a365..078d3a54e 100644 --- a/extensions/telegram-user/src/monitor/handler.ts +++ b/extensions/telegram-user/src/monitor/handler.ts @@ -142,6 +142,28 @@ async function resolveMediaAttachment(params: { }; } +async function resolveMediaAttachments(params: { + client: TelegramClient; + mediaMaxMb: number; + messages: MessageContext[]; + runtime: RuntimeEnv; +}): Promise> { + const results: Array<{ path: string; contentType?: string }> = []; + for (const message of params.messages) { + if (!message.media) continue; + const resolved = await resolveMediaAttachment({ + client: params.client, + mediaMaxMb: params.mediaMaxMb, + media: message.media, + }).catch((err) => { + params.runtime.error?.(`telegram-user media download failed: ${String(err)}`); + return null; + }); + if (resolved) results.push(resolved); + } + return results; +} + export function createTelegramUserMessageHandler(params: TelegramUserHandlerParams) { const { client, cfg, runtime, accountId, accountConfig, self } = params; const core = getTelegramUserRuntime(); @@ -154,6 +176,7 @@ export function createTelegramUserMessageHandler(params: TelegramUserHandlerPara return async (msg: MessageContext) => { try { if (msg.isOutgoing || msg.isService) return; + const messageGroup = msg.isMessageGroup ? msg.messages : [msg]; const isDirect = msg.chat.type === "user"; const isGroup = msg.chat.type === "chat" && msg.chat.chatType !== "channel"; @@ -262,15 +285,16 @@ export function createTelegramUserMessageHandler(params: TelegramUserHandlerPara } } - const text = msg.text?.trim() ?? ""; - const media = await resolveMediaAttachment({ + const primaryMessage = + messageGroup.find((entry) => entry.text?.trim()) ?? msg; + const text = primaryMessage.text?.trim() ?? ""; + const allMedia = await resolveMediaAttachments({ client, mediaMaxMb, - media: msg.media, - }).catch((err) => { - runtime.error?.(`telegram-user media download failed: ${String(err)}`); - return null; + messages: messageGroup, + runtime, }); + const media = allMedia[0] ?? null; if (!text && !media) return; core.channel.activity.record({ @@ -389,13 +413,15 @@ export function createTelegramUserMessageHandler(params: TelegramUserHandlerPara const conversationLabel = isGroup && chatId != null ? buildTelegramUserGroupLabel(groupTitle, chatId, threadId) : senderName; + const mediaSuffix = + !text && allMedia.length > 1 ? ` (${allMedia.length} items)` : ""; const body = core.channel.reply.formatAgentEnvelope({ channel: "Telegram User", from: senderName, timestamp: msg.date, previousTimestamp, envelope: envelopeOptions, - body: text || "(media)", + body: text || `(media${mediaSuffix})`, }); const ctxPayload = core.channel.reply.finalizeInboundContext({