use regex::Regex; use serenity::async_trait; use serenity::model::channel::Message; use serenity::prelude::{Context, EventHandler}; pub(crate) struct BestDoctorResponder { regex: Regex, } impl Default for BestDoctorResponder { fn default() -> Self { Self { regex: Regex::new(r"(?:[fF][uU]){3,}").unwrap(), } } } #[async_trait] impl EventHandler for BestDoctorResponder { async fn message(&self, ctx: Context, message: Message) { let content = &message.content_safe(ctx.clone()).await; if self.regex.is_match(content) { message .channel_id .say(ctx, get_desu()) .await .unwrap(); } } } const DESU_STRINGS: &[&str] = &[ "です。", "desu~", "desu.", r#" ``` ででででででででででで      すす      ででで     すすすすすすすすす     でで  でで      すす    でで   でで     すすす   でで           す す   でで           すすす    でで           すす     でで          すす      でで        すす ```"#, ]; fn get_desu() -> &'static str { use rand::seq::SliceRandom; use rand::thread_rng; DESU_STRINGS.choose(&mut thread_rng()).unwrap() // // https://imgur.com/a/yOb5n // messageList.add(channel -> channel.sendMessage(new MessageBuilder() // .setContent("https://www.youtube.com/watch?v=60mLvBWOMb4").build())); // messageList.add(channel -> channel.sendFile(Desu.class.getResourceAsStream("/desu/desu.jpg"), "desu.jpg")); // messageList.add(channel -> channel.sendMessage("desu~")); }