use crate::util::{debug_say, is_bot_owner}; use rand::thread_rng; use rand::Rng; use serenity::framework::standard::{macros::command, CommandResult}; use serenity::model::channel::Message; use serenity::prelude::Context; use url::Url; #[command] async fn mock(ctx: &Context, msg: &Message) -> CommandResult { if is_bot_owner(msg.author.id) { let prev_msg = msg .channel_id .messages(ctx, |retriever| retriever.before(msg.id).limit(1)) .await? .pop(); let mut content: String = prev_msg.unwrap().content_safe(ctx).await; for word in content.clone().split_whitespace() { if let Err(_) = Url::parse(word) { content = (&content).replacen(word, &random_uppercase(word), 1); } } // debug_say(msg, ctx, content).await?; msg.channel_id .send_message(ctx, |m| { m.content(content); m.add_file(serenity::http::AttachmentType::Bytes { data: std::borrow::Cow::from( &include_bytes!("../../res/mocking-spongebob.jpg")[..], ), filename: "spongemock.jpg".to_string(), }) }) .await?; } Ok(()) } fn random_uppercase(word: &str) -> String { let mut rng = thread_rng(); word.chars() .map(|c| { if rng.gen::() { c.to_uppercase().collect::() } else { c.to_lowercase().collect() } }) .collect() }