50 lines
1.5 KiB
Rust
50 lines
1.5 KiB
Rust
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);
|
|
}
|
|
}
|
|
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::<bool>() {
|
|
c.to_uppercase().collect::<String>()
|
|
} else {
|
|
c.to_lowercase().collect()
|
|
}
|
|
})
|
|
.collect()
|
|
}
|