Files
kefu/deploy/loading-performance-20260917/protocol_database_scope_patch.py
T
2026-09-21 10:34:06 +08:00

56 lines
4.0 KiB
Python

from pathlib import Path
import shutil
root=Path('C:/wechat_rpa')
path=root/'wxwork_db.py'
text=path.read_text(encoding='utf-8')
def replace(old,new,count=1):
global text
assert text.count(old)==count,(str(path),old[:90],text.count(old),count)
text=text.replace(old,new)
replace('def decrypt_with_keys(db_base: str, out_dir: str, keys_map: dict, use_cache: bool = True) -> list:', 'def decrypt_with_keys(db_base: str, out_dir: str, keys_map: dict, use_cache: bool = True, *, account="", database_names=None) -> list:')
replace(' decrypted_dbs = []\n os.makedirs(out_dir, exist_ok=True)', ''' account = str(account or "")
if account and not account.isdecimal():
raise ValueError("企业微信账号 ID 无效")
names = _RELEVANT_DBS if database_names is None else tuple(database_names)
if not names or any(name not in _RELEVANT_DBS for name in names):
raise ValueError("企业微信数据库范围无效")
decrypted_dbs = []
os.makedirs(out_dir, exist_ok=True)''')
replace(' for user_dir in sorted(os.listdir(db_base)):', ' for user_dir in ([account] if account else sorted(os.listdir(db_base))):')
replace(' for db_name in _RELEVANT_DBS:', ' for db_name in names:')
replace(' cache_dir: str | None = None, poll_interval: float = 2.0):', ' cache_dir: str | None = None, poll_interval: float = 2.0, *, account="", load_metadata=True):')
replace(' self.db_base = db_base\n self.keys_map', ''' self.db_base = db_base
self.account = str(account or "")
if self.account and not self.account.isdecimal():
raise ValueError("企业微信账号 ID 无效")
self._load_metadata_enabled = bool(load_metadata)
self._database_names = _RELEVANT_DBS if self._load_metadata_enabled else ("message.db",)
self.keys_map''')
replace(' decrypted = decrypt_with_keys(self.db_base, self.cache_dir, self.keys_map, use_cache=not refresh)', ''' decrypted = decrypt_with_keys(self.db_base, self.cache_dir, self.keys_map, use_cache=not refresh,
account=self.account, database_names=self._database_names)''')
replace(' self._load_metadata()\n for out_path, db_name, user_dir in decrypted:', ' if self._load_metadata_enabled:\n self._load_metadata()\n for out_path, db_name, user_dir in decrypted:')
replace(' for account in sorted(os.listdir(self.db_base)):\n for name in _RELEVANT_DBS:', ' for account in ([self.account] if self.account else sorted(os.listdir(self.db_base))):\n for name in self._database_names:')
compile(text,str(path),'exec')
backup=root/'backups/loading-performance-20260917'/path.name
assert not backup.exists()
shutil.copy2(path,backup)
path.write_text(text,encoding='utf-8')
path=root/'reply_database.py'
text=path.read_text(encoding='utf-8')
replace(' def _open_database(*, account="", initialize=True, source_directory=None):', ' def _open_database(*, account="", initialize=True, source_directory=None, load_metadata=True):')
replace(' database = WXWorkDB(source, keys, cache_dir=cache)', ' database = WXWorkDB(source, keys, cache_dir=cache, account=account, load_metadata=load_metadata)')
replace(' database = WXWorkDB(source, load_keys(), cache_dir=cache)', ' database = WXWorkDB(source, load_keys(), cache_dir=cache, account=account, load_metadata=load_metadata)')
compile(text,str(path),'exec')
path.write_text(text,encoding='utf-8')
path=root/'wecom_environment.py'
text=path.read_text(encoding='utf-8')
replace(' database = LiveReplyDatabase._open_database(account=account, initialize=initialize, source_directory=source)', ' database = LiveReplyDatabase._open_database(account=account, initialize=initialize, source_directory=source, load_metadata=False)')
compile(text,str(path),'exec')
path.write_text(text,encoding='utf-8')
print('Protocol checks prepare only the current account message.db; actual reply startup loads its metadata.')