借 WeChatFerry 东风,我把微信机器人复活了!

前不久,微信对网页端机器人进行大规模清理,我基于 webhook开发的微信机器人-小爱(AI)也惨遭射杀。。。

这不,平替方案来了!

上篇和大家了基于 Windows 端微信的方案 - WeChatFerry(wcf)

相信看过上篇的你,对 wcf 框架已经有了基本了解。

今日分享,和大家汇报下:基于 wcf 框架,复活 小爱 的完整过程。

相比之前方案,可玩性更高,放几张效果图:

  • 交流群的广告行为零容忍!

  • 关键词自动邀请入群:

代码放 GitHub 了,感兴趣的朋友自取!

不多说,先上车,再完善。

1. 搭建框架

项目框架参考了开源项目 NGCBot,在此向 NGCBot 开发团队致谢!

代码结构如下:

├── data
│   ├── room.db                 # 群数据库
│   ├── user.db                 # 用户数据库
│   └── zaobao_template.json    # 早报模板
├── logs
│   └── app_20250110101504.log  # 日志文件
├── config.yaml                 # 项目配置文件
├── main.py                     # 启动文件
├── requirements.txt            # 项目依赖
├── servers
│   ├── api_server.py           # 接口服务
│   ├── db_server.py            # 数据库服务
│   ├── msg_server.py           # 消息服务
│   └── schedule_server.py      # 定时任务服务
└── utils
    ├── common.py               # 公共函数
    ├── llm.py                  # LLM 接口
    └── prompt.py               # 提示词配置 

其中,

  • data文件夹:用于存放数据库文件,以及项目需要用到的一些模板文件;
  • log文件夹:用于存放日志文件,便于调试;
  • servers文件夹:用于各种接口的实现;
  • utils文件夹:用于通用函数实现。

1.1 安装项目依赖

采用 conda 管理项目依赖:

git clone https://github.com/hougeai/wcf-wechatbot.git
cd wcf-wechatbot
conda create -n wcf python==3.10.11
pip install -r requirements.txt

特别留意下 wcf 版本,和微信客户端版本要对应(参见上篇):

wcferry==39.3.3.2

1.2 编写配置文件

项目中所有用到的外部参数,均采用 .yaml 文件进行配置,方便统一管理,可根据自己需求重新定义。

config.yaml 已制作好模板,复制一份即可:

cp config.yaml.example config.yaml

AI 对话、外部接口等,都需要用到 Key,因此只有填入对应字段,对应功能才能生效:

超级管理员配置

填入你的微信号,便于接收机器人的通知消息等。上一篇中有提到,用 wcf 即可获取。

Administrators:
  - 'wxid_xsh5ve62e98i12'

定时任务配置

定义要实现的任务列表,以及发送时间:

scheduleConfig:
  # 定时任务列表
  taskList:
   早报推送: 'morningPage'
   摸鱼日历: 'fishPage'
  # 早报推送时间
  morningPageTime: '10:20'
  # 摸鱼日记推送时间设置
  fishTime: '18:00'

进群关键词配置

设置不同关键词,进行自动拉群。

roomKeyWord:
  加群:  58060988515@chatroom 

API接口服务配置

用于定义各种接口对应的 Key 和 URL,需前往对应官网进行申请。

比如,要获取天气、定理位置等信息,可采用高德地图提供的接口信息,有需要的朋友可参考教程:高德 API 接入

apiServer:
  # 高德 Key
  gaoDeKey: 'xxx'

LLM 接口服务配置:

本项目用到的 LLM 主要采用 OneAPI 统一管理,可参考教程:OneAPI-接口管理和分发神器:所有大模型一键封装成OpenAI协议

llmServer:
  # OneAPI配置
  oa_api_key: 'sk-x'
  oa_base_url: 'http://xxx:4000/v1'
  model_name_list:
   - 'gemini-1.5-flash'
   - 'gemini-1.5-pro'

此外,也预留了硅基流动 API key,同样兼容 OpenAI 格式。

  # 硅基流动API配置
  sf_api_key: 'sk-x'

1.3 项目启动

准备好配置文件后,确保 PC 端微信已经成功登录。

项目根目录下 main.py 提供了程序入口,一键运行:

python main.py

看到如下日志,说明成功启动:

MainServer 实例中,主要完成如下任务:

class MainServer:
    def __init__(self):
        self.wcf = Wcf()
        self.wcf.enable_receiving_msg() # 开启全局接收
        self.initDateBase()
        self.rmh = RoomMsgHandler(self.wcf)
        self.smh = SingleMsgHandler(self.wcf)
        self.sts = ScheduleTaskServer(self.wcf)
        Thread(target=self.sts.run, name='定时推送服务').start()
  • initDateBase():初始化需要用到的数据库;
  • RoomMsgHandler:群聊消息处理;
  • SingleMsgHandler:私聊消息处理;
  • ScheduleTaskServer:定时任务处理;

