diff --git a/extensions/telegram/src/channel.ts b/extensions/telegram/src/channel.ts index 5e85db11134..8623aa94761 100644 --- a/extensions/telegram/src/channel.ts +++ b/extensions/telegram/src/channel.ts @@ -14,6 +14,8 @@ import { normalizeAccountId, normalizeTelegramMessagingTarget, PAIRING_APPROVED_MESSAGE, + parseTelegramReplyToMessageId, + parseTelegramThreadId, resolveDefaultTelegramAccountId, resolveTelegramAccount, resolveTelegramGroupRequireMention, @@ -45,28 +47,6 @@ const telegramMessageActions: ChannelMessageActionAdapter = { }, }; -function parseReplyToMessageId(replyToId?: string | null) { - if (!replyToId) { - return undefined; - } - const parsed = Number.parseInt(replyToId, 10); - return Number.isFinite(parsed) ? parsed : undefined; -} - -function parseThreadId(threadId?: string | number | null) { - if (threadId == null) { - return undefined; - } - if (typeof threadId === "number") { - return Number.isFinite(threadId) ? Math.trunc(threadId) : undefined; - } - const trimmed = threadId.trim(); - if (!trimmed) { - return undefined; - } - const parsed = Number.parseInt(trimmed, 10); - return Number.isFinite(parsed) ? parsed : undefined; -} export const telegramPlugin: ChannelPlugin = { id: "telegram", meta: { @@ -277,8 +257,8 @@ export const telegramPlugin: ChannelPlugin { const send = deps?.sendTelegram ?? getTelegramRuntime().channel.telegram.sendMessageTelegram; - const replyToMessageId = parseReplyToMessageId(replyToId); - const messageThreadId = parseThreadId(threadId); + const replyToMessageId = parseTelegramReplyToMessageId(replyToId); + const messageThreadId = parseTelegramThreadId(threadId); const result = await send(to, text, { verbose: false, messageThreadId, @@ -290,8 +270,8 @@ export const telegramPlugin: ChannelPlugin { const send = deps?.sendTelegram ?? getTelegramRuntime().channel.telegram.sendMessageTelegram; - const replyToMessageId = parseReplyToMessageId(replyToId); - const messageThreadId = parseThreadId(threadId); + const replyToMessageId = parseTelegramReplyToMessageId(replyToId); + const messageThreadId = parseTelegramThreadId(threadId); const result = await send(to, text, { verbose: false, mediaUrl, @@ -305,7 +285,7 @@ export const telegramPlugin: ChannelPlugin await getTelegramRuntime().channel.telegram.sendPollTelegram(to, poll, { accountId: accountId ?? undefined, - messageThreadId: parseThreadId(threadId), + messageThreadId: parseTelegramThreadId(threadId), silent: silent ?? undefined, isAnonymous: isAnonymous ?? undefined, }), diff --git a/src/channels/plugins/outbound/telegram.ts b/src/channels/plugins/outbound/telegram.ts index 25e3301b45c..52548f3c5c8 100644 --- a/src/channels/plugins/outbound/telegram.ts +++ b/src/channels/plugins/outbound/telegram.ts @@ -1,30 +1,11 @@ import type { ChannelOutboundAdapter } from "../types.js"; import { markdownToTelegramHtmlChunks } from "../../../telegram/format.js"; +import { + parseTelegramReplyToMessageId, + parseTelegramThreadId, +} from "../../../telegram/outbound-params.js"; import { sendMessageTelegram } from "../../../telegram/send.js"; -function parseReplyToMessageId(replyToId?: string | null) { - if (!replyToId) { - return undefined; - } - const parsed = Number.parseInt(replyToId, 10); - return Number.isFinite(parsed) ? parsed : undefined; -} - -function parseThreadId(threadId?: string | number | null) { - if (threadId == null) { - return undefined; - } - if (typeof threadId === "number") { - return Number.isFinite(threadId) ? Math.trunc(threadId) : undefined; - } - const trimmed = threadId.trim(); - if (!trimmed) { - return undefined; - } - const parsed = Number.parseInt(trimmed, 10); - return Number.isFinite(parsed) ? parsed : undefined; -} - export const telegramOutbound: ChannelOutboundAdapter = { deliveryMode: "direct", chunker: markdownToTelegramHtmlChunks, @@ -32,8 +13,8 @@ export const telegramOutbound: ChannelOutboundAdapter = { textChunkLimit: 4000, sendText: async ({ to, text, accountId, deps, replyToId, threadId }) => { const send = deps?.sendTelegram ?? sendMessageTelegram; - const replyToMessageId = parseReplyToMessageId(replyToId); - const messageThreadId = parseThreadId(threadId); + const replyToMessageId = parseTelegramReplyToMessageId(replyToId); + const messageThreadId = parseTelegramThreadId(threadId); const result = await send(to, text, { verbose: false, textMode: "html", @@ -45,8 +26,8 @@ export const telegramOutbound: ChannelOutboundAdapter = { }, sendMedia: async ({ to, text, mediaUrl, accountId, deps, replyToId, threadId }) => { const send = deps?.sendTelegram ?? sendMessageTelegram; - const replyToMessageId = parseReplyToMessageId(replyToId); - const messageThreadId = parseThreadId(threadId); + const replyToMessageId = parseTelegramReplyToMessageId(replyToId); + const messageThreadId = parseTelegramThreadId(threadId); const result = await send(to, text, { verbose: false, mediaUrl, @@ -59,8 +40,8 @@ export const telegramOutbound: ChannelOutboundAdapter = { }, sendPayload: async ({ to, payload, accountId, deps, replyToId, threadId }) => { const send = deps?.sendTelegram ?? sendMessageTelegram; - const replyToMessageId = parseReplyToMessageId(replyToId); - const messageThreadId = parseThreadId(threadId); + const replyToMessageId = parseTelegramReplyToMessageId(replyToId); + const messageThreadId = parseTelegramThreadId(threadId); const telegramData = payload.channelData?.telegram as | { buttons?: Array>; quoteText?: string } | undefined; diff --git a/src/plugin-sdk/index.ts b/src/plugin-sdk/index.ts index 7b23c66799b..e50ab9dbf36 100644 --- a/src/plugin-sdk/index.ts +++ b/src/plugin-sdk/index.ts @@ -350,6 +350,10 @@ export { normalizeTelegramMessagingTarget, } from "../channels/plugins/normalize/telegram.js"; export { collectTelegramStatusIssues } from "../channels/plugins/status-issues/telegram.js"; +export { + parseTelegramReplyToMessageId, + parseTelegramThreadId, +} from "../telegram/outbound-params.js"; export { type TelegramProbe } from "../telegram/probe.js"; // Channel: Signal diff --git a/src/telegram/outbound-params.ts b/src/telegram/outbound-params.ts new file mode 100644 index 00000000000..1ad18e647b3 --- /dev/null +++ b/src/telegram/outbound-params.ts @@ -0,0 +1,22 @@ +export function parseTelegramReplyToMessageId(replyToId?: string | null): number | undefined { + if (!replyToId) { + return undefined; + } + const parsed = Number.parseInt(replyToId, 10); + return Number.isFinite(parsed) ? parsed : undefined; +} + +export function parseTelegramThreadId(threadId?: string | number | null): number | undefined { + if (threadId == null) { + return undefined; + } + if (typeof threadId === "number") { + return Number.isFinite(threadId) ? Math.trunc(threadId) : undefined; + } + const trimmed = threadId.trim(); + if (!trimmed) { + return undefined; + } + const parsed = Number.parseInt(trimmed, 10); + return Number.isFinite(parsed) ? parsed : undefined; +}