Files
caitsith/src/commands/roll.rs
T

57 lines
1.5 KiB
Rust
Raw Normal View History

2025-04-19 20:22:08 -04:00
use crate::{
types::dietype,
util::{junk, random, validate},
};
use serenity::builder::{CreateCommand, CreateCommandOption};
use serenity::model::application::{CommandOptionType, ResolvedOption, ResolvedValue};
pub fn run_core(input: Option<&str>) -> String {
let Some(input) = input else {
return junk::get_random_insult();
};
2026-02-25 19:34:23 -05:00
let split = match input.split('d').nth(1) {
Some(s) => s,
None => return junk::get_random_insult(),
};
2026-02-25 19:34:23 -05:00
let die_num = match validate::parse_str_into_num::<i32>(split.trim()) {
Some(d) => d,
None => return junk::get_random_insult(),
};
2026-02-25 19:34:23 -05:00
match dietype::DieType::from_sides(die_num) {
Some(_) => {}
None => return junk::get_random_insult(),
};
2026-02-25 19:34:23 -05:00
let mut rng = random::RandomGen::new();
rng.range_random_from_one(die_num).to_string()
}
2025-04-19 20:22:08 -04:00
pub async fn run(options: &[ResolvedOption<'_>]) -> String {
if let Some(ResolvedOption {
value: ResolvedValue::String(input),
..
}) = options.first()
{
run_core(Some(input))
2025-04-19 20:22:08 -04:00
} else {
junk::get_random_insult()
}
}
pub fn register() -> CreateCommand {
CreateCommand::new("roll")
.description("Roll dice")
.add_option(
CreateCommandOption::new(
CommandOptionType::String,
"input",
"The number sides for the dice roll, typically starts with \'d\' then a number",
)
.required(true),
)
}