65 lines
1.7 KiB
TypeScript
65 lines
1.7 KiB
TypeScript
import type { ClawdbotConfig } from "../config/config.js";
|
|
import { resolveTelegramAccount } from "./accounts.js";
|
|
|
|
export type TelegramReactionLevel = "off" | "ack" | "minimal" | "extensive";
|
|
|
|
export type ResolvedReactionLevel = {
|
|
level: TelegramReactionLevel;
|
|
/** Whether ACK reactions (e.g., 👀 when processing) are enabled. */
|
|
ackEnabled: boolean;
|
|
/** Whether agent-controlled reactions are enabled. */
|
|
agentReactionsEnabled: boolean;
|
|
/** Guidance level for agent reactions (minimal = sparse, extensive = liberal). */
|
|
agentReactionGuidance?: "minimal" | "extensive";
|
|
};
|
|
|
|
/**
|
|
* Resolve the effective reaction level and its implications.
|
|
*/
|
|
export function resolveTelegramReactionLevel(params: {
|
|
cfg: ClawdbotConfig;
|
|
accountId?: string;
|
|
}): ResolvedReactionLevel {
|
|
const account = resolveTelegramAccount({
|
|
cfg: params.cfg,
|
|
accountId: params.accountId,
|
|
});
|
|
const level = (account.config.reactionLevel ?? "minimal") as TelegramReactionLevel;
|
|
|
|
switch (level) {
|
|
case "off":
|
|
return {
|
|
level,
|
|
ackEnabled: false,
|
|
agentReactionsEnabled: false,
|
|
};
|
|
case "ack":
|
|
return {
|
|
level,
|
|
ackEnabled: true,
|
|
agentReactionsEnabled: false,
|
|
};
|
|
case "minimal":
|
|
return {
|
|
level,
|
|
ackEnabled: false,
|
|
agentReactionsEnabled: true,
|
|
agentReactionGuidance: "minimal",
|
|
};
|
|
case "extensive":
|
|
return {
|
|
level,
|
|
ackEnabled: false,
|
|
agentReactionsEnabled: true,
|
|
agentReactionGuidance: "extensive",
|
|
};
|
|
default:
|
|
// Fallback to ack behavior
|
|
return {
|
|
level: "ack",
|
|
ackEnabled: true,
|
|
agentReactionsEnabled: false,
|
|
};
|
|
}
|
|
}
|