diff --git a/src/bots/leek.rs b/src/bots/leek.rs index 95ee0a7..de50d92 100644 --- a/src/bots/leek.rs +++ b/src/bots/leek.rs @@ -1 +1,50 @@ // TODO: port leek @karx + +macro_rules! hashmap { + ($( $key: expr => $val: expr ),*) => {{ + let mut map = ::std::collections::HashMap::new(); + $( map.insert($key, $val); )* + map + }} +} + +// macro_rules! mock { +// ($target:expr) => {{ +// let mut builder = String::from(""); + +// for char in $target.chars() { +// if rand::random() { +// builder.push_str(&char.to_uppercase().to_string()); +// } else { +// builder.push_str(&char.to_lowercase().to_string()); +// } +// } + +// builder +// }} +// } + +pub fn leetify(target: &str) -> String { + let letters = hashmap! { + 'a' => '4', + 'e' => '3', + 'i' => '1', + 'o' => '0', + 'g' => '6', + 's' => '5', + 't' => '7', + 'b' => '8' + }; + + let mut builder = String::with_capacity(target.len()); + + for char in target.chars() { + if let Some(repl) = letters.get(&char.to_ascii_lowercase()) { + builder.push(*repl); + } else { + builder.push(char); + } + } + + builder +} \ No newline at end of file diff --git a/src/bots/mod.rs b/src/bots/mod.rs index a499766..29f6a4f 100644 --- a/src/bots/mod.rs +++ b/src/bots/mod.rs @@ -1,2 +1,3 @@ pub mod title; pub mod weeb; +pub mod leek; \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 5380dd7..44ad630 100644 --- a/src/main.rs +++ b/src/main.rs @@ -165,6 +165,22 @@ async fn handle_privmsg( .unwrap_or("Invalid category. Valid categories: https://waifu.pics/docs"); state.client.privmsg(&channel, response).await?; } + "leet" => { + let user = match remainder { + Some(u) => match u { + "" => &nick, + _ => u + }, + None => &nick + }.trim(); + tracing::info!(user); + if let Some(prev_msg) = state.last_msgs.get(user) { + let resp = bots::leek::leetify(prev_msg); + state.client.privmsg(&channel, &resp).await?; + } else { + state.client.privmsg(&channel, "No previous messages to leetify!").await?; + } + } _ => { state.client.privmsg(&channel, "Unknown command").await?; }