10个版本
0.3.0-rc | 2024年7月22日 |
---|---|
0.2.1-rc | 2024年7月8日 |
0.2.0 | 2024年6月19日 |
0.1.6 | 2024年5月29日 |
0.1.1 | 2024年4月30日 |
#546 in 网络编程
每月下载 123次
270KB
953 行
俄信使 - 使用Rust处理Facebook Messenger Webhook
欢迎来到俄信使,这是一个旨在简化处理Facebook Messenger webhook响应的Rust库。俄信使提供了一种方便的方式来构造和发送各种类型的响应,包括文本消息、快速回复、通用模板和媒体附件。
特性
- 自定义模型:开发者现在可以使用俄信使库中的自定义模型。这是通过集成rusql-alchemy实现的,这是一个sqlx的ORM。这意味着模型在Rust代码中定义,无需编写SQL查询。
- 易于使用:俄信使库旨在易于使用。它提供了一套模块和宏,可以抽象出构建机器人的复杂性,使您能够专注于应用程序的逻辑。
- 灵活:俄信使库具有灵活性,可用于构建各种机器人。它支持基于文本的对话、快速回复和自定义操作。
入门
要开始使用俄信使库,您需要将其作为Rust项目中的依赖项安装。您可以在Cargo.toml
文件中添加以下行来完成此操作
[dependencies]
russenger = { version = "0.3.O-rc", features = ["postgres"] } # features 'sqlite, postgres, mysql'
actix-web = "4"
sqlx = "^0.7.0"
安装库后,您就可以开始构建您的机器人了!有关如何使用库的更多信息,请参阅文档。
创建新项目
要使用俄信使库创建新项目,您可以使用cargo-generate
工具。以下是步骤
- 安装
cargo-generate
cargo install cargo-generate
- 生成新项目
cargo generate --git https://github.com/j03-dev/russenger_template
示例
以下是一些使用俄信使库可以构建的示例
一个简单的机器人,问候用户并询问他们的名字
use russenger::prelude::*;
use russenger::models::RussengerUser;
#[derive(FromRow, Clone, Model)]
pub struct Register {
#[model(primary_key = true, auto = true, null = false)]
pub id: Integer,
#[model(foreign_key = "RussengerUser.facebook_user_id", unique = true, null = false)]
pub user_id: String,
#[model(size = 30, unique = true, null = false)]
pub username: String,
}
#[action]
async fn Main(res: Res, req: Req) {
res.send(TextModel::new(&req.user, "Hello!")).await;
if let Some(user_register) = Register::get(kwargs!(user_id == req.user), &req.query.conn).await {
res.send(TextModel::new(&req.user, &format!("Hello {}", user_register.username)))
.await;
} else {
res.send(TextModel::new(&req.user, "What is your name: "))
.await;
req.query.set_action(&req.user, SignUp).await;
return;
}
req.query.set_action(&req.user, GetUserInput).await;
}
#[action]
async fn SignUp(res: Res, req: Req) {
let username: String = req.data.get_value();
let message = if Register::create(kwargs!(user_id = req.user, username = username), &req.query.conn).await {
"Register success"
} else {
"Register failed"
};
res.send(TextModel::new(&req.user, message)).await;
Main.execute(res, req).await;
}
#[action]
async fn GetUserInput(res: Res, req: Req) {
let payload = |value: &str| Payload::new(NextAction, Some(Data::new(value, None)));
// QuickReply
let quick_replies: Vec<QuickReply> = vec![
QuickReply::new("blue", "", payload("blue")),
QuickReply::new("red", "", payload("red")),
];
let quick_reply_model = QuickReplyModel::new(&req.user, "choose one color", quick_replies);
res.send(quick_reply_model).await;
}
#[action]
async fn NextAction(res: Res, req: Req) {
let color: String = req.data.get_value();
res.send(TextModel::new(&req.user, &color)).await;
Main.execute(res, req).await; // go back to Main action
}
#[russenger::main]
async fn main() {
let conn = Database::new().await.conn;
migrate!([RussengerUser, Register], &conn);
russenger::actions![Main, GetUserInput, NextAction, SignUp];
russenger::launch().await;
}
此示例展示了如何创建一个简单的机器人,它问候用户并询问他们的名字。它使用自定义模型来存储和检索用户数据。
一个机器人,向用户发送快速回复选项列表并处理他们的响应
use russenger::models::RussengerUser;
use russenger::prelude::*;
#[action]
async fn Main(res: Res, req: Req) {
let payload = |value: &str| Payload::new(NextAction, Some(Data::new(value, None)));
// QuickReply
let quick_replies: Vec<QuickReply> = vec![
QuickReply::new("Option 1", "", payload("Option 1")),
QuickReply::new("Option 2", "", payload("Option 2")),
QuickReply::new("Option 3", "", payload("Option 3")),
];
let quick_reply_model = QuickReplyModel::new(&req.user, "Choose an option:", quick_replies);
res.send(quick_reply_model).await;
}
#[action]
async fn NextAction(res: Res, req: Req) {
let option: String = req.data.get_value();
res.send(TextModel::new(&req.user, &format!("You chose: {}", option))).await;
}
#[russenger::main]
async fn main() {
let conn = Database::new().await.conn;
migrate!([RussengerUser], &conn);
russenger::actions![Main, NextAction];
russenger::launch().await;
}
此示例展示了如何创建一个机器人,它向用户发送快速回复选项列表并处理他们的响应。
贡献
我们欢迎为 Russenger 库做出贡献!如果您有新功能的想法或者发现了错误,请在本库的 GitHub 仓库 上提交一个问题。如果您想贡献代码,请克隆仓库并提交一个 pull request。
许可证
Russenger 库遵循 MIT 许可协议。更多信息请参阅 LICENSE 文件。
依赖项
~25–47MB
~814K SLoC