#irc #protocols #internet

nightly irsc

构建IRC机器人的轻量级库

5 个版本

使用旧的Rust 2015

0.2.0 2015年6月29日
0.1.1 2015年5月4日
0.1.0 2015年4月30日
0.0.3 2014年12月26日
0.0.2 2014年11月21日

#45 in #irc

MIT 许可证

150KB
1K SLoC

irsc

travis-ci.org

此存储库包含尚未经过适当测试的代码,在发现此库的部分功能不起作用时,存在做蠢事的风险。

概述

想要使用低资源消耗构建IRC机器人吗?您可能想看看这个库(也许以后会)。

此库应该是在IRC协议之上的一层薄层,为您处理所有网络IO和事件解析。目前,它只能这样做,没有更多。

特性

  • RFC2812的半完整实现
  • 一些CTCP支持

计划中

  • 高级包装器,直接针对编写机器人
  • 大量测试
  • 一些文档(是的,当然)

示例

与该库的rustc 1.1.0-nightly (c4b23aec4 2015-04-29)3e898f8451229bcc4988b40e2edcaec348bf7f79版本编译并工作。

extern crate irsc;

use std::borrow::ToOwned;
use std::borrow::Cow::*;

use irsc::client::Client;
use irsc::color::bold;
use irsc::*;
use irsc::Command::*;
use irsc::Reply::*;

static NAME: &'static str = "rusticbot";
static DESC: &'static str = "A bot, written in Rust.";

fn callback(server: &mut Client, msg: &Message) {
    match Command::from_message(msg) {
        Some(PRIVMSG(to, content)) => {
            let from = msg.prefix().and_then(Ident::parse).unwrap();
            let response = match msg.msg_type {
                MsgType::Irc => format!("{} wrote: {}", from.nickname, bold(&content)),
                MsgType::Ctcp => format!("{} emoted: {}", from.nickname, bold(&content["ACTION ".len()..]))
            };
            server.send(PRIVMSG(to, Owned(response))).unwrap();
        },
        _ => ()
    }

    match Reply::from_message(msg) {
        Some(RPL_WELCOME(_)) => {
            server.send(JOIN(vec![Borrowed("#botzoo")], vec![])).unwrap();
        },
        _ => ()
    }
}

fn main() {
    let mut s = Client::new();
    s.connect("irc.mozilla.org".to_owned(), 6667).unwrap();
    s.send(NICK(Borrowed(NAME))).unwrap();
    s.send(USER(Borrowed(NAME), Borrowed("*"), Borrowed("*"), Borrowed(DESC))).unwrap();

    // Dedicate this thread to listening and event processing
    s.listen(callback).unwrap();
}

依赖关系

~5.5MB
~103K SLoC