63 lines
2.0 KiB
Rust
63 lines
2.0 KiB
Rust
|
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) }
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|