bhrs
Published on 2025-03-12 / 305 Visits
2

bhrs机器人框架

框架功能

基于python语言编写,主要依赖flask,实现微信消息的接收处理,以及自定义插件的编写。

python版本<3.12

程序内置WeChatFerryv39.3.5版本,并非直接使用pip安装,配套微信版本:3.9.11.25,如需替换或更新请前往WeChatFerry下载对应版本代码及dll文件,将/clients/python/wcferry及dll文件夹的所有文件拷贝到本程序的wcferry文件夹下即可

注意:如需使用WeChatFerry,必须手动更新至最新版,旧版封号概率过高,新版未测试

微信下载地址:点击下载

下载地址

点击下载

最新版已知问题

请使用ctrl+c结束程序,点叉关闭程序会导致无法再次和WeChatFerry连接

无法接收消息及注入失败使用任务管理器结束所有微信进程即可解决

建议/反馈/交流

添加微信bhrsbot2,发送进群

更新日志

20250515

适配WeChatPadPro文字和图片消息,相关配置见默认配置文件

20250430

适配khan文本消息

配置文件新增可选配置:wx_bot_notifyHookkhan_appidkhan_token用以设置khan框架相关参数

20250403

删除依赖wcferry,改为程序内置,以获取最新更新

插件注册方法新增可选参数is_admin_plugin :值为True时仅识别管理员消息(无菜单、无开关),其他值保持正常鉴权逻辑

新增管理员插件wcf_reboot(重启wcf)

20250331

配置文件新增支持多个微信管理员,以英文逗号分隔

机器人自己发的消息权限修改为管理员权限

机器人消息类BotMsg新增参数is_self: 是否是机器人自己发的消息

数据库兼容mysqlsqlite(如遇问题请及时反馈)

数据库连接由单连接修改为连接池连接

插件注册方法新增参数sign_admin: 值为True时管理员参与插件鉴权,值为None时取配置文件plugins_sign_admin的值

查询信息查询修改为管理员不参与鉴权

查询信息指令新增支持@用户

开启/关闭插件指令新增支持@用户

20250327

修复wcf好友请求功能

service.bot.BotMessageService中新增FriendRequest(好友请求消息类)和Transfer(转账消息类),可以直接调用上述两个类中的agree()方法用以接收好友请求/转账(wcf貌似不支持同意好友请求和接收转账)

service.bot.BotMessageServiceBotMsg类中新增friend_requesttransfer参数,类型分别对应上述两个类

支持插件自定义处理wcf好友请求和转账消息

20250308

修复 @所有人 会触发 ai 的问题

修复 @机器人 会将 @机器人昵称 发送至 ai 的问题

优化插件功能 prefix: 触发此功能的消息前缀,可以为空字符串,非空字符串时消息前缀与内容中间无需加空格也能匹配,为None时菜单不显示插件也不参与消息匹配,仅使 flask 蓝图生效

优化插件功能 function: 调用的方法名称,不带(),该方法仅传入一个字段BotMsg类, prefixNone时必须为None(即使传参也不会调用传入的方法),prefix不为 None 时必填

配置新增可选参数:

plugins_sign_admin = True  # 值为 True 时管理员参与插件鉴权

20250307

修改 xml 解析失败日志等级errorwarning

消息类BotMsg新增reply属性,自动初始化回复类Reply,可直接调用botmsg.reply.

去除 ai 回复的开头空白片段

20250305

优化权限判断和查询信息方法,修复查询信息与实际判断权限不一致的bug

20250303

新增使用默认配置文件的建议提示

分离插件相关方法至单独的文件service.PluginsService,需修改自定义插件引入service.UtilsServiceservice.PluginsService

数据库结构重构,拆分每个插件为单独字段

自定义方法注册新增default_status可选参数,用于适配是否默认启用插件,类型int,可选值 1: "开启", 2: "关闭"

自定义方法注册新增father可选参数用于指定插件的父级(暂时仅支持一级子级,不支持嵌套多层子级,避免管理混乱),子级信息不在首屏信息中展示,且受父级开关和本身开关一起控制,类型Plugin(注册插件方法add_plugin的返回值)

插件指令新增 默认插件名 指令,用于将插件状态设为默认

插件注册方法分离为单独模块,需将引入from service.UtilsService import修改为from service.PluginsService import

启用BotMsguser_name(用户名)和group_name(群名)字段并自动赋值

/信息 指令分离为插件,指令修改为 查询信息,后可接插件名获取指定插件及子级的插件状态,也可接wxid查询指定用户状态,空格分隔

注意,由于涉及数据库格式改变,如需使用插件默认状态功能,请先完成相关参数 default_status 的修改,否则程序首次启动进行数据库格式转换时可以导致与预期值不符

配置新增可选配置:

plugins_order = ["info", "draw", "gpt"]  # 插件启用顺序

20250109

Reply回复类 新增private方法,用于发送私聊消息

获取消息推送api 功能由内置转为自定义

配置变更

移除enable_pool

20241204

BotMsg 类型新增 prompt 属性: 用以传递去掉前缀的消息内容

BotMsg 类型新增 json属性: 用以处理

自定义功能新增支持扫描并导入plugins文件夹下的软件包下的 .py文件

add_plugin 注册自定义功能方法新增3个参数(可空)

blueprint: Blueprint 类型,注册蓝图用以处理网络请求, 如不需要此功能此项可为空

url_prefix: 网络请求前缀(例:/auth), 如不需要此功能此项可为空

msg_types: 处理的消息类型,默认为1,int或list,1文本 3图片 6文件

chatgpt-on-wechat(tools)和 内置 gpt 功能分离为自定义功能实现

功能开关和信息指令后支持指定wxid

config 新增可选变量(不需要可忽略)

bdwk_api = ""  # 百度文库api地址
bdwk_key = ""  # 百度文库api key

20240724

新增发送图片路径校验

新增wcf消息发送失败提示

注意:wcf不兼容中文路径,中文路径问题目前仅可通过修改系统编码方式解决。

20240723

BotMsg 类新增属性 is_admin 是否是管理员发送的消息

优化 xml 消息报错问题

百度文库下载由内置功能转为插件以适配通用开关控制

新增 Reply 类,实现多条回复、回复图片、回复卡片消息(whois插件已更新用法)

20240717

自行编写功能转移到根目录 plugins 文件夹下

注意:请在 plugins 文件夹下新建py文件编写自定义功能,程序会自动扫描该文件夹下的所有文件,避免更新导致编写代码被覆盖丢失

20240716

新增类 service.PluginService ,可以自行编写功能,具体查看该文件说明及whois示例

whois查询 位置更改为上述类

管理员命令:菜单 重写优化,自定义功能自动添加提示

非gpt回复不再进行自定义替换操作

数据库结构变更

表 menu 的 draw 和 gpt 字段启用,转为新的 json 类型字段 plugins 判断(自动更新)

20240715

新增whois查询

20240616

新增管理员指令 获取消息推送api

配置新增

max_submit_num = 5 # 单微信账号每天提交画图的最大次数

20240526

新增回调转发功能

回调地址由/wxbot更改位/bot/wx

service目录结构重构

修复鲲鹏utf-8字符乱码显示为?的问题

配置文件新增:

port = 26794  # 程序运行端口

bot_push_url = [  # 将机器人消息(/bot)转发至url,自动过滤本程序及已转发过的ip和端口

    "",

    "",

]

class qywx:  # 企业微信配置

    admin = ""