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(); }; let split = match input.split('d').nth(1) { Some(s) => s, None => return junk::get_random_insult(), }; let die_num = match validate::parse_str_into_num::(split.trim()) { Some(d) => d, None => return junk::get_random_insult(), }; match dietype::DieType::from_sides(die_num) { Some(_) => {} None => return junk::get_random_insult(), }; let mut rng = random::RandomGen::new(); rng.range_random_from_one(die_num).to_string() } pub async fn run(options: &[ResolvedOption<'_>]) -> String { if let Some(ResolvedOption { value: ResolvedValue::String(input), .. }) = options.first() { run_core(Some(input)) } 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), ) }