feat: 微信自动化客服(wechatauto-replica) 干净历史导入 - AI 自动回复/语音收发/朋友圈发布

This commit is contained in:
2026-09-16 10:12:49 +08:00
commit c3b98f4c4e
69 changed files with 19828 additions and 0 deletions
+97
View File
@@ -0,0 +1,97 @@
# -*- coding: utf-8 -*-
"""wechatauto 复刻版 —— 数据库读取示例程序
基于本地数据库解密,读取微信 4.x 的消息与会话,不依赖 UI 自动化。
使用前提:
1. 微信 4.x 已登录运行(首次运行时需要从进程内存提取密钥)
2. 已安装依赖:pip install -e .
用法:
python demo_db.py
"""
from __future__ import annotations
import os
import sys
import time
try:
os.system("chcp 65001 >nul 2>&1")
except Exception:
pass
try:
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
except AttributeError:
pass
from wechatauto import WeChatDB
def show_account(db: WeChatDB):
info = db.get_self_info()
print("-" * 60)
print("当前账号信息")
print("-" * 60)
print(f" 微信号 : {info['username']}")
print(f" 昵称 : {info['nick_name']}")
print(f" 数据目录: {db.account_dir}")
def show_sessions(db: WeChatDB, limit: int = 8):
print()
print("-" * 60)
print("会话列表(前 %d 条)" % limit)
print("-" * 60)
for s in db.get_sessions(limit=limit):
name = db.get_nickname(s["username"])
if not s["summary"]:
continue
t = time.strftime("%m-%d %H:%M", time.localtime(s["last_time"]))
unread = f" [未读 {s['unread']}]" if s["unread"] else ""
print(f" {name:<20} {t} {s['summary'][:30]}{unread}")
def show_messages(db: WeChatDB, who: str, limit: int = 10, display_name: str = ""):
print()
print("-" * 60)
print(f"最近消息:{display_name or who}")
print("-" * 60)
messages = db.get_messages(who, limit=limit)
if not messages:
print(" (没有找到消息,请确认微信号/群号是否正确)")
return
for m in reversed(messages):
t = time.strftime("%m-%d %H:%M", time.localtime(m["create_time"]))
sender = "" if m["sender_id"] == 2 else "对方"
content = m["content"].replace("\n", " ")
print(f" [{t}] {sender} [{m['type']}] {content[:60]}")
def main():
print("正在初始化微信数据库读取器 ...")
t0 = time.time()
db = WeChatDB()
print(f"初始化完成({time.time() - t0:.1f}s,账号目录:{db.account}")
show_account(db)
show_sessions(db)
who = input("\n输入会话昵称或微信号(直接回车查看示例会话):").strip()
if not who:
who = "文件传输助手"
hits = db.search_contact(who)
if hits:
who = hits[0]["username"]
else:
hits = db.search_contact(who)
if hits and hits[0]["nick_name"] != who:
who = hits[0]["username"]
print(f" 已匹配联系人:{hits[0]['nick_name']}{who}")
show_messages(db, who, display_name=db.get_nickname(who))
if __name__ == "__main__":
main()