import type { loadConfig } from "../../../config/config.js"; import { logVerbose } from "../../../globals.js"; import { sendReactionWhatsApp } from "../../outbound.js"; import { formatError } from "../../session.js"; import type { WebInboundMsg } from "../types.js"; import { resolveGroupActivationFor } from "./group-activation.js"; export function maybeSendAckReaction(params: { cfg: ReturnType; msg: WebInboundMsg; agentId: string; sessionKey: string; conversationId: string; verbose: boolean; accountId?: string; info: (obj: unknown, msg: string) => void; warn: (obj: unknown, msg: string) => void; }) { if (!params.msg.id) return; const ackConfig = params.cfg.channels?.whatsapp?.ackReaction; const emoji = (ackConfig?.emoji ?? "").trim(); const directEnabled = ackConfig?.direct ?? true; const groupMode = ackConfig?.group ?? "mentions"; const conversationIdForCheck = params.msg.conversationId ?? params.msg.from; const shouldSendReaction = () => { if (!emoji) return false; if (params.msg.chatType === "direct") { return directEnabled; } if (params.msg.chatType === "group") { if (groupMode === "never") return false; if (groupMode === "always") return true; if (groupMode === "mentions") { const activation = resolveGroupActivationFor({ cfg: params.cfg, agentId: params.agentId, sessionKey: params.sessionKey, conversationId: conversationIdForCheck, }); if (activation === "always") return true; return params.msg.wasMentioned === true; } } return false; }; if (!shouldSendReaction()) return; params.info( { chatId: params.msg.chatId, messageId: params.msg.id, emoji }, "sending ack reaction", ); sendReactionWhatsApp(params.msg.chatId, params.msg.id, emoji, { verbose: params.verbose, fromMe: false, participant: params.msg.senderJid, accountId: params.accountId, }).catch((err) => { params.warn( { error: formatError(err), chatId: params.msg.chatId, messageId: params.msg.id, }, "failed to send ack reaction", ); logVerbose(`WhatsApp ack reaction failed for chat ${params.msg.chatId}: ${formatError(err)}`); }); }