use crate::vars::FBT_GUILD_ID; use once_cell::sync::Lazy; use poise::serenity_prelude::{self as serenity}; use regex::Regex; use strip_markdown::strip_markdown; // Some times maybe good sometimes maybe shit pub static POG_RE: Lazy = Lazy::new(|| { Regex::new( r"[pP𝓹⍴𝖕𝔭የ𝕡ק🅟🅿ⓟρᑭ𝙥քp̷þp͎₱ᵽ℘ア𝐩𝒑𝓅p̞̈͑̚͞℘p͓̽ք𝓹ᕶp̶p̳p̅][oO0øØ𝓸᥆𝖔𝔬ዐ𝕠๏🅞🅾ⓞσOoÒօoo̷ðo͎の𝗼ᴏᵒ🇴‌𝙤ѻⲟᓍӨo͓̽o͟o̲o̅o̳o̶🄾o̯̱̊͊͢Ꭷσℴ𝒐𝐨][gG9𝓰𝖌𝔤𝕘🅖🅶ⓖɠGg𝑔ցg̷gg͎g̲g͟ǥ₲ɢg͓̽Gɠ𝓰𝙜🇬‌Ꮆᵍɢ𝗴𝐠𝒈𝑔ᧁg𝚐₲Ꮆ𝑔ĝ̽̓̀͑𝘨ງ🄶𝔤ģ]\b", ).unwrap() }); /// This will read a message and check to see if the message contains the word `pog` /// /// # Panics /// /// Panics if regex fails to compile, this should be unreachable unless I acidentally change something before compile time. /// /// # Errors /// /// This function will return an error if . pub async fn pog_be_gone( new_message: &serenity::Message, ctx: &serenity::Context, ) -> Result<(), Box> { if !new_message.author.bot && !new_message.content.is_empty() { match new_message.guild(ctx) { None => {} // Probably a DM, do nothing Some(guild) => { if guild.id.as_u64() == &FBT_GUILD_ID { let lowercase_message = new_message.content.to_lowercase(); let cleaned_message = strip_markdown(&lowercase_message); let words: Vec<&str> = cleaned_message.split(' ').collect(); let mut hits: Vec<&str> = Vec::new(); for word in words { POG_RE.find(word).map_or((), |pog| { hits.push(pog.as_str()); }); } if !hits.is_empty() { // there is at least 1 pog found if hits.capacity().gt(&10) { new_message .reply( ctx, format!( "Jesus dude, why did you pog {} times?! stop it!", hits.len() ), ) .await?; } else { new_message.reply_mention(ctx, "please refer to the rules and use the term 'poi' instead of 'pog'!").await?; } } } } } }; Ok(()) } #[cfg(test)] mod meme_tests { use super::*; #[test] fn test_regex() { let pog_test = "pog"; assert!(POG_RE.is_match(pog_test)); } }