use modules::Module; use toml::Table; use std::sync::Arc; use std::sync::mpsc::{Sender, Receiver}; use helpers::command::split_command; use event::{Event, Envelope}; pub struct EchoModule { prefix: String } impl EchoModule { pub fn new (configuration: &Table) -> Box { let prefix = configuration.get("prefix") .and_then(|value| value.as_str()) .unwrap_or("!echo"); Box::new(EchoModule { prefix: String::from(prefix) }) } } impl Module for EchoModule { fn run(&self, _: Sender, receiver: Receiver>) { loop { match receiver.recv() { Ok(envelope) => { match envelope.event { Event::Message { ref message } => { debug!("Received message... {:?}", message.content); match split_command(&message.content) { Some((command, argument)) => { if command == self.prefix { message.reply(argument); } }, _ => {} } } _ => () } } Err(error) => { error!("Error {:?}", error) } } } } }