5 个版本
使用旧的Rust 2015
0.2.0 |
|
---|---|
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
150KB
1K SLoC
irsc
此存储库包含尚未经过适当测试的代码,在发现此库的部分功能不起作用时,存在做蠢事的风险。
概述
想要使用低资源消耗构建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