2个版本

使用旧的Rust 2015

0.1.1 2017年11月8日
0.1.0 2017年9月22日

#28 in #listener

MIT/Apache

15KB
183

yobot

注意:这是由我(@stuartnelson3)分叉的,目的是更新并在此处发布。所有荣誉归原作者Martin Conte Mac Donell所有 [email protected]

Yobot是一个可扩展的Slack机器人。您可以通过添加定义正则表达式的监听器来处理Slack频道上的实时事件。

您需要创建一个机器人,然后在启动Yobot时提供其API令牌和名称。请参阅examples/中的示例

监听器

监听器提供了一个Regex,主循环使用它来检查监听器是否感兴趣。如果正则表达式匹配,则在处理程序上调用handle,传递消息和RtmClient。然后监听器可以进行一些工作并使用客户端发送其响应。

请注意,监听器上的panic(或崩溃)会导致整个客户端崩溃。

实现MessageListener允许响应slack::Message。目前创建处理程序的要求很少。handle函数接收一个slack::Message和一个slack::RtmClient。监听器负责通过在re上定义正则表达式来测试它是否感兴趣于回复。可选地调用cli.send_message来发送响应。

示例

一个简单的回声处理程序可能看起来像以下这样

use regex::Regex;
use yobot::listener::{MessageListener, Message};

pub struct EchoListener {
    regex: Regex
}

impl EchoListener {
    pub fn new() -> EchoListener {
        EchoListener {
            regex: Regex::new(r".").unwrap()
        }
    }
}

impl MessageListener for EchoListener {
    fn help(&self) -> &str {
        "echo"
    }

    fn re(&self) -> &Regex {
        &self.regex
    }

    fn handle(&self, message: &Message, cli: &slack::RtmClient) {
        let _ = cli.sender().send_message(&message.channel, &message.text);
    }
}

Yobot

Yobot是机器人的主结构。添加一些监听器,然后调用connect来连接实时API并开始监听消息。

示例

fn main() {
    let token = match env::var("SLACK_BOT_TOKEN") {
        Ok(token) => token,
        Err(_) => panic!("Failed to get SLACK_BOT_TOKEN from env"),
    };
    let bot_name = match env::var("SLACK_BOT_NAME") {
        Ok(bot_name) => bot_name,
        Err(_) => panic!("Failed to get SLACK_BOT_NAME from env"),
    };

    let listener = EchoListener::new();
    let mut yobot = Yobot::new();
    yobot.add_listener(listener);
    yobot.connect(token, bot_name);
}

依赖关系

~18–27MB
~431K SLoC