截止 2024.01.30,想在个人微信群收发消息,潜在思路有这些:
😔 优先向官方求助。确认还没有正式渠道
🙄 企微/公众号。机器人被设计成“应用”而非“用户”,运行有诸多限制
😮💨 微信 PC web 版/ QQ 浏览器版/ 统信 UOS 版。目前新号/新版无法登录
🤐 Hook 进程,汇编调用函数。类似“金山游侠”
🤨 模拟器。类似 Selenium/Appium 自动化,不稳定
🤔 OCR。类似原神 AI 辅助工具,很难保证识别精度
本文介绍 python-wechaty 魔法接入(ipadLogin 方式),限时免费。
申请一个测试账号,例如用户名为“豆哥”。
保证 linux 时区正确。以 Asia/Shanghai
为例,/etc/localtime
和 /etc/timezone
要对齐
$ cat /etc/timezone
Asia/Shanghai
$ ls -l /etc/localtime
lrwxrwxrwx 1 root root 33 11月 17 2022 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai
注意 python-wechaty-template “看起来” 已不再维护,请谨慎评估风险。
STEP1. 打开 pad-local 官网,获取限时免费 token,如 puppet_padlocal_xxx
。
STEP2. 启动 gateway。终端弹出二维码链接后,扫码登录。
首次运行可能要多扫几次,成功应出现 “IoClient 豆哥 logged in” 日志。
$ git clone https://github.com/wechaty/python-wechaty-template
$ cd python-wechaty-template
$ ./start_gateway_docker.sh puppet_padlocal_xxx
..
Online QR Code Image: https://wechaty.js.org/qrcode/http%3A%2F%2..
..
04:01:56 INFO IoClient 豆哥 logged in
gateway 仅仅是持续监听 8080 端口的消息代理,并不执行业务逻辑。
STEP3. 打开新终端,安装依赖,调整 3 处代码。这里 有修改好的 3 个文件供对比。
cd python-wechaty-template
python3 -m pip install "urllib3<2.0.0" # 老项目需要老的 urllib3
python3 -m pip install -r requirements.txt
# 第一处, docker 首次启动没有 `bot`
cat Makefile
dockerrun:
docker stop bot && docker rm bot # 删除这行
docker run -it -d -v $(P):/bot --name bot -p 8004:8004 py-wechaty-template-bot:latest
# 第二处,已安装的 puppet server 不存在,注释 ping、把 IP 改成 localhost
cat ~/miniconda3/lib/python3.9/site-packages/wechaty_puppet_service/puppet.py
..
893 # if ping_endpoint(self.options.end_point) is False:
894 # raise WechatyPuppetConfigurationError(
895 # f"can't not ping endpoint: {self.options.end_point}"
896 # ) 注释这个判断
897
898 host, port = extract_host_and_port(self.options.end_point)
899 host = '127.0.0.1' # 增加这句
900 self.channel = Channel(host=host, port=port)
# 第三处,样例插件未完全实现导致崩溃,只保留 `DingDongPlugin`
cat bot.py
..
bot.use([
DingDongPlugin(),
# RepeaterPlugin(), 注释这些插件
# InfoLoggerPlugin(),
# CounterPlugin(),
# UICounterPlugin(),
# GithubMessageForwarderPlugin(
# endpoint=os.environ.get('github_endpoint', None) or "your-custom-endpoint"
# ),
])
STEP4. Makefile
编译运行测试样例
make bot
python3 bot.py # 确保这两句没有崩溃
bot.py
应能看到这些日志:
成功后打开微信,发送 ding
可以收到 dong
STEP5. 集成 HuixiangDou
假设你已经读过 README,能够运行 STEP2. 运行基础版技术助手
。那么修改 config.ini
,服务类型改成 wechat_personal
,运行 main
默认会监听 9527 端口。
# config.ini
..
[frontend]
type = "wechat_personal"
python3 -m huixiangdou.main --standalone # 非 docker 用户
python3 -m huixiangdou.main # docker 用户
..
======== Running on http://0.0.0.0:9527 ========
(Press CTRL+C to quit)
用 curl -X POST -H "Content-Type: application/json" -d '{"query":"你好"}' http://127.0.0.1:9527/api
可以测试效果。
调整 ding_dong.py on_message(),把消息发给 9527 端口,返回响应。 这里 是修改好的代码。
这是最终运行起来的 3 个终端:
- 上面是 HuixiangDou 服务
- 左下是
app.py
- 右下是 python-wechaty gateway
make bot
报错multiple target patterns
。可能Makefile
多删了一行空白make bot
第二次执行,报错/bot is already in use
。恢复Makefile
的修改即可。 第一次运行不存在 bot,所以要删掉那行; 第二次已经存在了。或者手工删除容器也可以。- 运行
python3 bot.py
时,报错cannot import name 'get_host' from 'urllib3'
为 urllib3 版本问题,根据 python-wechaty-issue 执行pip install "urllib3<2.0.0"
得以解决。