Files
kefu/deploy/contact-recovery-20260918/diagnose_current_contact.py
T
2026-09-21 10:34:06 +08:00

41 lines
2.7 KiB
Python

from pathlib import Path
import sys,json,sqlite3,datetime,types
sys.path.insert(0,r'C:\wechat_rpa')
from wxwork_db import WXWorkDB
from contact_relation import read_contact_relation
from contact_reply_guard import latest_contact_notice,conversation_contact_reason
from protocol_engine import ProtocolBot,session_key
root=Path(r'C:\Users\isard\AppData\Local\ZhenYangTangRPA')
account='1688856770803435';conv='S:'+account+'_7881301475099806'
cache=root/'wxwork_reply_cache'/account
connection=sqlite3.connect((cache/'message.db').as_uri()+'?mode=ro',uri=True)
columns=[r[1] for r in connection.execute('PRAGMA table_info(message_table)')]
reader=WXWorkDB.__new__(WXWorkDB);reader.user_cache={};reader.conv_cache={};reader._conns={account:connection}
messages=[]
for row in connection.execute('SELECT rowid,* FROM message_table WHERE conversation_id=? ORDER BY rowid',(conv,)):
parsed=reader._parse_message(account,dict(zip(['__rowid',*columns],row)))
if parsed:messages.append(parsed)
context={'account':account,'conv_id':conv,'messages':messages,'last_message':messages[-1],
'contact_relation':read_contact_relation(cache/'user.db',account,conv)}
queue=json.loads((root/'pending_replies.protocol.json').read_text('utf-8-sig'))
blocked=queue['contactBlocked'].get(session_key(account,conv))
sends=sqlite3.connect((root/'protocol_sends.sqlite3').as_uri()+'?mode=ro',uri=True)
def lookup(request):
row=sends.execute('SELECT status FROM sends WHERE request_id=?',(request,)).fetchone()
return {'status':row[0]} if row else None
bot=ProtocolBot.__new__(ProtocolBot);bot.account=account;bot.sender=types.SimpleNamespace(lookup=lookup)
allowed,evidence,reason=bot._contact_recheck(messages[-1],context,blocked)
notice=latest_contact_notice(context)
def metadata(m):
return {'rowid':m['rowid'],'server_id':m['server_id'],'time':datetime.datetime.fromtimestamp(m['send_time']).isoformat(),'content_type':m['content_type']}
report={'account':account,'conversation':conv,'last_rejection_notice':metadata(notice),
'latest_customer_events':[metadata(m) for m in messages[-4:]],
'last_seen_consumed':queue.get('seen',{}).get(session_key(account,conv))==messages[-1]['dedup_key'],
'old_context_logic_blocks':bool(conversation_contact_reason(context)),
'current_relation':context['contact_relation'], 'new_logic_allows_fresh_recheck':allowed,
'reason':reason,'existing_latest_send_record':lookup(messages[-1]['dedup_key']),
'real_messages_sent':0,'live_state_modified':False}
folder=Path(r'C:\kefu\deploy\contact-recovery-20260918')
(folder/'readonly-current-case.json').write_text(json.dumps(report,ensure_ascii=False,indent=2),'utf-8')
print(json.dumps(report,ensure_ascii=False));sends.close();connection.close()