diff --git a/src/lib.rs b/src/lib.rs index 2a83cce..50640fb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,13 +6,13 @@ use regex::Regex; //is this the best way to do this? probably not mod modules; -use modules::{bully, lenny, join_rude}; +use modules::{bully, lenny, join_rude, grass, noemo, ttb}; type ModuleFunc = fn(regex::Captures, &Message, &VecDeque)->Option<(String, String)>; -const NUM_MODS:usize = 2; +const NUM_MODS:usize = 5; -const MODULES: [(&str, ModuleFunc);NUM_MODS] = [(lenny::PATTERN, lenny::mod_message), (bully::PATTERN, bully::mod_message)]; +const MODULES: [(&str, ModuleFunc);NUM_MODS] = [(lenny::PATTERN, lenny::mod_message), (bully::PATTERN, bully::mod_message), (grass::PATTERN, grass::touch_grass), (noemo::PATTERN, noemo::no_emo), (ttb::PATTERN, ttb::time_to_baby)]; pub fn build_modules() -> Result, regex::Error> { let mut regex_array: Vec<(Regex, ModuleFunc)> = Vec::with_capacity(NUM_MODS); diff --git a/src/modules/grass.rs b/src/modules/grass.rs new file mode 100644 index 0000000..3f3c4ae --- /dev/null +++ b/src/modules/grass.rs @@ -0,0 +1,15 @@ +use irc::proto::Message; +use std::collections::VecDeque; + +pub const PATTERN: &str = "\\$grass (?P[^\\s]+)"; + +pub fn touch_grass(captures: regex::Captures, message: &Message, _: &VecDeque) -> Option<(String, String)> { + + let grass_toucher = captures.get(1).unwrap().as_str(); + + let complete_message = format!("{} thinks you should go outside and touch some grass, {}", + message.source_nickname().unwrap_or("unknown_nick").to_string(), + grass_toucher); + + Some((message.response_target().unwrap_or("#lug").to_string(), complete_message.to_string())) +} diff --git a/src/modules/mod.rs b/src/modules/mod.rs index 8316154..967a619 100644 --- a/src/modules/mod.rs +++ b/src/modules/mod.rs @@ -1,4 +1,7 @@ pub mod bully; pub mod lenny; pub mod join_rude; +pub mod grass; +pub mod ttb; +pub mod noemo; diff --git a/src/modules/noemo.rs b/src/modules/noemo.rs new file mode 100644 index 0000000..5af55eb --- /dev/null +++ b/src/modules/noemo.rs @@ -0,0 +1,13 @@ +use irc::proto::Message; +use std::collections::VecDeque; + +pub const PATTERN: &str = "\\$noemo (?P[^\\s]+)"; + +pub fn no_emo(captures: regex::Captures, message: &Message, _: &VecDeque) -> Option<(String, String)> { + let emo_person = captures.get(1).unwrap().as_str(); + + let complete_message = format!("{} thinks you shouldn't be so emo, {}. Take a deep breath and lighten up", + message.source_nickname().unwrap_or("unknown_nick").to_string(), + emo_person); + Some((message.response_target().unwrap_or("#lug").to_string(), complete_message)) +}