From 5bc462af8554cf91a9a265818b6eac2aafa7b492 Mon Sep 17 00:00:00 2001 From: Kyan Du Date: Sat, 28 Mar 2026 15:22:33 +0800 Subject: [PATCH] fix: detect @-mentions in type-49 (appmsg) content XML For reference/quote messages (type=49), WeChat may place inside the content XML rather than the source column. This caused @-mentions in quoted replies to be silently missed. Now falls back to checking content XML for type-49 messages when source XML has no mention, ensuring quoted replies with @-mentions are properly detected. Fixes: group chat replies via quote not triggering bot response --- .../src/tools/wechat_messages.rs | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/agent-server-rust/src/tools/wechat_messages.rs b/packages/agent-server-rust/src/tools/wechat_messages.rs index d576e9f..250ec20 100644 --- a/packages/agent-server-rust/src/tools/wechat_messages.rs +++ b/packages/agent-server-rust/src/tools/wechat_messages.rs @@ -352,13 +352,23 @@ pub fn list_messages( .and_then(|v| v.as_i64()) .unwrap_or(0) != 0; - if !hex_source.is_empty() { + let from_source = if !hex_source.is_empty() { let source_xml = decode_message_content(hex_source, source_compressed); - if check_is_mentioned(&source_xml, account_dir) { - Some(true) - } else { - None - } + check_is_mentioned(&source_xml, account_dir) + } else { + false + }; + + // For type-49 (appmsg) messages — especially reference/quote messages — + // WeChat may place inside the content XML instead of source. + let from_content = if !from_source && (msg_type & 0x7FFFFFFF) == 49 { + check_is_mentioned(&body, account_dir) + } else { + false + }; + + if from_source || from_content { + Some(true) } else { None }