fix: block system/gh accounts, add sender wxid to msgs, weixin:// filter, wxhelper v2

This commit is contained in:
hmo
2026-05-19 06:01:55 +08:00
parent c646519f42
commit 9e4c50a8a7
+15 -6
View File
@@ -7,6 +7,7 @@ os.environ["NO_PROXY"] = "*"
from http.server import HTTPServer, BaseHTTPRequestHandler from http.server import HTTPServer, BaseHTTPRequestHandler
BOT_WXID = "wxid_7onnerpx2s2l22" BOT_WXID = "wxid_7onnerpx2s2l22"
BLOCK_WXIDS = {"fmessage", "weixin", "wechat"} # 系统账号/微信团队,不回复
WX_API = "http://127.0.0.1:19088" WX_API = "http://127.0.0.1:19088"
LOG_FILE = r"C:\Users\hmo\Desktop\wechat_agent.log" LOG_FILE = r"C:\Users\hmo\Desktop\wechat_agent.log"
TCP_PORT = 19099 TCP_PORT = 19099
@@ -37,6 +38,9 @@ def wxpost(path, data=None, timeout=10):
return {"code": -1} return {"code": -1}
def send_wx(wxid, msg): def send_wx(wxid, msg):
# Strip weixin:// URLs that WeChat interprets as commands
import re as _re2
msg = _re2.sub(r'weixin://[^\s]+', '[链接已过滤]', msg)
r = wxpost("/api/sendTextMsg", {"wxid": wxid, "msg": msg}) r = wxpost("/api/sendTextMsg", {"wxid": wxid, "msg": msg})
log(f"SEND {wxid}: {r.get('msg','')}") log(f"SEND {wxid}: {r.get('msg','')}")
@@ -111,10 +115,13 @@ def process_msg(raw_data):
last_msg_time = time.time() last_msg_time = time.time()
try: try:
d = json.loads(raw_data) d = json.loads(raw_data)
fu = d.get("fromUser", "") or d.get("fromuser", "") or d.get("wxid", "") log(f"RAW: fromUser={d.get('fromUser','')} type={d.get('type','')} self={d.get('isSelf',d.get('self',0))}")
ct = d.get("content", "") or d.get("msg", "") fu = d.get("fromUser", "") or d.get("fromuser", "") or d.get("sender", "")
ct = d.get("content", "") or d.get("msg", "") or d.get("text", "")
msg_type = d.get("type", 1) msg_type = d.get("type", 1)
if not fu or not ct or fu == BOT_WXID: is_self = d.get("isSelf", 0) or d.get("self", 0)
if not fu or not ct or fu == BOT_WXID or fu in BLOCK_WXIDS or fu.startswith("gh_") or is_self:
log(f"SKIP: fu={fu} self={is_self}")
return return
# Route by message type # Route by message type
if msg_type == 34: # Voice if msg_type == 34: # Voice
@@ -124,9 +131,11 @@ def process_msg(raw_data):
return return
if msg_type == 3: # Image - wxhelper sends image as separate event if msg_type == 3: # Image - wxhelper sends image as separate event
return return
# Text # Text - prepend sender wxid+name so Hermes knows who's talking
log(f"<- {fu}: {ct[:50]}") sender_name = get_nickname(fu)
reply = call_hermes(fu, ct) msg_with_sender = f"[{fu}|{sender_name}] {ct}"
log(f"<- {fu} ({sender_name}): {ct[:50]}")
reply = call_hermes(fu, msg_with_sender)
if reply: if reply:
log(f"-> {fu}: {reply[:50]}") log(f"-> {fu}: {reply[:50]}")
process_tags(reply, fu) process_tags(reply, fu)