41 lines
2.7 KiB
Python
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()
|