155 lines
3.8 KiB
TypeScript
155 lines
3.8 KiB
TypeScript
// @ts-nocheck
|
|
import { buildTelegramMessageContext } from "./bot-message-context.js";
|
|
import { dispatchTelegramMessage } from "./bot-message-dispatch.js";
|
|
import {
|
|
diagnosticLogger as diag,
|
|
logMessageProcessed,
|
|
logMessageQueued,
|
|
logSessionStateChange,
|
|
} from "../logging/diagnostic.js";
|
|
|
|
export const createTelegramMessageProcessor = (deps) => {
|
|
const {
|
|
bot,
|
|
cfg,
|
|
account,
|
|
telegramCfg,
|
|
historyLimit,
|
|
groupHistories,
|
|
dmPolicy,
|
|
allowFrom,
|
|
groupAllowFrom,
|
|
ackReactionScope,
|
|
logger,
|
|
resolveGroupActivation,
|
|
resolveGroupRequireMention,
|
|
resolveTelegramGroupConfig,
|
|
runtime,
|
|
replyToMode,
|
|
streamMode,
|
|
textLimit,
|
|
opts,
|
|
resolveBotTopicsEnabled,
|
|
} = deps;
|
|
|
|
return async (primaryCtx, allMedia, storeAllowFrom, options) => {
|
|
const chatId = primaryCtx?.message?.chat?.id ?? primaryCtx?.chat?.id ?? "unknown";
|
|
const messageId = primaryCtx?.message?.message_id ?? "unknown";
|
|
const startTime = Date.now();
|
|
|
|
diag.info(
|
|
`process message start: channel=telegram chatId=${chatId} messageId=${messageId} mediaCount=${
|
|
allMedia?.length ?? 0
|
|
}`,
|
|
);
|
|
|
|
let sessionKey: string | undefined;
|
|
|
|
try {
|
|
const context = await buildTelegramMessageContext({
|
|
primaryCtx,
|
|
allMedia,
|
|
storeAllowFrom,
|
|
options,
|
|
bot,
|
|
cfg,
|
|
account,
|
|
historyLimit,
|
|
groupHistories,
|
|
dmPolicy,
|
|
allowFrom,
|
|
groupAllowFrom,
|
|
ackReactionScope,
|
|
logger,
|
|
resolveGroupActivation,
|
|
resolveGroupRequireMention,
|
|
resolveTelegramGroupConfig,
|
|
});
|
|
if (!context) {
|
|
const durationMs = Date.now() - startTime;
|
|
diag.debug(
|
|
`process message skipped: channel=telegram chatId=${chatId} messageId=${messageId} reason=no_context`,
|
|
);
|
|
logMessageProcessed({
|
|
channel: "telegram",
|
|
chatId,
|
|
messageId,
|
|
durationMs,
|
|
outcome: "skipped",
|
|
reason: "no_context",
|
|
});
|
|
return;
|
|
}
|
|
|
|
sessionKey = context?.route?.sessionKey;
|
|
diag.info(
|
|
`process message dispatching: channel=telegram chatId=${chatId} messageId=${messageId} sessionKey=${
|
|
sessionKey ?? "unknown"
|
|
}`,
|
|
);
|
|
if (sessionKey) {
|
|
logMessageQueued({ sessionKey, channel: "telegram", source: "telegram" });
|
|
}
|
|
|
|
await dispatchTelegramMessage({
|
|
context,
|
|
bot,
|
|
cfg,
|
|
runtime,
|
|
replyToMode,
|
|
streamMode,
|
|
textLimit,
|
|
telegramCfg,
|
|
opts,
|
|
resolveBotTopicsEnabled,
|
|
});
|
|
|
|
const durationMs = Date.now() - startTime;
|
|
logMessageProcessed({
|
|
channel: "telegram",
|
|
chatId,
|
|
messageId,
|
|
sessionKey,
|
|
durationMs,
|
|
outcome: "completed",
|
|
});
|
|
if (sessionKey) {
|
|
logSessionStateChange({
|
|
sessionKey,
|
|
state: "idle",
|
|
reason: "message_completed",
|
|
});
|
|
}
|
|
diag.info(
|
|
`process message complete: channel=telegram chatId=${chatId} messageId=${messageId} sessionKey=${
|
|
sessionKey ?? "unknown"
|
|
} durationMs=${durationMs}`,
|
|
);
|
|
} catch (err) {
|
|
const durationMs = Date.now() - startTime;
|
|
logMessageProcessed({
|
|
channel: "telegram",
|
|
chatId,
|
|
messageId,
|
|
sessionKey,
|
|
durationMs,
|
|
outcome: "error",
|
|
error: String(err),
|
|
});
|
|
if (sessionKey) {
|
|
logSessionStateChange({
|
|
sessionKey,
|
|
state: "idle",
|
|
reason: "message_error",
|
|
});
|
|
}
|
|
diag.error(
|
|
`process message error: channel=telegram chatId=${chatId} messageId=${messageId} durationMs=${durationMs} error="${String(
|
|
err,
|
|
)}"`,
|
|
);
|
|
throw err;
|
|
}
|
|
};
|
|
};
|