use modules::Module; use toml::Table; use std::sync::Arc; use std::sync::mpsc::Receiver; use event::Event; 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 consume_events (&self, receiver: Receiver>) { loop { match receiver.recv() { Ok(event) => { match *event { Event::Message { content: ref message, ref channel, ref sender } => { debug!("Received message... {:?}", message); if message.starts_with(self.prefix.as_str()) { let substring = &message[self.prefix.chars().count()..]; match *channel { Some(ref channel) => channel.send(substring), None => sender.send(substring) } } } _ => () } } Err(error) => { error!("Error {:?}", error) } } } } }