猴哥的第 146 期分享,欢迎追看
前段时间和大家陆续分享了几种微信AI机器人的实现:
chatgpt-on-wechat: 手把手搭建微信机器人,雇一个24小时在线的 AI 助理;NGCBot: 打造基于Hook机制的微信机器人,Windows本地部署;智能微秘书;wechatbot-webhook: 搭建微信机器人的第4种方式,免费开源,轻量高效
其中,
NGCBot基于WeChatFerry(wcf)框架,用 Windows PC 端微信;chatgpt-on-wechat基于itchat框架,用网页端微信,不到一天就惨遭封号;智能微秘书和wechatbot-webhook都是wechatyjs 库实现。不过智能微秘书很多功能需付费,因此基于wechatbot-webhook写了接收消息的接口, 定制化打造了微信机器人-小爱(AI)。
然而,前不久,微信对网页端机器人进行大规模清理,小爱也未能幸免。。。
网页端微信已被证明不安全了,急需寻找平替方案!
看到隔壁群里,基于 (wcf) 的机器人都还健在,于是打算用wcf把小爱复活,代码将全部开源。
今日分享,带大家熟悉wcf框架,并从零打造小爱同款微信机器人。
- wcf 简介
大白话原理 :wcf是一个“劫持”了PC端微信的工具,当微信收到消息时,在显示到页面前,先把消息拿来,通过自定义接口处理,当需要发送消息时,组装消息体,调用微信发消息的模块,发出去!
wechatbot-webhook 拦截的是网页端微信,而 wcf 拦截的是PC端微信,原理类似。
所以你只需做两件事:
-
熟悉
wcf框架; -
实现自定义接口,完成消息处理。
本篇,先带大家熟悉wcf框架中的一些基本概念,为下一步实现自定义接口铺平道路。
不过,正式开发之前,还需做好如下准备工作。
不多说,先上车!
- 准备工作
wcf基于 Windows 端微信进行实现,因此请准备好:一台 Windows 电脑或者服务器。
2.1 Windows PC
如果只是想体验一下,随便玩玩,笔记本和台式机就行,只要装上 Windows 就成!
也许你会关心:
Q: 对配置有什么要求?
A:亲测 2c4g 就能跑,4c8g 完全没问题。
Q:PC 需要装什么系统?
A:用的 win11,其他系统没测过。win10 官方不再维护,建议直接装 win11,安装也非常简单,不了解的小伙伴看教程:简单3步,搞定 Windows11 系统安装
2.2 Windows Server
如果要用于生产环境,需要长期稳定运行,最好准备一台 Windows 服务器。
有哪些方式?
相比 Linux,Windows 系统对内存要求更高,至少确保 2c4g 哦。
方式一:云厂商购买 :以某云为例(仅供参考,不构成推荐)
阿里云
腾讯云
选择上述对应配置后,注意系统镜像选择 Windows Server.
方式二:搭建虚拟机 :
当然,如果你已经有一台高性能 Linux 服务器,也无需额外再买 Windows 服务器,可以选择在 Linux 上构建一台 Windows 虚拟机,篇幅有限,有机会单独出一篇教程。
2.2 安装微信
wcf 不同版本,基于微信版本进行开发,因此需要指定版本的微信。
为减少新手入门受版本困扰,本教程将统一采用:当前最新的 wcferry 39.3.3.2,其对应的微信客户端版本为:
- WeChatSetup-3.9.11.25.exe (下载链接文末自取)
双击完成安装后,记得前往设置,关闭自动更新,否则后台会自动更新为新版本!
2.3 准备开发环境
本教程将基于 wcf 的 Python sdk 完成开发,当然 wcf 也支持 NodeJS 等其他开发语言。
为此,我们还需准备好 Python 开发环境,有需要的朋友可查看之前的教程:环境准备之Conda和VS code安装
- 熟悉 wcf
项目文档:https://wechatferry.readthedocs.io/zh/latest/autoapi/wcferry/index.html
wcf 对操作微信进行了非常棒的封装,为此只需了解两个类 即可上手开发。
注:运行下述示例前,确保 PC 端微信已经成功登录。
3.1 Wcf 类
Wcf 类,实现操作微信的各种功能,比如:
- 查询登录状态
- 获取登录账号信息
- 获取消息类型
- 获取联系人
- 查询数据库所有表
- 获取消息
- 发送消息(可 @)
- 转发消息
- 拍一拍群友
下面我们略举几例:
获取登录账号信息:
from wcferry import Wcf
wcf = Wcf()
wcf.get\_user\_info()
输出如下:
微信名:小爱
微信ID:wxid\_xsh5ve62e98i12
手机号:138xxx
存储地址:C:\Users\vboxuser\Documents\WeChatFiles\
获取消息类型:
wcf.get\_msg\_types()
# 输出如下
{0: '朋友圈消息', 1: '文字', 3: '图片', 34: '语音', 37: '好友确认', 40: 'POSSIBLEFRIEND\_MSG', 42: '名片', 43: '视频', 47: '石头剪刀布 | 表情图片', 48: '位置', 49: '共享实时位置、文件、转账、链接', 50: 'VOIPMSG', 51: '微信初始化', 52: 'VOIPNOTIFY', 53: 'VOIPINVITE', 62: '小视频', 66: '微信红包', 9999: 'SYSNOTICE', 10000: '红包、系统消息', 10002: '撤回消息', 1048625: '搜狗表情', 16777265: '链接', 436207665: '微信红包', 536936497: '红包封面', 754974769: '视频号视频', 771751985: '视频号名片', 822083633: '引用消息', 922746929: '拍一拍', 973078577: '视频号直播', 974127153: '商品链接', 975175729: '视频号直播', 1040187441: '音乐链接', 1090519089: '文件'}
获取所有联系人列表 :
wcf.get\_contacts()
输出如下:
{'wxid': 'fmessage', 'code': '', 'remark': '', 'name': '朋友推荐消息', 'country': '', 'province': '', 'city': '', 'gender': ''}
{'wxid': 'medianote', 'code': '', 'remark': '', 'name': '语音记事本', 'country': '', 'province': '', 'city': '', 'gender': ''}
{'wxid': 'floatbottle', 'code': '', 'remark': '', 'name': '漂流瓶', 'country': '', 'province': '', 'city': '', 'gender': ''}
{'wxid': 'gh\_3dfda90e39d6', 'code': 'wxzhifu', 'remark': '', 'name': '微信支付', 'country': 'CN', 'province': 'Guangdong', 'city': '', 'gender': ''}
{'wxid': 'gh\_09bce433cd27', 'code': '', 'remark': '', 'name': '猴哥的AI知识库', 'country': 'CN', 'province': '', 'city': '', 'gender': ''}
{'wxid': '53532625158@chatroom', 'code': '', 'remark': '', 'name': '小爱测试群', 'country': '', 'province': '', 'city': '', 'gender': ''}
{'wxid': 'weixin', 'code': '', 'remark': '', 'name': '微信团队', 'country': '', 'province': '', 'city': '', 'gender': ''}
该接口会拉取微信本地数据库中所有联系人,其中群聊的wxid有@chatroom,据此可以获取所有群聊列表。
而要获取所有好友列表 ,可以直接调用:
wcf.get\_friends()
具体实现为:把非好友过滤掉:
not\_friends = {
"fmessage": "朋友推荐消息",
"medianote": "语音记事本",
"floatbottle": "漂流瓶",
"filehelper": "文件传输助手",
"newsapp": "新闻",
}
更多接口功能,我们在开发过程,用到了再聊!
3.2 WxMsg 类
WxMsg 类,实现对各种微信消息的封装,其属性如下:
type (int): 消息类型,可通过 `get\_msg\_types` 获取
id (str): 消息 id
xml (str): 消息 xml 部分
sender (str): 消息发送人
roomid (str): (仅群消息有)群 id
content (str): 消息内容
thumb (str): 视频或图片消息的缩略图路径
extra (str): 视频或图片消息的路径
具体实现过程中,可能需要关注:
type (int):根据不同消息类型,触发不同的处理逻辑,比如文本、图像、语音等;roomid:群聊的wxid,如果是私聊,则roomid和sender保持一致。content:消息内容,非文本内容统一为 xml 格式。thumb和extra:接收到视频或图片消息,微信保存在本地的.dat格式数据,需解密后查看。
写在最后
本文分享了一款稳定可靠的微信机器人开发框架:wcf,了解其基本原理并快速上手,下篇将带大家实操,从零打造小爱同款微信机器人。
如果对你有帮助,欢迎点赞收藏 备用。
需要文中微信客户端安装包的朋友,后台发【wx】自取。
为方便大家交流,新建了一个 AI 交流群,小爱也在群里,欢迎体验。公众号后台「联系我」,拉你进群。
👇 关注猴哥,快速入门AI工具
# AI 工具:
盘点9家免费且靠谱的AI大模型 API,统一封装,任性调用!
AI全栈利器开源!带你用Ollama+Qwen2.5-Code跑bolt.new,一键生成网站
# AI应用** :**
弃坑 Coze,我把 Dify 接入了个人微信,AI小助理太强了
搭建微信AI助理的第4种方式,我造了一个摸鱼小助手,免费开源,轻量高效
