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
+89
View File
@@ -0,0 +1,89 @@
# -*- coding: utf-8 -*-
"""wechatauto v1.0.9 转发语音演示 —— 从本地媒体库提取 SILK 并作为文件发送
微信不支持右键直接转发语音消息(无转发入口),本项目实现为:
「本地媒体库提取 SILK 音频文件 → 以文件消息发送给目标联系人」。
链路:
1. 打开会话,定位最近一条语音消息(mmui::ChatVoiceItemView / DB 语音);
2. MediaDownloader.download_voice 从 media_0.db 提取 voice_data 落盘 .silk
3. WeChatGUI.send_file 以文件消息发送给目标。
用法:
python demo_forward_voice.py # 小哲→文件传输助手(安全演示)
python demo_forward_voice.py --target 豆芽 # 指定转发目标
python demo_forward_voice.py --who 群名 --target 某人
"""
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 WeChat
SRC_DEFAULT = "小哲"
TGT_DEFAULT = "文件传输助手"
def main():
args = [a for a in sys.argv[1:]]
who = SRC_DEFAULT
target = TGT_DEFAULT
if "--who" in args:
i = args.index("--who")
who = args[i + 1]
args = args[:i] + args[i + 2:]
if "--target" in args:
i = args.index("--target")
target = args[i + 1]
args = args[:i] + args[i + 2:]
names = [a for a in args if not a.startswith("--")]
if names:
who = names[0]
wx = WeChat()
print(f"当前登录:{wx.nickname}")
print(f"语音来源会话:{who}")
print(f"转发目标:{target}")
if who != wx._cur().who:
r = wx.ChatWith(who)
if not (isinstance(r, str) and r):
print(f" 打开会话「{who}」失败:{r}")
sys.exit(1)
chat = wx._cur()
msgs = chat.GetAllMessage()
voice = None
for m in msgs:
if getattr(m, "type", None) == "voice":
voice = m
break
if voice is None:
print(f" 会话「{who}」最近 50 条中没有语音消息,无法演示。")
sys.exit(1)
print(f" 找到语音消息:local_id={voice.local_id} 方向={voice.attr}")
t0 = time.time()
r = voice.forward_to(target)
print(f" 转发 => {r['status']} :: {r['message']} ({time.time()-t0:.1f}s)")
data = r.get("data") or {}
path = data.get("path")
if path:
print(f" 本地语音文件:{path}")
print("\n转发完成。")
if __name__ == "__main__":
main()