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()