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
|
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user