1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use crate::checks::ENABLED_CHECK;
use serenity::{
    client::Context,
    framework::standard::{
        macros::command,
        Args,
        CommandResult,
    },
    model::channel::Message,
};

#[command]
#[description("Vaporwave a phrase")]
#[usage("\"<phrase>\"")]
#[example("\"Hello World!\"")]
#[min_args(1)]
#[max_args(1)]
#[checks(Enabled)]
#[bucket("default")]
pub async fn vaporwave(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult {
    let phrase = args.single_quoted::<String>()?;
    msg.channel_id
        .say(&ctx.http, vaporwave_str(&phrase))
        .await?;
    Ok(())
}

pub fn vaporwave_str(data: &str) -> String {
    data.chars()
        .filter_map(|c| {
            let c = c as u32;
            if (33..=270).contains(&c) {
                std::char::from_u32(c + 65248) // unwrap or c ?
            } else {
                Some(32 as char)
            }
        })
        .collect()
}