一款微信AI机器人开发框架!稳定可靠,小白友好

前段时间和大家陆续分享了几种微信AI机器人的实现:

其中,

  • NGCBot 基于 WeChatFerry(wcf) 框架,用 Windows PC 端微信;
  • chatgpt-on-wechat 基于 itchat 框架,用网页端微信,不到一天就惨遭封号;
  • 智能微秘书wechatbot-webhook 都是 wechaty js 库实现。不过智能微秘书很多功能需付费,因此基于 wechatbot-webhook 写了接收消息的接口,定制化打造了微信机器人-小爱(AI)

然而,前不久,微信对网页端机器人进行大规模清理,小爱也未能幸免。。。


网页端微信已被证明不安全了,急需寻找平替方案!

看到隔壁群里,基于 (wcf) 的机器人都还健在,于是打算用wcf小爱复活,代码将全部开源。

今日分享,带大家熟悉wcf框架,并从零打造小爱同款微信机器人。

1. wcf简介

项目地址:https://github.com/lich0821/WeChatFerry

大白话原理wcf是一个“劫持”了PC端微信的工具,当微信收到消息时,在显示到页面前,先把消息拿来,通过自定义接口处理,当需要发送消息时,组装消息体,调用微信发消息的模块,发出去!

wechatbot-webhook 拦截的是网页端微信,而 wcf 拦截的是PC端微信,原理类似。

所以你只需做两件事:

1. 熟悉wcf框架;

2. 实现自定义接口,完成消息处理。

本篇,先带大家熟悉wcf框架中的一些基本概念,为下一步实现自定义接口铺平道路。

不过,正式开发之前,还需做好如下准备工作。

不多说,先上车!

2. 准备工作

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,其对应的微信客户端版本为:

双击完成安装后,记得前往设置,关闭自动更新,否则后台会自动更新为新版本!

2.3 准备开发环境

本教程将基于 wcfPython sdk 完成开发,当然 wcf 也支持 NodeJS 等其他开发语言。

为此,我们还需准备好 Python 开发环境,有需要的朋友可查看之前的教程:

环境准备之Conda和VS code安装

3. 熟悉 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,如果是私聊,则roomidsender保持一致。
  • content:消息内容,非文本内容统一为 xml 格式。
  • thumbextra:接收到视频或图片消息,微信保存在本地的.dat格式数据,需解密后查看。

写在最后

本文分享了一款稳定可靠的微信机器人开发框架:wcf,了解其基本原理并快速上手,下篇将带大家实操,从零打造小爱同款微信机器人。

如果对你有帮助,欢迎点赞收藏备用。


为方便大家交流,新建了一个 AI 交流群小爱也活跃在群里,欢迎体验。公众号后台「联系我」,拉你进群。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值