feat: 微信自动化客服(wechatauto-replica) 干净历史导入 - AI 自动回复/语音收发/朋友圈发布
This commit is contained in:
@@ -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()
|
||||
Reference in New Issue
Block a user