fix: block system/gh accounts, add sender wxid to msgs, weixin:// filter, wxhelper v2
This commit is contained in:
+15
-6
@@ -7,6 +7,7 @@ os.environ["NO_PROXY"] = "*"
|
||||
from http.server import HTTPServer, BaseHTTPRequestHandler
|
||||
|
||||
BOT_WXID = "wxid_7onnerpx2s2l22"
|
||||
BLOCK_WXIDS = {"fmessage", "weixin", "wechat"} # 系统账号/微信团队,不回复
|
||||
WX_API = "http://127.0.0.1:19088"
|
||||
LOG_FILE = r"C:\Users\hmo\Desktop\wechat_agent.log"
|
||||
TCP_PORT = 19099
|
||||
@@ -37,6 +38,9 @@ def wxpost(path, data=None, timeout=10):
|
||||
return {"code": -1}
|
||||
|
||||
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})
|
||||
log(f"SEND {wxid}: {r.get('msg','')}")
|
||||
|
||||
@@ -111,10 +115,13 @@ def process_msg(raw_data):
|
||||
last_msg_time = time.time()
|
||||
try:
|
||||
d = json.loads(raw_data)
|
||||
fu = d.get("fromUser", "") or d.get("fromuser", "") or d.get("wxid", "")
|
||||
ct = d.get("content", "") or d.get("msg", "")
|
||||
log(f"RAW: fromUser={d.get('fromUser','')} type={d.get('type','')} self={d.get('isSelf',d.get('self',0))}")
|
||||
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)
|
||||
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
|
||||
# Route by message type
|
||||
if msg_type == 34: # Voice
|
||||
@@ -124,9 +131,11 @@ def process_msg(raw_data):
|
||||
return
|
||||
if msg_type == 3: # Image - wxhelper sends image as separate event
|
||||
return
|
||||
# Text
|
||||
log(f"<- {fu}: {ct[:50]}")
|
||||
reply = call_hermes(fu, ct)
|
||||
# Text - prepend sender wxid+name so Hermes knows who's talking
|
||||
sender_name = get_nickname(fu)
|
||||
msg_with_sender = f"[{fu}|{sender_name}] {ct}"
|
||||
log(f"<- {fu} ({sender_name}): {ct[:50]}")
|
||||
reply = call_hermes(fu, msg_with_sender)
|
||||
if reply:
|
||||
log(f"-> {fu}: {reply[:50]}")
|
||||
process_tags(reply, fu)
|
||||
|
||||
Reference in New Issue
Block a user