63 lines
2.0 KiB
Rust
Executable File

use modules::EventLoop;
use toml::value::Table;
use std::sync::Arc;
use std::sync::mpsc::Receiver;
use transformable_channels::mpsc::ExtSender;
use helpers::command::split_command;
use event::{Event, Envelope};
use wow_such_doge::Dogs;
pub struct DogModule {
prefix: String
}
impl DogModule {
pub fn new (_: &Table, configuration: &Table) -> Box<EventLoop> {
let prefix = configuration.get("prefix")
.and_then(|value| value.as_str())
.unwrap_or("?dog");
Box::new(DogModule {
prefix: String::from(prefix)
})
}
}
impl EventLoop for DogModule {
fn run(&self, _: Box<ExtSender<Event>>, receiver: Receiver<Arc<Envelope>>) {
let dogs = Dogs::new();
loop {
match receiver.recv() {
Ok(envelope) => {
match envelope.event {
Event::Message { ref message } => {
debug!("Received message from module {:?}... {:?}", envelope.from, message.content);
match split_command(&message.content) {
Some((command, argument)) => {
if command == self.prefix {
let dog = if !argument.is_empty() {
dogs.random_image_by_breed(argument)
} else {
dogs.random_image()
};
if let Ok(dog) = dog {
message.reply(&dog);
}
}
},
_ => {}
}
}
_ => ()
}
}
Err(error) => { error!("Error {:?}", error) }
}
}
}
}