Expand description
§Nonebot-rs
Nonebot-rs 简称 nbrs,Onebot 协议机器人框架 Rust 实现。
本框架的基本目标是实现一个可扩展的 Rust Onebot 机器人框架。
§nbrs 设计
nbrs 本体负责与 Onebot 实现端建立连接、将 Onebot 通信转化抽象为 Event 与 Bot (可以调用 Onebot Api 的 struct),并向各 Plugin 分发、读取配置文件。
matcher 是 nbrs 内建的一个 Plugin,思路基于 Nonebot2 的插件式 Matcher,接收 nbrs 推送事件后逐级匹配处理事件。尽可能提供与 Nonebot2 接近的开发体验。
scheduler 为内建定时任务插件。
§Nonebotrs.toml
当第一次运行 nbrs 时将会自动创建 Nonebotrs.toml 配置文件。
[global] # 全局设置
debug = true # 开启 debug log
superusers = ["YourID"] # 全局管理员账号
nicknames = ["nickname"] # 全局 Bot 昵称
command_starts = ["/"] # 全局命令起始符
[ws_server] # 反向 WS 服务器
host = "127.0.0.1" # 监听 host
port = 8088 # 监听 port
access_token = "AccessToken" # 连接鉴权使用
[bots.BotID] # Bot 设置
superusers = ["YourID"] # 管理员账户
nicknames = ["nickname"] # Bot 昵称
command_starts = ["/"] # 命令起始符
ws_server = "server address" # 正向 WS 服务器地址(缺省不启用正向 WS 连接)
access_token = "AccessToken" # 连接鉴权使用§Plugin
To-do
暂时可以参考 Mathcers (咕咕咕)
§Matcher
需要启用 feature matcher
最小运行实例:
fn main() {
let mut nb = nonebot_rs::Nonebot::new(); // 新建 Nonebot
let mut matchers = nonebot_rs::Matchers::new_empty(); // 新建空 Matchers Plugin
matchers
.add_message_matcher(nonebot_rs::builtin::echo::echo()) // 注册 echo Matcher
.add_message_matcher(nonebot_rs::builtin::rcnb::rcnb()); // 注册 rcnb Matcher
nb.add_plugin(scheduler); // 添加 Plugin
nb.run() // 运行 Nonebot
}Matcher 开发:
use nonebot_rs::matcher::prelude::*;
use rcnb_rs::encode;
#[derive(Clone)] // handler struct 需要生成 Clone trait
pub struct Rcnb {} // 定义 handler struct,可以在该结构体容纳静态数据
#[async_trait]
impl Handler<MessageEvent> for Rcnb {
on_command!(MessageEvent, "rcnb", "RCNB", "Rcnb"); // 注册该 Matcher 的命令匹配器
async fn handle(&self, event: MessageEvent, matcher: Matcher<MessageEvent>) {
// 请求获取 msg,event raw_message 为空则发送消息请求消息
let msg = matcher
.request_message(Some(&event), Some("Please enter something."))
.await;
// 再次获取消息依然为空将返回 None
if let Some(msg) = msg {
// 发送处理后的消息
matcher.send_text(&encode(&msg)).await;
}
}
}
// Matcher 的构建函数
pub fn rcnb() -> Matcher<MessageEvent> {
Matcher::new("Rcnb", Rcnb {}) // 声明 Matcher 的 name 与 handler struct
.add_pre_matcher(builtin::prematchers::to_me()) // 添加 to_me prematcher
.add_pre_matcher(builtin::prematchers::command_start()) // 添加 command_start permatcher
}使用 Onebot Api:
let msg:Option<nonebot_rs::api_resp::Message> = matcher.get_msg().await没有启用 matcher ?
let msg:Option<nonebot_rs::api_resp::Message> = bot.get_msg().await就是这么简单~
§定时任务
需要启用 feature scheduler
定义一个定时任务
use nonebot_rs::{Job, Message};
pub fn clock(nb: &nonebot_rs::Nonebot) -> Job {
let bot_getter = nb.bot_getter.clone();
Job::new("1 * * * * *", move |_, _| {
let bots = bot_getter.borrow().clone();
for (_, bot) in bots {
let bot = bot.clone();
tokio::spawn(send_a_msg(bot));
}
})
.unwrap()
}
// Just for test
async fn send_a_msg(bot: nonebot_rs::Bot) {
for superuser in &bot.config.superusers {
bot.send_private_msg(
superuser.parse().unwrap(),
vec![Message::text("One minute passed.")],
)
.await;
}
}注册定时任务
use nonebot_rs;
fn main() {
let mut nb = nonebot_rs::Nonebot::new();
let mut scheduler = nonebot_rs::Scheduler::new();
scheduler.add_job(clock::clock(&nb));
nb.add_plugin(scheduler);
nb.run()
}enjoy~
Re-exports§
pub use scheduler::Scheduler;scheduler
Modules§
- api
- Onebot Api
- api_
resp - Onebot Api Response
- builtin
- 内建组件
- config
- nbrs 设置项
- event
- Onebot 事件
- log
- logger
- matcher
matcher - Matchers Plugin
- scheduler
scheduler - scheduler Plugin
Macros§
- on_
command - 注册命令匹配器
- on_
match_ all - 注册通配匹配器
- on_
start_ with - 注册字符匹配器
Structs§
- ApiResp
- Onebot Api 响应根结构体
- Bot
- 为 Plugin 提供各类 Onebot Api
- Matchers
matcher - 根据
Event类型分类存储对应的Matcher - Nonebot
- nbrs 本体
Enums§
- Action
- Nonebot 内部设置项
- ApiChannel
Item - api channel 传递项
- Message
- Onebot 协议消息定义
- Resp
Data - Onebot Api 响应 data 字段
Traits§
- Plugin
- A trait for nbrs plugins
Type Aliases§
- Action
Receiver - Nonebot Action Sender,Bot 发送,Nonebot 接收
- Action
Sender - Nonebot Action Sender,Bot 发送,Nonebot 接收
- ApiResp
Watcher - Bot 监视 Onebot ApiResp Watch channel
- ApiSender
- Onebot Api mpsc channel Bot 发送 WebSocket 接收
- BotGetter
- 接收广播的所有可用 Bot
- BotSender
- 广播所有可用的 Bot
- Event
Receiver - Event broadcast channel receiver 所有 WebSocket Plugin 共享, WebSocket 发送,Plugin 接收
- Event
Sender - Event broadcast channel sender 所有 WebSocket Plugin 共享, WebSocket 发送,Plugin 接收