aboutsummaryrefslogtreecommitdiff
path: root/src/hooks/shifty_eyes.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/hooks/shifty_eyes.rs')
-rw-r--r--src/hooks/shifty_eyes.rs46
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")),
+ }
+}