add new autocomplete for colors
This commit is contained in:
@@ -1,45 +1,67 @@
|
|||||||
|
|
||||||
use crate::common::{Context, Error};
|
use crate::common::{Context, Error};
|
||||||
|
|
||||||
|
use once_cell::sync::Lazy;
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use hex_color::HexColor;
|
use hex_color::HexColor;
|
||||||
use poise::serenity_prelude::{colours, Color, EditRole};
|
use poise::serenity_prelude::{colours, Color, EditRole};
|
||||||
|
|
||||||
|
static COLORS: Lazy<HashMap<&'static str, Color>> = Lazy::new(|| {
|
||||||
|
HashMap::from([
|
||||||
|
("reset", colours::roles::DEFAULT),
|
||||||
|
("default", colours::roles::DEFAULT),
|
||||||
|
("teal", colours::roles::TEAL),
|
||||||
|
("dark teal", colours::roles::DARK_TEAL),
|
||||||
|
("green", colours::roles::GREEN),
|
||||||
|
("dark green", colours::roles::DARK_GREEN),
|
||||||
|
("blue", colours::roles::BLUE),
|
||||||
|
("dark blue", colours::roles::DARK_BLUE),
|
||||||
|
("purple", colours::roles::PURPLE),
|
||||||
|
("dark purple", colours::roles::DARK_PURPLE),
|
||||||
|
("magenta", colours::roles::MAGENTA),
|
||||||
|
("dark magenta", colours::roles::DARK_MAGENTA),
|
||||||
|
("gold", colours::roles::GOLD),
|
||||||
|
("dark gold", colours::roles::DARK_GOLD),
|
||||||
|
("orange", colours::roles::DARK_ORANGE),
|
||||||
|
("dark orange", colours::roles::DARK_ORANGE),
|
||||||
|
("red", colours::roles::RED),
|
||||||
|
("dark red", colours::roles::DARK_RED),
|
||||||
|
("lighter grey", colours::roles::LIGHTER_GREY),
|
||||||
|
("lighter gray", colours::roles::LIGHTER_GREY),
|
||||||
|
("light grey", colours::roles::LIGHT_GREY),
|
||||||
|
("light gray", colours::roles::LIGHT_GREY),
|
||||||
|
("dark grey", colours::roles::DARK_GREY),
|
||||||
|
("dark gray", colours::roles::DARK_GREY),
|
||||||
|
("darker grey", colours::roles::DARKER_GREY),
|
||||||
|
("darker gray", colours::roles::DARKER_GREY),
|
||||||
|
("white", Color::new(0xffffff)),
|
||||||
|
("black", Color::new(0x010101)),
|
||||||
|
("blurple", Color::BLURPLE),
|
||||||
|
("yellow", Color::new(0xe4f10a)),
|
||||||
|
])
|
||||||
|
});
|
||||||
|
|
||||||
|
async fn autocomplete_colors<'a>(
|
||||||
|
_ctx: Context<'_>,
|
||||||
|
partial: &'a str,
|
||||||
|
) -> impl Iterator<Item = &'static str> + use<'a> {
|
||||||
|
COLORS.clone().into_keys().filter(move |x|
|
||||||
|
x.starts_with(partial)
|
||||||
|
|| x.starts_with(&format!("light {partial}"))
|
||||||
|
|| x.starts_with(&format!("lighter {partial}"))
|
||||||
|
|| x.starts_with(&format!("dark {partial}"))
|
||||||
|
|| x.starts_with(&format!("darker {partial}")))
|
||||||
|
}
|
||||||
|
|
||||||
/// Change the color of your personal role
|
/// Change the color of your personal role
|
||||||
#[poise::command(slash_command, prefix_command)]
|
#[poise::command(slash_command, prefix_command)]
|
||||||
pub async fn color(ctx: Context<'_>, color: String) -> Result<(), Error> {
|
pub async fn color(ctx: Context<'_>, #[autocomplete = "autocomplete_colors"] color: String) -> Result<(), Error> {
|
||||||
let color = match color.to_lowercase().as_str() {
|
let color = if let Some(named) = COLORS.get(color.as_str()) {
|
||||||
"reset" | "default" => colours::roles::DEFAULT,
|
named.clone()
|
||||||
"teal" => colours::roles::TEAL,
|
} else {
|
||||||
"dark teal" => colours::roles::DARK_TEAL,
|
let rgb = HexColor::parse_rgb(&color)?;
|
||||||
"green" => colours::roles::GREEN,
|
Color::from_rgb(rgb.r, rgb.g, rgb.b)
|
||||||
"dark green" => colours::roles::DARK_GREEN,
|
|
||||||
"blue" => colours::roles::BLUE,
|
|
||||||
"dark blue" => colours::roles::DARK_BLUE,
|
|
||||||
"purple" => colours::roles::PURPLE,
|
|
||||||
"dark purple" => colours::roles::DARK_PURPLE,
|
|
||||||
"magenta" => colours::roles::MAGENTA,
|
|
||||||
"dark magenta" => colours::roles::DARK_MAGENTA,
|
|
||||||
"gold" => colours::roles::GOLD,
|
|
||||||
"dark gold" => colours::roles::DARK_GOLD,
|
|
||||||
"orange" => colours::roles::DARK_ORANGE,
|
|
||||||
"dark orange" => colours::roles::DARK_ORANGE,
|
|
||||||
"red" => colours::roles::RED,
|
|
||||||
"dark red" => colours::roles::DARK_RED,
|
|
||||||
"lighter grey" | "lighter gray" => colours::roles::LIGHTER_GREY,
|
|
||||||
"light grey" | "light gray" => colours::roles::LIGHT_GREY,
|
|
||||||
"dark grey" | "dark gray" => colours::roles::DARK_GREY,
|
|
||||||
"darker grey" | "darker gray" => colours::roles::DARKER_GREY,
|
|
||||||
"white" => Color::new(0xffffff),
|
|
||||||
"black" => Color::new(0x010101),
|
|
||||||
"blurple" => Color::BLURPLE,
|
|
||||||
"yellow" => Color::new(0xe4f10a),
|
|
||||||
hex => match HexColor::parse_rgb(hex) {
|
|
||||||
Ok(color) => Color::from_rgb(color.r, color.g, color.b),
|
|
||||||
Err(_) => {
|
|
||||||
ctx.reply(format!("Unable to parse `{}` as a color.", color)).await?;
|
|
||||||
return Ok(());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut tx = ctx.data().database.begin().await?;
|
let mut tx = ctx.data().database.begin().await?;
|
||||||
|
|||||||
Reference in New Issue
Block a user