
























@@ -1676,89 +1676,6 @@ describe("createTelegramBot", () => {
16761676}
16771677});
167816781679-it("isolates inbound debounce by DM topic thread id", async () => {
1680-const DEBOUNCE_MS = 4321;
1681-onSpy.mockClear();
1682-replySpy.mockClear();
1683-loadConfig.mockReturnValue({
1684-agents: {
1685-defaults: {
1686-envelopeTimezone: "utc",
1687-},
1688-},
1689-messages: {
1690-inbound: {
1691-debounceMs: DEBOUNCE_MS,
1692-},
1693-},
1694-channels: {
1695-telegram: {
1696-dmPolicy: "open",
1697-allowFrom: ["*"],
1698-},
1699-},
1700-});
1701-1702-const setTimeoutSpy = vi.spyOn(globalThis, "setTimeout");
1703-try {
1704-const repliesDelivered = waitForReplyCalls(2);
1705-createTelegramBot({ token: "tok" });
1706-const handler = getOnHandler("message") as (ctx: Record<string, unknown>) => Promise<void>;
1707-1708-await handler({
1709-message: {
1710-chat: { id: 7, type: "private" },
1711-text: "topic-100",
1712-date: 1736380800,
1713-message_id: 201,
1714-message_thread_id: 100,
1715-from: { id: 42, first_name: "Ada" },
1716-},
1717-me: { username: "openclaw_bot" },
1718-getFile: async () => ({}),
1719-});
1720-await handler({
1721-message: {
1722-chat: { id: 7, type: "private" },
1723-text: "topic-200",
1724-date: 1736380801,
1725-message_id: 202,
1726-message_thread_id: 200,
1727-from: { id: 42, first_name: "Ada" },
1728-},
1729-me: { username: "openclaw_bot" },
1730-getFile: async () => ({}),
1731-});
1732-1733-expect(replySpy).not.toHaveBeenCalled();
1734-1735-const debounceTimerIndexes = setTimeoutSpy.mock.calls
1736-.map((call, index) => ({ index, delay: call[1] }))
1737-.filter((entry) => entry.delay === DEBOUNCE_MS)
1738-.map((entry) => entry.index);
1739-expect(debounceTimerIndexes.length).toBeGreaterThanOrEqual(2);
1740-1741-for (const index of debounceTimerIndexes) {
1742-clearTimeout(setTimeoutSpy.mock.results[index]?.value as ReturnType<typeof setTimeout>);
1743-}
1744-for (const index of debounceTimerIndexes) {
1745-const flushTimer = setTimeoutSpy.mock.calls[index]?.[0] as (() => unknown) | undefined;
1746-await flushTimer?.();
1747-}
1748-1749-await repliesDelivered;
1750-const threadIds = replySpy.mock.calls
1751-.map(
1752-(call: [unknown, ...unknown[]]) =>
1753-(call[0] as { MessageThreadId?: number }).MessageThreadId,
1754-)
1755-.toSorted((a: number | undefined, b: number | undefined) => (a ?? 0) - (b ?? 0));
1756-expect(threadIds).toEqual([100, 200]);
1757-} finally {
1758-setTimeoutSpy.mockRestore();
1759-}
1760-});
1761-17621679it("handles quote-only replies without reply metadata", async () => {
17631680onSpy.mockClear();
17641681sendMessageSpy.mockClear();
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。