Create a stupid factoid bot

This commit is contained in:
Graham Christensen 2017-12-02 08:28:36 -05:00
parent b557c48040
commit b9d892ca1b
No known key found for this signature in database
GPG key ID: ACA1C1D120C83D5C
3 changed files with 101 additions and 2 deletions

View file

@ -0,0 +1,86 @@
#[macro_use]
extern crate serde_derive;
extern crate serde;
extern crate serde_json;
extern crate ircbot;
extern crate irc;
extern crate amqp;
extern crate env_logger;
#[macro_use]
extern crate log;
use amqp::protocol::basic::Deliver;
use amqp::protocol::basic::BasicProperties;
use amqp::Basic;
use amqp::Channel;
use amqp::Session;
use amqp::Table;
use ircbot::config;
use std::env;
#[derive(Serialize, Deserialize, Debug)]
struct Message {
target: String,
body: String
}
fn main() {
if let Err(_) = env::var("RUST_LOG") {
env::set_var("RUST_LOG", "info");
env_logger::init().unwrap();
info!("Defaulting RUST_LOG environment variable to info");
} else {
env_logger::init().unwrap();
}
let cfg = config::load(env::args().nth(1).unwrap().as_ref());
let mut session = Session::open_url(&cfg.rabbitmq.as_uri()).unwrap();
println!("Connected to rabbitmq");
println!("About to open channel #1");
let mut channel = session.open_channel(1).unwrap();
let read_queue = channel.queue_declare("", false, false, true,
false, false, Table::new()).unwrap();
channel.queue_bind(read_queue.queue.as_ref(), "exchange-messages",
"".as_ref(), false, Table::new()).unwrap();
let consumer_name = channel.basic_consume(
|chan: &mut Channel, _deliver: Deliver, _headers: BasicProperties, body: Vec<u8>| {
debug!("Got a message");
let msg: Result<Message, serde_json::Error> = serde_json::from_slice(&body);
if let Ok(msg) = msg {
if msg.body.trim() == "!cloudfront" {
let msg = serde_json::to_string(&Message{
target: msg.target.clone(),
body: "https://gist.github.com/grahamc/df1bb806eb3552650d03eef7036a72ba".to_owned(),
}).unwrap();
chan.basic_publish(
"".to_owned(),
"queue-publish".to_owned(),
false,
false,
BasicProperties {
content_type: Some("application/json".to_owned()),
..Default::default()
},
msg.into_bytes()
).expect("Failed to publish message");
} else {
debug!("Message didn't match: {:?}", msg);
}
}
},
read_queue.queue.as_ref(), "", false, true, false, false, Table::new());
println!("Starting consumer {:?}", consumer_name);
channel.start_consuming();
channel.close(200, "Bye").unwrap();
}

View file

@ -2,7 +2,7 @@
extern crate serde_derive;
extern crate serde;
extern crate serde_json;
extern crate ircbot;
extern crate irc;
extern crate amqp;
extern crate env_logger;
@ -21,7 +21,8 @@ use amqp::Channel;
use amqp::Session;
use amqp::Table;
mod config;
use ircbot::config;
use std::thread;
use std::env;

12
ircbot/src/lib.rs Normal file
View file

@ -0,0 +1,12 @@
#[macro_use]
extern crate serde_derive;
extern crate serde;
extern crate serde_json;
extern crate irc;
extern crate amqp;
extern crate env_logger;
pub mod config;
pub mod ircbot {
pub use config;
}