processMsg 是一个无限循环任务,用于帮你:接收微信消息、处理消息、回复消息

基本逻辑是:判断消息类型,来自群聊,则交给RoomMsgHandler处理,来自私聊,则交给SingleMsgHandler处理。

# 群聊消息处理
if '@chatroom' in msg.roomid:
    Thread(target=self.rmh.mainHandle, args=(msg,)).start()
# 私聊消息处理
elif '@chatroom' not in msg.roomid and 'gh_' not in msg.sender:
    Thread(target=self.smh.mainHandle, args=(msg,)).start()

基于上述框架,再来填充相应模块,就相对简单了。

接下来,我们一个一个搞定!

2. 丰满灵魂

2.1 数据库

文件位置:servers/db_server.py

本项目的数据库实现采用 sqlite,由于比较简单,故没采用 ORM 实现。用 3 个类完成数据管理任务:

  • DbInitServer:初始化数据库和表结构;
  • DbUserServer:好友库的增删改查;
  • DbRoomServer:微信群的增删改查。

2.2 消息处理

文件位置:servers/msg_server.py

消息处理的逻辑相对复杂,需要根据不同的消息类型,进行针对处理。且私聊和群聊也要区分开。

因此,先准备一个消息处理的通用类 MsgHandler,实现私聊和群聊都需要的功能。

然后,分别针对私聊和群聊,实现两个类:

  • SingleMsgHandler
  • RoomMsgHandler

对于私聊mainHandle实现的功能如下:

  • 超级管理员功能
  • 处理加好友请求(当前需微信手机端打开自动通过好友)
  • 处理进群请求
  • 判断是否有私聊权限
  • 处理消息,目前已支持:
    • 文本消息
    • 图片消息
    • 引用消息
    • 公众号/视频号消息

对于群聊mainHandle实现的功能如下:

  • 判断是否为白名单群聊
  • 管理员功能
  • 新人入群欢迎
  • 处理消息,和私聊一样

2.3 定时任务

文件位置:servers/schedule_server.py

定时任务采用schedule库实现,封装为ScheduleTaskServer类,每新增一个定时任务,只需添加一个对应函数即可。

比如,要实现早报功能,只需:

def pushMorningPage(self):
    page = self.ams.getMoringPage()
    if not page:
        logger.error('获取早安页面失败')
        return
    room_items = self.drs.showPushRoom(taskName='morningPage')
    logger.info(f'准备推送给群: {room_items}')
    for room_id, room_name in room_items:
        self.wcf.send_image(path=page, receiver=room_id) # 传本地文件
        logger.info(f'早安页面推送给{room_name}成功')

然后,在 run()中添加一行:

def run(self):
    configData = returnConfigData()['scheduleConfig']
    schedule.every().day.at(configData['morningPageTime']).do(self.pushMorningPage)

2.4 更多功能

更多实现细节,可参考项目源码:

https://github.com/hougeai/wcf-wechatbot

相信看到这里的您,一定还有更多想法待实现,去试试吧~

写在最后

本文基于 wcf 框架,复活了微信机器人-小爱,把完整实现过程捋了一遍。

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


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

### WeChatFerry 开发教程与文档 #### 关于 WeChatFerry 平台概述 WeChatFerry 是一个专为微信设计的技术平台,提供了一系列丰富的 API 接口来允许编程方式操作微信功能,包括但不限于发送文本、创建自动化脚本等[^1]。 #### 支持的语言环境 此项目获得了 Python、HTTP 和 NodeJS 等多种主流编程语言的支持,这意味着开发者可以根据个人偏好和技术栈选择最合适的开发方式进行集成和扩展。 #### Python 客户端特性介绍 对于采用 Python 进行开发的朋友来说,WeChatFerry 提供了一个专门面向该语言的客户端库。这个库不仅实现了基本的消息收发能力,还包括了更高级别的功能模块,比如消息处理机制、联系人管理系统以及数据库交互接口等等[^2]。 #### 实际应用案例分享 在实际应用场景中,利用 WeChatFerry 可以为企业级用户提供高效的办公自动化解决方案。例如,可以通过编写简单的 Python 脚本来自动回复客户咨询、定期推送重要通知给团队成员或是定时执行某些特定任务以提高工作效率[^4]。 #### 快速入门指南 为了帮助初学者快速上手 WeChatFerry 的开发工作,官方提供了详细的安装说明及基础示例代码: - **准备工作** - 需要先注册并登录微信公众账号获取必要的权限凭证; - 下载对应版本的 SDK 文件至本地计算机; - **初始化连接实例** ```python from wechat_ferry import FerryClient client = FerryClient() await client.start() # 启动服务 ``` - **监听新消息事件** ```python @client.on('message') async def on_message(msg): print(f'Received message: {msg}') ``` - **发送消息** ```python await client.send_text(chat_id='target_chat_id', content='Hello, world!') ``` 以上就是针对 WeChatFerry 开发的一些基础知识讲解,希望这些信息能对你有所帮助!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值