mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-17 18:11:40 +00:00
Fixes #42156. Answer Telegram callback queries before per-chat/topic sequentialize can queue the handler behind an active turn, and carry the in-flight answer promise on the grammY context so the normal handler reuses it instead of double-answering. Proof: - node scripts/run-vitest.mjs extensions/telegram/src/bot.create-telegram-bot.test.ts -- -t "answers callback queries before same-chat sequentialize delays handlers|sequentializes updates by chat and thread|routes callback_query payloads as messages" - node scripts/run-vitest.mjs extensions/telegram/src/bot.test.ts extensions/telegram/src/bot-handlers.runtime.test.ts - node_modules/.bin/oxfmt --check extensions/telegram/src/bot-core.ts extensions/telegram/src/bot-handlers.runtime.ts extensions/telegram/src/callback-query-answer-state.ts extensions/telegram/src/bot.create-telegram-bot.test.ts - git diff --check origin/main...HEAD - .agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main - Azure Crabbox cbx_cba20c462ad5 / silver-barnacle: OPENCLAW_TESTBOX=1 node scripts/crabbox-wrapper.mjs run --provider azure --class Standard_D4ads_v6 --idle-timeout 90m --ttl 240m --timing-json -- env OPENCLAW_CHECK_CHANGED_REMOTE_CHILD=1 OPENCLAW_CHANGED_LANES_RAW_SYNC=1 corepack pnpm check:changed Proof gap: live Telegram Desktop/burner-account proof was not run because openclaw-telegram-user-crabbox-proof is not installed in this shell.
19 lines
603 B
TypeScript
19 lines
603 B
TypeScript
const TELEGRAM_CALLBACK_QUERY_ANSWER_PROMISE = Symbol.for(
|
|
"openclaw.telegram.callbackQueryAnswerPromise",
|
|
);
|
|
|
|
export function setTelegramCallbackQueryAnswerPromise(
|
|
ctx: object,
|
|
promise: Promise<unknown>,
|
|
): void {
|
|
Object.defineProperty(ctx, TELEGRAM_CALLBACK_QUERY_ANSWER_PROMISE, {
|
|
configurable: true,
|
|
value: promise,
|
|
});
|
|
}
|
|
|
|
export function getTelegramCallbackQueryAnswerPromise(ctx: object): Promise<unknown> | undefined {
|
|
const promise = (ctx as Record<PropertyKey, unknown>)[TELEGRAM_CALLBACK_QUERY_ANSWER_PROMISE];
|
|
return promise instanceof Promise ? promise : undefined;
|
|
}
|