3 个版本
0.1.2 | 2021年4月7日 |
---|---|
0.1.1 | 2021年2月5日 |
0.1.0 | 2021年2月5日 |
#2125 在 网页编程
15KB
92 行
Urbit Chatbot Framework
一个只需几行代码即可创建 Urbit 聊天机器人的框架。
Urbit Chatbot Framework 负责处理连接到飞船、订阅聊天、解析消息和自动发送消息的所有复杂性。你只需编写消息处理/响应逻辑即可。
此包在 crates.io 上提供。
基本设计
该框架的核心是围绕 Chatbot
结构体构建的。它定义为
/// This struct represents a chatbot that is connected to a given `ship`,
/// is watching/posting to a specific `chat_ship`/`chat_name`
/// and is using the function `respond_to_message` to process any messages
/// which are posted in said chat.
pub struct Chatbot {
/// `respond_to_message` is a function defined by the user of this framework.
/// This function receives any messages that get posted to the connected chat,
/// and if the function returns `Some(message)`, then `message` is posted to the
/// chat as a response. If it returns `None`, then no message is posted.
respond_to_message: fn(AuthoredMessage) -> Option<Message>,
ship: ShipInterface,
chat_ship: String,
chat_name: String,
}
要创建聊天机器人,只需用以下内容实例化一个 Chatbot
结构体
- 一个
ShipInterface
用于连接并与 Urbit 网络交互 - 运行聊天的
chat_ship
- 聊天名称
chat_name
- 一个函数(可选名为 respond_to_message),该函数接受一个
AuthoredMessage
作为输入,并返回一个Option<Message>
作为输出
创建聊天机器人
最简单创建 Chatbot
的方法是使用 new_with_local_config
方法
/// Create a new `Chatbot` with a `ShipInterface` derived automatically
/// from a local config file. If the config file does not exist, the
/// `Chatbot` will create the config file, exit, and prompt the user to
/// fill it out.
pub fn new_with_local_config(
respond_to_message: fn(AuthoredMessage) -> Option<Message>,
chat_ship: &str,
chat_name: &str,
) -> Self {
这会自动处理为用户创建一个本地飞船配置文件以供编辑,如果没有可用,然后在重新运行时读取该配置以连接到飞船。
为了使用此方法,我们需要定义一个 respond_to_message
函数,我们可以将其作为参数提供。以下是一个可能的简单实现示例
fn respond_to_message(authored_message: AuthoredMessage) -> Option<Message> {
// Any time a message is posted in the chat, respond in chat with a static message.
Some(Message::new().add_text("Calm Computing ~"))
}
请注意,如果此函数返回 None
,则 Chatbot
不会回复消息,并继续向前处理下一个。
定义了此函数后,现在可以轻松调用 Chatbot::new_with_local_config()
并获取一个实例化的 Chatbot
。
运行聊天机器人
定义了 Chatbot
结构体后,只需做以下事情
chat_bot.run();
这将自动执行所有消息、解析和与连接的 Urbit 船交互,无需任何额外代码。
就这样,您已经有一个准备就绪的 Urbit 聊天机器人。
示例项目
以下链接的项目是示例 Urbit 聊天机器人项目。它们直接链接到 main.rs
,您可以立即看到该聊天机器人的实现。
您也可以轻松运行这些示例,方法如下:
- 克隆此仓库。
- 在终端中更改到示例项目文件夹。
- 使用您希望在聊天机器人中运行的
chat_ship
和chat_name
编辑main.rs
。 - 首次运行
cargo run
以创建船配置文件。 - 使用您的船信息(通常月亮或彗星效果最好。不要使用您的日常驾驶船,因为聊天机器人连接的船的消息都会被忽略。)编辑
ship_config.yaml
。 - 运行
cargo run
以使用提供的船配置信息运行聊天机器人。
简单聊天机器人
简单聊天机器人 是可能的最简单的聊天机器人,它以静态消息回复聊天中的所有消息。大约 4 行真实代码,展示了创建聊天机器人的简单性。
这个项目的目的是显示设置聊天机器人所需的最基本要求。
反彗星聊天机器人
反彗星聊天机器人 是一个稍微复杂一些的聊天机器人,它会查看发送最新消息的船。如果该船的名称足够长,可以被认为是彗星,则它会回复一条消息。否则,它返回 None
,这意味着聊天机器人不会向聊天发送消息(如果不是彗星)。
加密货币价格聊天机器人
加密货币价格聊天机器人 是一个有用的聊天机器人的实际示例,它实现了聊天中每个人都可以使用的命令。
实际上,如果有人键入
|price {crypto_name_here}
例如
|price bitcoin
那么机器人将通过 coingecko API 获取比特币价格,并将其返回
USD $37167
这是第一个通过 Urbit 聊天机器人框架实现的具有实际用途的聊天机器人,是展示如何构建需要根据命令回复并调用外部 API 的聊天机器人的绝佳示例。
圣经聊天机器人
圣经聊天机器人 是另一个有用的聊天机器人的实际示例,它实现了聊天中每个人都可以使用的命令。
此聊天机器人允许任何人使用 !bible
命令并请求圣经(KJV)中的一节或多节经文。
!bible John 1:1-5
投票聊天机器人
投票聊天机器人 是最复杂的聊天机器人示例,允许任何人在他们的聊天中进行投票/调查。每个调查都保存在一个 .json
文件中,并确保每艘船只能投一次票。
要开始任何数量的选项的调查
!poll [option1] [option2] ...
或
!poll -t [title] [option1] [option2] ...
投票标题充当其ID,因此请勿多次使用相同的标题。
一旦投票开始,任何船只都可以投票(精确一次)
!vote [pollid] [option]
可以通过以下方式查看投票结果:
!results [pollid]
或
!results all
查看所有活跃的投票。
投票创建者可以通过以下方式结束投票:
!endpoll [pollid]
没有标题的投票在创建时会生成一个数字ID,并存储在机器人运行目录下的json文件中。
(感谢 ~hodzod-walrus 创建投票聊天机器人)
依赖项
~10–23MB
~378K SLoC