Crate nonebot_rs[−][src]
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;
Modules
Onebot Api
Onebot Api Response
内建组件
nbrs 设置项
Onebot 事件
logger
matcher
Matchers Plugin
scheduler
scheduler Plugin
Macros
Structs
Onebot Api 响应根结构体
为 Plugin 提供各类 Onebot Api
根据 Event
类型分类存储对应的 Matcher
nbrs 本体
Enums
Nonebot 内部设置项
api channel 传递项
Onebot 协议消息定义
Onebot Api 响应 data 字段
Traits
A trait for nbrs plugins
Type Definitions
Nonebot Action Sender,Bot 发送,Nonebot 接收
Nonebot Action Sender,Bot 发送,Nonebot 接收
Bot 监视 Onebot ApiResp Watch channel
Onebot Api mpsc channel Bot 发送 WebSocket 接收
接收广播的所有可用 Bot
广播所有可用的 Bot
Event broadcast channel receiver 所有 WebSocket Plugin 共享, WebSocket 发送,Plugin 接收
Event broadcast channel sender 所有 WebSocket Plugin 共享, WebSocket 发送,Plugin 接收