mirror of
https://github.com/farcasclaudiu/openclaw.git
synced 2026-06-28 21:01:43 +03:00
refactor(telegram): share outbound param parsing
This commit is contained in:
@@ -14,6 +14,8 @@ import {
|
|||||||
normalizeAccountId,
|
normalizeAccountId,
|
||||||
normalizeTelegramMessagingTarget,
|
normalizeTelegramMessagingTarget,
|
||||||
PAIRING_APPROVED_MESSAGE,
|
PAIRING_APPROVED_MESSAGE,
|
||||||
|
parseTelegramReplyToMessageId,
|
||||||
|
parseTelegramThreadId,
|
||||||
resolveDefaultTelegramAccountId,
|
resolveDefaultTelegramAccountId,
|
||||||
resolveTelegramAccount,
|
resolveTelegramAccount,
|
||||||
resolveTelegramGroupRequireMention,
|
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<ResolvedTelegramAccount, TelegramProbe> = {
|
export const telegramPlugin: ChannelPlugin<ResolvedTelegramAccount, TelegramProbe> = {
|
||||||
id: "telegram",
|
id: "telegram",
|
||||||
meta: {
|
meta: {
|
||||||
@@ -277,8 +257,8 @@ export const telegramPlugin: ChannelPlugin<ResolvedTelegramAccount, TelegramProb
|
|||||||
pollMaxOptions: 10,
|
pollMaxOptions: 10,
|
||||||
sendText: async ({ to, text, accountId, deps, replyToId, threadId, silent }) => {
|
sendText: async ({ to, text, accountId, deps, replyToId, threadId, silent }) => {
|
||||||
const send = deps?.sendTelegram ?? getTelegramRuntime().channel.telegram.sendMessageTelegram;
|
const send = deps?.sendTelegram ?? getTelegramRuntime().channel.telegram.sendMessageTelegram;
|
||||||
const replyToMessageId = parseReplyToMessageId(replyToId);
|
const replyToMessageId = parseTelegramReplyToMessageId(replyToId);
|
||||||
const messageThreadId = parseThreadId(threadId);
|
const messageThreadId = parseTelegramThreadId(threadId);
|
||||||
const result = await send(to, text, {
|
const result = await send(to, text, {
|
||||||
verbose: false,
|
verbose: false,
|
||||||
messageThreadId,
|
messageThreadId,
|
||||||
@@ -290,8 +270,8 @@ export const telegramPlugin: ChannelPlugin<ResolvedTelegramAccount, TelegramProb
|
|||||||
},
|
},
|
||||||
sendMedia: async ({ to, text, mediaUrl, accountId, deps, replyToId, threadId, silent }) => {
|
sendMedia: async ({ to, text, mediaUrl, accountId, deps, replyToId, threadId, silent }) => {
|
||||||
const send = deps?.sendTelegram ?? getTelegramRuntime().channel.telegram.sendMessageTelegram;
|
const send = deps?.sendTelegram ?? getTelegramRuntime().channel.telegram.sendMessageTelegram;
|
||||||
const replyToMessageId = parseReplyToMessageId(replyToId);
|
const replyToMessageId = parseTelegramReplyToMessageId(replyToId);
|
||||||
const messageThreadId = parseThreadId(threadId);
|
const messageThreadId = parseTelegramThreadId(threadId);
|
||||||
const result = await send(to, text, {
|
const result = await send(to, text, {
|
||||||
verbose: false,
|
verbose: false,
|
||||||
mediaUrl,
|
mediaUrl,
|
||||||
@@ -305,7 +285,7 @@ export const telegramPlugin: ChannelPlugin<ResolvedTelegramAccount, TelegramProb
|
|||||||
sendPoll: async ({ to, poll, accountId, threadId, silent, isAnonymous }) =>
|
sendPoll: async ({ to, poll, accountId, threadId, silent, isAnonymous }) =>
|
||||||
await getTelegramRuntime().channel.telegram.sendPollTelegram(to, poll, {
|
await getTelegramRuntime().channel.telegram.sendPollTelegram(to, poll, {
|
||||||
accountId: accountId ?? undefined,
|
accountId: accountId ?? undefined,
|
||||||
messageThreadId: parseThreadId(threadId),
|
messageThreadId: parseTelegramThreadId(threadId),
|
||||||
silent: silent ?? undefined,
|
silent: silent ?? undefined,
|
||||||
isAnonymous: isAnonymous ?? undefined,
|
isAnonymous: isAnonymous ?? undefined,
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -1,30 +1,11 @@
|
|||||||
import type { ChannelOutboundAdapter } from "../types.js";
|
import type { ChannelOutboundAdapter } from "../types.js";
|
||||||
import { markdownToTelegramHtmlChunks } from "../../../telegram/format.js";
|
import { markdownToTelegramHtmlChunks } from "../../../telegram/format.js";
|
||||||
|
import {
|
||||||
|
parseTelegramReplyToMessageId,
|
||||||
|
parseTelegramThreadId,
|
||||||
|
} from "../../../telegram/outbound-params.js";
|
||||||
import { sendMessageTelegram } from "../../../telegram/send.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 = {
|
export const telegramOutbound: ChannelOutboundAdapter = {
|
||||||
deliveryMode: "direct",
|
deliveryMode: "direct",
|
||||||
chunker: markdownToTelegramHtmlChunks,
|
chunker: markdownToTelegramHtmlChunks,
|
||||||
@@ -32,8 +13,8 @@ export const telegramOutbound: ChannelOutboundAdapter = {
|
|||||||
textChunkLimit: 4000,
|
textChunkLimit: 4000,
|
||||||
sendText: async ({ to, text, accountId, deps, replyToId, threadId }) => {
|
sendText: async ({ to, text, accountId, deps, replyToId, threadId }) => {
|
||||||
const send = deps?.sendTelegram ?? sendMessageTelegram;
|
const send = deps?.sendTelegram ?? sendMessageTelegram;
|
||||||
const replyToMessageId = parseReplyToMessageId(replyToId);
|
const replyToMessageId = parseTelegramReplyToMessageId(replyToId);
|
||||||
const messageThreadId = parseThreadId(threadId);
|
const messageThreadId = parseTelegramThreadId(threadId);
|
||||||
const result = await send(to, text, {
|
const result = await send(to, text, {
|
||||||
verbose: false,
|
verbose: false,
|
||||||
textMode: "html",
|
textMode: "html",
|
||||||
@@ -45,8 +26,8 @@ export const telegramOutbound: ChannelOutboundAdapter = {
|
|||||||
},
|
},
|
||||||
sendMedia: async ({ to, text, mediaUrl, accountId, deps, replyToId, threadId }) => {
|
sendMedia: async ({ to, text, mediaUrl, accountId, deps, replyToId, threadId }) => {
|
||||||
const send = deps?.sendTelegram ?? sendMessageTelegram;
|
const send = deps?.sendTelegram ?? sendMessageTelegram;
|
||||||
const replyToMessageId = parseReplyToMessageId(replyToId);
|
const replyToMessageId = parseTelegramReplyToMessageId(replyToId);
|
||||||
const messageThreadId = parseThreadId(threadId);
|
const messageThreadId = parseTelegramThreadId(threadId);
|
||||||
const result = await send(to, text, {
|
const result = await send(to, text, {
|
||||||
verbose: false,
|
verbose: false,
|
||||||
mediaUrl,
|
mediaUrl,
|
||||||
@@ -59,8 +40,8 @@ export const telegramOutbound: ChannelOutboundAdapter = {
|
|||||||
},
|
},
|
||||||
sendPayload: async ({ to, payload, accountId, deps, replyToId, threadId }) => {
|
sendPayload: async ({ to, payload, accountId, deps, replyToId, threadId }) => {
|
||||||
const send = deps?.sendTelegram ?? sendMessageTelegram;
|
const send = deps?.sendTelegram ?? sendMessageTelegram;
|
||||||
const replyToMessageId = parseReplyToMessageId(replyToId);
|
const replyToMessageId = parseTelegramReplyToMessageId(replyToId);
|
||||||
const messageThreadId = parseThreadId(threadId);
|
const messageThreadId = parseTelegramThreadId(threadId);
|
||||||
const telegramData = payload.channelData?.telegram as
|
const telegramData = payload.channelData?.telegram as
|
||||||
| { buttons?: Array<Array<{ text: string; callback_data: string }>>; quoteText?: string }
|
| { buttons?: Array<Array<{ text: string; callback_data: string }>>; quoteText?: string }
|
||||||
| undefined;
|
| undefined;
|
||||||
|
|||||||
@@ -350,6 +350,10 @@ export {
|
|||||||
normalizeTelegramMessagingTarget,
|
normalizeTelegramMessagingTarget,
|
||||||
} from "../channels/plugins/normalize/telegram.js";
|
} from "../channels/plugins/normalize/telegram.js";
|
||||||
export { collectTelegramStatusIssues } from "../channels/plugins/status-issues/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";
|
export { type TelegramProbe } from "../telegram/probe.js";
|
||||||
|
|
||||||
// Channel: Signal
|
// Channel: Signal
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user