





















@@ -937,8 +937,39 @@ describe("sendMessageTelegram", () => {
937937});
938938});
939939940-it("keeps native rich markdown tables within Telegram's column limit", async () => {
940+it("keeps markdown media syntax on the text-only rich path", async () => {
941941botApi.sendMessage.mockResolvedValue({ message_id: 47, chat: { id: "123" } });
942+943+await sendMessageTelegram("123", "See ", {
944+cfg: TELEGRAM_TEST_CFG,
945+token: "tok",
946+});
947+948+expect(botRawApi.sendRichMessage).toHaveBeenCalledWith({
949+chat_id: "123",
950+rich_message: { markdown: "See [diagram](https://example.com/diagram.png)" },
951+});
952+});
953+954+it("escapes HTML media tags on the text-only rich path", async () => {
955+botApi.sendMessage.mockResolvedValue({ message_id: 48, chat: { id: "123" } });
956+957+await sendMessageTelegram("123", '<b>See</b><img src="https://example.com/diagram.png">', {
958+cfg: TELEGRAM_TEST_CFG,
959+token: "tok",
960+textMode: "html",
961+});
962+963+expect(botRawApi.sendRichMessage).toHaveBeenCalledWith({
964+chat_id: "123",
965+rich_message: {
966+html: "<b>See</b><img src="https://example.com/diagram.png">",
967+},
968+});
969+});
970+971+it("keeps native rich markdown tables within Telegram's column limit", async () => {
972+botApi.sendMessage.mockResolvedValue({ message_id: 49, chat: { id: "123" } });
942973const markdown = markdownTable(20);
943974944975await sendMessageTelegram("123", markdown, {
@@ -953,7 +984,7 @@ describe("sendMessageTelegram", () => {
953984});
954985955986it("wraps wide rich markdown tables that exceed Telegram's column limit", async () => {
956-botApi.sendMessage.mockResolvedValue({ message_id: 48, chat: { id: "123" } });
987+botApi.sendMessage.mockResolvedValue({ message_id: 50, chat: { id: "123" } });
957988const markdown = markdownTable(21);
958989959990await sendMessageTelegram("123", markdown, {
@@ -968,7 +999,7 @@ describe("sendMessageTelegram", () => {
968999});
96910009701001it("leaves wide rich markdown tables alone inside fences", async () => {
971-botApi.sendMessage.mockResolvedValue({ message_id: 49, chat: { id: "123" } });
1002+botApi.sendMessage.mockResolvedValue({ message_id: 51, chat: { id: "123" } });
9721003const markdown = `~~~\n${markdownTable(25)}\n~~~`;
97310049741005await sendMessageTelegram("123", markdown, {
@@ -983,7 +1014,7 @@ describe("sendMessageTelegram", () => {
9831014});
98410159851016it("wraps only wide rich markdown tables outside fences", async () => {
986-botApi.sendMessage.mockResolvedValue({ message_id: 50, chat: { id: "123" } });
1017+botApi.sendMessage.mockResolvedValue({ message_id: 52, chat: { id: "123" } });
9871018const fencedTable = markdownTable(25);
9881019const outsideTable = markdownTable(21);
9891020const markdown = ["Before", "~~~", fencedTable, "~~~", "After", outsideTable].join("\n");
@@ -1004,7 +1035,7 @@ describe("sendMessageTelegram", () => {
10041035});
1005103610061037it("sends long rich markdown as one message", async () => {
1007-botApi.sendMessage.mockResolvedValue({ message_id: 51, chat: { id: "123" } });
1038+botApi.sendMessage.mockResolvedValue({ message_id: 53, chat: { id: "123" } });
10081039const markdown = `# Long\n\n${"**section** with _style_ and `code`\n".repeat(800)}`;
1009104010101041await sendMessageTelegram("123", markdown, {
@@ -1020,7 +1051,7 @@ describe("sendMessageTelegram", () => {
10201051});
1021105210221053it("chunks rich markdown above the Bot API rich message limit", async () => {
1023-botApi.sendMessage.mockResolvedValue({ message_id: 52, chat: { id: "123" } });
1054+botApi.sendMessage.mockResolvedValue({ message_id: 54, chat: { id: "123" } });
10241055const markdown = `# Long\n\n${"**section** with _style_ and `code`\n".repeat(3000)}`;
1025105610261057await sendMessageTelegram("123", markdown, {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。