BotRS - Rust QQ Guild Bot Framework
Author: YinMo19
BotRS 是一个用 Rust 实现的 QQ 频道机器人框架,基于 QQ 频道机器人 API。它提供了类型安全、高性能、易于使用的接口来开发 QQ 频道机器人。
📚 文档
本地运行文档
# 安装依赖
# 启动开发服务器
# 构建文档
✨ v0.2.0 重大更新:全新消息参数 API
我们完全重构了消息发送 API,告别了多个 None 参数的混乱,引入了结构化参数系统,带来更清洁的开发体验!
🚀 问题解决
旧版 API(已弃用):
// 😱 太多令人困惑的 None 参数!
api.post_message.await?;
新版 API(推荐):
use MessageParams;
let params = new_text;
api.post_message_with_params.await?;
🎯 新 API 方法(推荐)
post_message_with_params- 发送频道消息(使用 [MessageParams])post_group_message_with_params- 发送群消息(使用 [GroupMessageParams])post_c2c_message_with_params- 发送私聊消息(使用 [C2CMessageParams])post_dms_with_params- 发送私信(使用 [DirectMessageParams])
⚠️ 旧版 API 方法(已弃用)
post_message→ 请使用post_message_with_paramspost_group_message→ 请使用post_group_message_with_paramspost_c2c_message→ 请使用post_c2c_message_with_paramspost_dms→ 请使用post_dms_with_params
🌟 主要优势
- ✨ 更清洁的代码:使用
..Default::default()替代多个None参数 - 📖 更好的可读性:命名字段而非位置参数
- 🛡️ 类型安全:结构化参数防止参数顺序错误
- 🔧 构建器模式:便捷的
.with_reply()和.with_file_image()方法 - 🚀 易于扩展:添加新字段而不破坏现有代码
- 🔄 向后兼容:基于官方 Python botpy API 结构
特性
- ✨ 类型安全 - 完全类型化的 API,编译时捕获错误
- 🚀 高性能 - 基于 Tokio 的异步运行时,支持高并发
- 🔧 易于使用 - 简单直观的 API 设计,快速上手
- 🛡️ 内存安全 - Rust 的所有权系统保证内存安全
- 🔄 事件驱动 - 基于事件的架构,响应各种 QQ 频道事件
- 📝 丰富的文档 - 完整的 API 文档和示例代码
- ⚡ WebSocket 支持 - 实时接收和处理事件
- 🎯 Intent 系统 - 精确控制接收的事件类型
- 🏗️ 结构化 API - 新的参数结构系统,告别多
None参数
快速开始
安装
将以下内容添加到你的 Cargo.toml:
[]
= "0.10.0"
= { = "1.0", = ["full"] }
= "0.1"
= "0.3"
= "0.1"
基础示例
use ;
use Ready;
use MessageParams;
use info;
;
async
📋 新消息 API 迁移指南
📖 文档说明:本 README 被包含在
lib.rs中作为项目文档,所有代码示例都会参与文档测试。
- 完整的可运行示例使用
no_run标记(会进行编译检查,但不执行)- 代码片段使用
ignore标记(跳过编译检查,便于阅读)- 在实际使用时,请参考 examples/ 目录中的完整示例
简单文本消息
use MessageParams;
// ✨ 新 API - 简洁明了
let params = new_text;
api.post_message_with_params.await?;
带嵌入内容的消息
use ;
let embed = Embed ;
let params = MessageParams ;
api.post_message_with_params.await?;
回复消息并附带文件
use MessageParams;
let file_data = read?;
let params = new_text
.with_file_image
.with_reply;
api.post_message_with_params.await?;
群消息发送
use GroupMessageParams;
let params = new_text
.with_reply;
api.post_group_message_with_params.await?;
私聊消息发送
use C2CMessageParams;
let params = new_text;
api.post_c2c_message_with_params.await?;
私信发送
use DirectMessageParams;
let params = new_text
.with_reply;
api.post_dms_with_params.await?;
更详细和更具体的内容可以在 https://docs.rs/botrs 阅读,另有 https://deepwiki.com/YinMo19/botrs 作为 AI 文档可以参照阅读代码结构。
环境变量配置
你可以使用环境变量来配置机器人凭据:
然后在代码中使用:
use Token;
let token = from_env?;
事件处理
BotRS 支持多种事件类型:
消息事件
use ;
use ;
use info;
;
use ;
use DirectMessageParams;
use info;
;
use ;
use GroupMessageParams;
use info;
;
use ;
use C2CMessageParams;
use info;
;
频道事件
use ;
use info;
;
成员事件
use ;
use info;
;
Intent 系统
Intent 系统允许你精确控制机器人接收的事件类型:
use Intents;
// 默认 intents(基础事件)
let intents = default;
// 自定义 intents
let intents = none
.with_guilds // 频道事件
.with_guild_members // 成员事件
.with_guild_messages // 频道消息
.with_direct_message // 私信
.with_public_messages; // 群消息和单聊消息
// 所有可用的 intents
let intents = all;
// 检查特权 intent
if intents.has_privileged
特权 Intent
某些 Intent 需要特殊权限,可通过 has_privileged() 方法检查:
use Intents;
let intents = none
.with_guild_members // 特权 intent
.with_guild_messages; // 特权 intent
if intents.has_privileged
API 客户端
BotRS 提供了完整的 API 客户端来与 QQ 频道 API 交互:
use ;
use HttpClient;
use MessageParams;
async
错误处理
BotRS 提供了统一的错误处理:
use ;
use ;
async
配置选项
HTTP 客户端配置
use HttpClient;
// 自定义超时和环境
let http = new?; // 60秒超时,沙盒环境
客户端配置
use ;
use HttpClient;
// 标准创建方式
let client = new?;
// HTTP 客户端可以通过 HttpClient 进行配置
let http = new?; // 60秒超时,沙盒环境
let api = new;
运行示例
项目包含多个完整的示例机器人,展示新 API 的使用:
# 设置环境变量
# 运行基础示例
# 运行新 API 演示
# 运行嵌入消息演示
# 运行文件上传演示
# 运行键盘消息演示
# 运行 Markdown 消息演示
# 运行群消息演示
# 运行 C2C 消息演示
# 运行私信演示
或者传递参数:
开发状态
✅ 已完成功能
- ✅ 基础 HTTP 客户端和 API 封装
- ✅ WebSocket 网关连接和事件处理
- ✅ 完整的 Intent 系统实现
- ✅ 类型安全的错误处理
- ✅ 完整的消息模型 (Message, DirectMessage, GroupMessage, C2CMessage, MessageAudit)
- ✅ 频道、成员、用户、机器人数据模型
- ✅ Token 认证和验证系统
- ✅ 基于 Tokio 的异步支持
- ✅ 与 Python botpy 完全兼容的接口设计
- ✅ 完整的单元测试和文档测试覆盖
- ✅ 详细的 API 文档和使用示例
- ✅ 新的结构化消息参数 API(v0.2.0)
- ✅ 完整的消息发送 API 实现
- ✅ 多种消息类型支持(文本、嵌入、Markdown、键盘、文件)
🔄 计划功能
- 🔄 WebSocket 分片支持
- 🔄 中间件和插件系统
- 🔄 内置命令框架
- 🔄 更多实用示例和教程
- 🔄 性能优化和内存使用优化
- 🔄 更多 QQ 频道 API 功能支持
⚠️ 已知问题
目前代码是从 Python 版本重写来的,测试相对较少。作者自己的 bot 并没有申请很多权限,因此关于 Ark、企业级功能等都没有进行充分测试。不过基础的回复、群聊消息等 API 已经经过测试。
从目前的情况来看,Python 版本中也用到了一些不太准确的地方,可能改动了 API。但是 Python 本身的校验机制是很松的,不像这里使用的 serde 库,在 parse 的时候一个字段对不上直接失败。因此如果有一些消息返回失败,或者哪里很明显的 parse 失败了,请在 issue 中告诉我们。如果你能解决,非常欢迎 PR。
与 Python botpy 的对比
BotRS 的设计灵感来自 Python 的 botpy 库,但提供了以下优势:
| 特性 | Python botpy | BotRS |
|---|---|---|
| 类型安全 | ❌ | ✅ |
| 性能 | 中等 | 高 |
| 内存安全 | ❌ | ✅ |
| 并发模型 | asyncio | Tokio |
| 包大小 | 较大 | 较小 |
| 部署 | 需要Python环境 | 单一可执行文件 |
| API 设计 | 多 None 参数 | 结构化参数 |
| 代码可读性 | 一般 | 优秀 |
版本历史
v0.10.0 (最新)
- 🎧 对齐 botgo 的音频 DTO:
PostAudio/post_audio使用AudioControl,AudioStatus按数字 JSON 编码 - 📣 对齐 botgo 的公告 DTO:公告和推荐子频道字段改为零值结构
- 🔐 对齐 botgo 的 API 权限 DTO,并精简示例中的兼容分支
- 🔁 文档明确网关使用 botgo 风格固定重连节流,不再描述 40s 指数 backoff
v0.9.0
- 🧩 对齐 botgo 的
MessageReaction/WSMessageReactionData纯 DTO 形状 - 🧵 对齐 botgo 的论坛
ThreadInfo,title/content保持原始字符串 - 🛠️ 升级 GitHub Actions 主版本,移除 Node 20 action deprecation 风险
v0.8.0
- 🔁 对齐 botgo 的
DirectMessage会话 DTO 和私信事件Messagepayload - 🧭 修正私信事件处理示例,统一使用
DirectMessageParams与post_dms_with_params - 🧩 补齐 message、guild、interaction 等 DTO/wire format 对齐
v0.7.0
- 🔧 对齐 botgo 的 HTTP callback session、OpenAPI app ID 状态和请求头行为
- 🔁 修复不可 resume 重连后复用过期 session ID/seq 的问题
- 🧩 兼容 botgo 单条消息接口的旧包装响应格式
- 📌 补齐 botgo v1 OpenAPI 具体实现常量
v0.6.0
- 🔌 补齐 botgo OpenAPI facade、消息辅助接口、分页辅助接口和事件 payload DTO
- 🤝 增加 botgo 风格导出名称,便于从官方框架迁移
v0.2.0
- 🚀 重大更新:引入结构化消息参数 API
- ✨ 新增
MessageParams、GroupMessageParams、C2CMessageParams、DirectMessageParams - 🔧 新增
post_*_with_params系列方法 - 📚 完善示例和文档
- ⚠️ 弃用旧的多参数 API(仍可使用,但推荐迁移)
v0.1.3
- 🛠️ 基础功能实现
- 🔄 多参数消息发送 API
- 📖 基础文档和示例
许可证
本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。
贡献
欢迎贡献代码!我的个人 git commit 提交风格是:
[type] simple message
- detail message 1: detailed description.
- detail message 2: detailed description.
- detail message 3: detailed description.
- detail message 4: detailed description.
- etc.
例如:
[feature] add structured message parameters API
- models/message.rs: add MessageParams, GroupMessageParams, C2CMessageParams, DirectMessageParams structs.
- api.rs: add post_*_with_params methods for structured parameter sending.
- examples/: add demo_new_message_api.rs showing the new API usage.
- deprecate old multi-parameter API methods but keep backward compatibility.
支持
- 📖 API 文档
- 🤖 AI 文档
- 🐛 问题反馈
- 💬 讨论区
- 📧 联系我们:me@yinmo19.top
架构特点
与 Python botpy 的完全兼容
BotRS 在设计时严格参照 Python botpy 的接口设计,确保:
- 相同的消息模型结构
- 一致的事件处理接口
- 兼容的数据类型定义
- 相同的 Intent 系统
- 更优雅的参数传递方式
类型安全保证
- 编译时类型检查
- Rust 所有权系统保证内存安全
- 详细的错误类型定义
- 可靠的异步处理
- 结构化参数防止运行时错误