diff options
Diffstat (limited to 'src/hooks/shifty_eyes.rs')
| -rw-r--r-- | src/hooks/shifty_eyes.rs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/hooks/shifty_eyes.rs b/src/hooks/shifty_eyes.rs new file mode 100644 index 0000000..beb3a9e --- /dev/null +++ b/src/hooks/shifty_eyes.rs @@ -0,0 +1,46 @@ +use anyhow::{anyhow, Result}; +use irc::client::prelude::*; + +const EYES: [char; 10] = ['^', 'v', 'V', '>', '<', 'x', 'X', '-', 'o', 'O']; +const NOSE: [char; 7] = ['.', '_', '-', ';', '\'', '"', '~']; + +pub fn shifty_eyes(bot: &crate::Bot, msg: Message) -> Result<()> { + if let Command::PRIVMSG(_, text) = msg.command.clone() { + if text.len() == 3 { + let mut chars = text.chars(); + let mut left = chars.next().unwrap(); + let middle = chars.next().unwrap(); + let mut right = chars.next().unwrap(); + + if EYES.contains(&left) && NOSE.contains(&middle) && EYES.contains(&right) { + left = invert(left)?; + right = invert(right)?; + + let mut result = String::new(); + result.push(left); + result.push(middle); + result.push(right); + + bot.send_privmsg(msg.response_target().unwrap(), result.as_str())?; + } + } + } + + Ok(()) +} + +fn invert(input: char) -> Result<char> { + match input { + '^' => Ok('v'), + 'v' => Ok('^'), + 'V' => Ok('^'), + '>' => Ok('<'), + '<' => Ok('>'), + 'x' => Ok('o'), + 'X' => Ok('O'), + '-' => Ok('o'), + 'o' => Ok('-'), + 'O' => Ok('-'), + _ => Err(anyhow!("not a valid char")), + } +} |
