mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-07 12:50:42 +00:00
Preserve exact Telegram selected quote text for native quote replies, share Telegram reply parameter construction between bot delivery and direct outbound sends, and retry with legacy replies when Telegram rejects native quote parameters.\n\nThanks @rubencu.
106 lines
2.8 KiB
TypeScript
106 lines
2.8 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
buildTelegramSendParams,
|
|
buildTelegramThreadReplyParams,
|
|
removeTelegramNativeQuoteParam,
|
|
resolveTelegramSendThreadSpec,
|
|
} from "./reply-parameters.js";
|
|
|
|
describe("telegram reply parameters", () => {
|
|
it("preserves exact quote text and quote metadata for native Telegram replies", () => {
|
|
expect(
|
|
buildTelegramSendParams({
|
|
replyToMessageId: 42,
|
|
replyQuoteMessageId: 42,
|
|
replyQuoteText: " quoted text\n",
|
|
replyQuotePosition: 12.9,
|
|
replyQuoteEntities: [{ type: "bold", offset: 1, length: 6 }],
|
|
thread: { id: 99, scope: "forum" },
|
|
silent: true,
|
|
}),
|
|
).toEqual({
|
|
message_thread_id: 99,
|
|
reply_parameters: {
|
|
message_id: 42,
|
|
quote: " quoted text\n",
|
|
quote_position: 12,
|
|
quote_entities: [{ type: "bold", offset: 1, length: 6 }],
|
|
allow_sending_without_reply: true,
|
|
},
|
|
disable_notification: true,
|
|
});
|
|
});
|
|
|
|
it("uses the selected reply id as the quote id when direct sends only provide quote text", () => {
|
|
expect(
|
|
buildTelegramThreadReplyParams({
|
|
replyToMessageId: 77,
|
|
replyQuoteText: " exact slice ",
|
|
useReplyIdAsQuoteSource: true,
|
|
}),
|
|
).toEqual({
|
|
reply_parameters: {
|
|
message_id: 77,
|
|
quote: " exact slice ",
|
|
allow_sending_without_reply: true,
|
|
},
|
|
});
|
|
});
|
|
|
|
it("falls back to legacy reply id for blank quotes or mismatched quote sources", () => {
|
|
expect(
|
|
buildTelegramThreadReplyParams({
|
|
replyToMessageId: 77,
|
|
replyQuoteMessageId: 78,
|
|
replyQuoteText: "quoted",
|
|
}),
|
|
).toEqual({
|
|
reply_to_message_id: 77,
|
|
allow_sending_without_reply: true,
|
|
});
|
|
|
|
expect(
|
|
buildTelegramThreadReplyParams({
|
|
replyToMessageId: 77,
|
|
replyQuoteText: " \n\t",
|
|
}),
|
|
).toEqual({
|
|
reply_to_message_id: 77,
|
|
allow_sending_without_reply: true,
|
|
});
|
|
});
|
|
|
|
it("converts rejected native quote params to legacy reply params for retry", () => {
|
|
expect(
|
|
removeTelegramNativeQuoteParam({
|
|
parse_mode: "HTML",
|
|
reply_parameters: {
|
|
message_id: 42,
|
|
quote: "quoted",
|
|
allow_sending_without_reply: true,
|
|
},
|
|
}),
|
|
).toEqual({
|
|
parse_mode: "HTML",
|
|
reply_to_message_id: 42,
|
|
allow_sending_without_reply: true,
|
|
});
|
|
});
|
|
|
|
it("keeps direct-message topic scope for Telegram DM topics", () => {
|
|
expect(
|
|
buildTelegramThreadReplyParams({
|
|
thread: resolveTelegramSendThreadSpec({
|
|
targetMessageThreadId: 5,
|
|
chatType: "direct",
|
|
}),
|
|
replyToMessageId: 42,
|
|
}),
|
|
).toEqual({
|
|
message_thread_id: 5,
|
|
reply_to_message_id: 42,
|
|
allow_sending_without_reply: true,
|
|
});
|
|
});
|
|
});
|