37859bcfcb44d7d89e2558b5911b228a69f640c6
NEO Bot Framework
这是一个基于 Python 的轻量级 OneBot 11 协议机器人框架,专为内部团队开发设计。它通过 WebSocket 连接到 OneBot 实现端(如 NapCatQQ),提供了事件分发、指令管理和 API 调用封装。
✨ 特性
- OneBot 11 标准支持:完整支持 OneBot 11 的消息、通知、请求和元事件。
- 类型安全:基于
dataclasses的强类型事件模型,开发体验更佳。 - 插件系统:轻量级的装饰器风格插件系统,支持指令 (
@matcher.command) 和事件监听 (@matcher.on_notice,@matcher.on_request)。 - 🔥 热重载支持:内置文件监控,修改
base_plugins下的代码自动重载,无需重启,极大提升调试效率。 - 异步核心:基于
asyncio和websockets的高性能异步核心。 - 自动重连:内置 WebSocket 断线重连机制。
📝 待办事项 (TODO)
API 封装
- 消息相关
delete_msg: 撤回消息get_msg: 获取消息get_forward_msg: 获取合并转发消息send_like: 发送点赞
- 群组管理
set_group_kick: 群组踢人set_group_ban: 群组单人禁言set_group_anonymous_ban: 群组匿名禁言set_group_whole_ban: 群组全员禁言set_group_admin: 群组设置管理员set_group_anonymous: 群组匿名set_group_card: 设置群名片(群备注)set_group_name: 设置群名set_group_leave: 退出群组set_group_special_title: 设置群组专属头衔
- 群组信息
get_group_info: 获取群信息get_group_list: 获取群列表get_group_member_info: 获取群成员信息get_group_member_list: 获取群成员列表get_group_honor_info: 获取群荣誉信息
- 用户相关
get_login_info: 获取登录号信息get_stranger_info: 获取陌生人信息get_friend_list: 获取好友列表
- 请求处理
set_friend_add_request: 处理加好友请求set_group_add_request: 处理加群请求/邀请
- 系统/其他
get_version_info: 获取版本信息get_status: 获取状态can_send_image: 检查是否可以发送图片can_send_record: 检查是否可以发送语音clean_cache: 清理缓存
其他改进
- 日志系统优化: 引入更完善的日志记录机制,支持文件输出和日志级别控制。
- 异常处理增强: 增强插件执行过程中的异常捕获,防止单个插件崩溃影响整个 Bot。
- 中间件支持: 添加消息处理中间件,支持在指令执行前/后进行拦截和处理。
- 权限系统: 实现基础的权限管理(如超级管理员、群管理员等)。
📂 项目结构
NEO/
├── base_plugins/ # 基础插件目录,新建插件文件即可自动加载(支持热重载)
│ └── echo.py # 示例插件:实现 /echo 指令
├── core/ # 核心框架代码
│ ├── bot.py # Bot API 封装,提供 send_group_msg 等方法
│ ├── command_manager.py # 命令与事件分发器
│ ├── config_loader.py # 配置加载器
│ └── ws.py # WebSocket 客户端核心
├── models/ # 数据模型
│ ├── events/ # OneBot 事件定义 (Message, Notice, Request, Meta)
│ ├── message.py # 消息段定义 (MessageSegment)
│ └── sender.py # 发送者定义 (Sender)
├── config.toml # 配置文件
├── main.py # 启动入口(包含热重载监控)
└── requirements.txt # 项目依赖
🚀 快速开始
1. 环境准备
- Python 3.8+
- OneBot 11 实现端(推荐 NapCatQQ 或 LLOneBot)
2. 安装依赖
pip install -r requirements.txt
3. 配置文件
修改根目录下的 config.toml,配置 WebSocket 连接信息:
[napcat_ws]
uri = "ws://127.0.0.1:30004" # OneBot 实现端的 WebSocket 地址
token = "your_token" # Access Token (如果有)
reconnect_interval = 5 # 断线重连间隔(秒)
[bot]
command = ["/"] # 指令前缀,支持多个,如 ["/", "#"]
4. 运行
python main.py
🛠️ 开发指南
🔥 热重载调试
项目集成了 watchdog 文件监控。在开发过程中,你只需要:
- 保持
main.py运行。 - 修改或新建
base_plugins目录下的.py插件文件。 - 保存文件。
- 控制台会自动提示
[HotReload] 插件重载完成,新的逻辑立即生效。
创建新插件
在 base_plugins 目录下创建一个新的 .py 文件(例如 my_plugin.py),框架会自动加载它。
示例代码
1. 注册消息指令
使用 @matcher.command("指令名") 注册指令。
from core.command_manager import matcher
from core.bot import Bot
from models import MessageEvent
# 注册 /hello 指令
@matcher.command("hello")
async def handle_hello(bot: Bot, event: MessageEvent, args: list[str]):
# args 是去除指令后的参数列表
await event.reply("你好!这里是 NEO Bot。")
2. 监听通知事件
使用 @matcher.on_notice("通知类型") 监听通知。
from core.command_manager import matcher
from core.bot import Bot
from models import GroupIncreaseNoticeEvent
# 监听群成员增加事件
@matcher.on_notice("group_increase")
async def welcome_new_member(bot: Bot, event: GroupIncreaseNoticeEvent):
await bot.send_group_msg(event.group_id, f"欢迎新成员 {event.user_id} 加入!")
3. 监听请求事件
使用 @matcher.on_request("请求类型") 监听请求。
from core.command_manager import matcher
from core.bot import Bot
from models import FriendRequestEvent
# 自动同意好友请求
@matcher.on_request("friend")
async def auto_approve_friend(bot: Bot, event: FriendRequestEvent):
await bot.call_api("set_friend_add_request", {
"flag": event.flag,
"approve": True
})
4. 通用 API 调用 (call_api)
如果框架尚未封装某个 OneBot API,你可以使用 bot.call_api 直接调用。这是通用的备用调用方法。
from core.command_manager import matcher
from core.bot import Bot
from models import MessageEvent
@matcher.command("info")
async def get_group_info(bot: Bot, event: MessageEvent, args: list[str]):
# 直接调用 get_group_info API
# action: API 名称
# params: API 参数字典
resp = await bot.call_api("get_group_info", {
"group_id": event.group_id,
"no_cache": False
})
if resp.get("status") == "ok":
group_name = resp["data"]["group_name"]
await event.reply(f"当前群名:{group_name}")
📚 事件模型说明
项目采用了基于工厂模式的事件处理系统,所有事件定义在 models/events/ 下:
- MessageEvent: 消息事件,包含
PrivateMessageEvent和GroupMessageEvent。支持await event.reply()快速回复。 - NoticeEvent: 通知事件,如
FriendAddNoticeEvent,GroupRecallNoticeEvent等。 - RequestEvent: 请求事件,如
FriendRequestEvent,GroupRequestEvent。 - MetaEvent: 元事件,如心跳
HeartbeatEvent。
所有事件均继承自 OneBotEvent,并包含 bot 属性用于调用 API。
Internal Use Only - DOGSOHA ond baby2016
Description
Languages
Python
86.8%
HTML
13.2%