#chat-bot #framework #urbit #bot-framework #http

urbit-chatbot-framework

一个只需几行代码即可创建 Urbit 聊天机器人的框架

3 个版本

0.1.2 2021年4月7日
0.1.1 2021年2月5日
0.1.0 2021年2月5日

#2125网页编程

MIT 许可证

15KB
92

Urbit Chatbot Framework

一个只需几行代码即可创建 Urbit 聊天机器人的框架。

Urbit Chatbot Framework 负责处理连接到飞船、订阅聊天、解析消息和自动发送消息的所有复杂性。你只需编写消息处理/响应逻辑即可。

此包在 crates.io 上提供。

awesome urbit badge

基本设计

该框架的核心是围绕 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,您可以立即看到该聊天机器人的实现。

您也可以轻松运行这些示例,方法如下:

  1. 克隆此仓库。
  2. 在终端中更改到示例项目文件夹。
  3. 使用您希望在聊天机器人中运行的 chat_shipchat_name 编辑 main.rs
  4. 首次运行 cargo run 以创建船配置文件。
  5. 使用您的船信息(通常月亮或彗星效果最好。不要使用您的日常驾驶船,因为聊天机器人连接的船的消息都会被忽略。)编辑 ship_config.yaml
  6. 运行 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