small fixes, rename
This commit is contained in:
parent
2c2c78114f
commit
052d8359c4
4 changed files with 54 additions and 30 deletions
34
Cargo.lock
generated
34
Cargo.lock
generated
|
|
@ -889,23 +889,6 @@ dependencies = [
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "krait"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"anyhow",
|
|
||||||
"dotenv",
|
|
||||||
"nom",
|
|
||||||
"nom-language",
|
|
||||||
"rand 0.10.2",
|
|
||||||
"rand_xoshiro",
|
|
||||||
"serenity",
|
|
||||||
"thiserror",
|
|
||||||
"tokio",
|
|
||||||
"tracing",
|
|
||||||
"tracing-subscriber",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lazy_static"
|
name = "lazy_static"
|
||||||
version = "1.5.0"
|
version = "1.5.0"
|
||||||
|
|
@ -988,6 +971,23 @@ dependencies = [
|
||||||
"windows-sys 0.61.2",
|
"windows-sys 0.61.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "nat1"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"dotenv",
|
||||||
|
"nom",
|
||||||
|
"nom-language",
|
||||||
|
"rand 0.10.2",
|
||||||
|
"rand_xoshiro",
|
||||||
|
"serenity",
|
||||||
|
"thiserror",
|
||||||
|
"tokio",
|
||||||
|
"tracing",
|
||||||
|
"tracing-subscriber",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nom"
|
name = "nom"
|
||||||
version = "8.0.0"
|
version = "8.0.0"
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
[package]
|
[package]
|
||||||
name = "krait"
|
name = "nat1"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
|
|
|
||||||
24
src/dice.rs
24
src/dice.rs
|
|
@ -99,10 +99,20 @@ impl Expression {
|
||||||
bail!("Too many dice.")
|
bail!("Too many dice.")
|
||||||
};
|
};
|
||||||
write!(w, "d")?;
|
write!(w, "d")?;
|
||||||
let size = size_node.evaluate(rng, w, precedence)? as i64;
|
let size = size_node.evaluate(rng, w, precedence)?;
|
||||||
if size < 1 {
|
if size.is_nan() {
|
||||||
bail!("Invalid die size.")
|
bail!("dNaN isn't rollable, sorry.")
|
||||||
}
|
}
|
||||||
|
if size.is_infinite() {
|
||||||
|
bail!("dinf isn't rollable, sorry.")
|
||||||
|
}
|
||||||
|
if size < 1.0 {
|
||||||
|
bail!("Die size is smaller than 1!")
|
||||||
|
}
|
||||||
|
if size > i64::MAX as f64 {
|
||||||
|
bail!("Die size is too big!")
|
||||||
|
}
|
||||||
|
let size = size as i64;
|
||||||
|
|
||||||
let mut rolls = (0..count)
|
let mut rolls = (0..count)
|
||||||
.map(|_| rng.random_range(1..=size))
|
.map(|_| rng.random_range(1..=size))
|
||||||
|
|
@ -118,9 +128,10 @@ impl Expression {
|
||||||
for fragment in fragments {
|
for fragment in fragments {
|
||||||
comparers.push(fragment.comparer(rng, w)?);
|
comparers.push(fragment.comparer(rng, w)?);
|
||||||
}
|
}
|
||||||
for i in 0..DICE_POOL_LIMIT {
|
let mut i = 0;
|
||||||
if i >= rolls.len() {
|
while i < rolls.len() {
|
||||||
break;
|
if i > DICE_POOL_LIMIT {
|
||||||
|
bail!("Explosion added too many dice.")
|
||||||
}
|
}
|
||||||
if comparers.len() == 0 {
|
if comparers.len() == 0 {
|
||||||
// Explode on max size dice
|
// Explode on max size dice
|
||||||
|
|
@ -136,6 +147,7 @@ impl Expression {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
i += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
24
src/main.rs
24
src/main.rs
|
|
@ -4,10 +4,7 @@ mod parsing;
|
||||||
use anyhow::bail;
|
use anyhow::bail;
|
||||||
use dotenv::dotenv;
|
use dotenv::dotenv;
|
||||||
use rand::{Rng, SeedableRng};
|
use rand::{Rng, SeedableRng};
|
||||||
use serenity::all::{
|
use serenity::all::{Command, CommandInteraction, CommandOptionType, CreateCommandOption, CreateComponent, FullEvent, Interaction, InteractionContext, MessageFlags, ResolvedOption, ResolvedValue};
|
||||||
Command, CommandInteraction, CommandOptionType, CreateCommandOption, CreateComponent,
|
|
||||||
FullEvent, Interaction, MessageFlags, ResolvedOption, ResolvedValue,
|
|
||||||
};
|
|
||||||
use serenity::builder::{
|
use serenity::builder::{
|
||||||
CreateCommand, CreateContainer, CreateContainerComponent, CreateInteractionResponse,
|
CreateCommand, CreateContainer, CreateContainerComponent, CreateInteractionResponse,
|
||||||
CreateInteractionResponseFollowup, CreateInteractionResponseMessage, CreateTextDisplay,
|
CreateInteractionResponseFollowup, CreateInteractionResponseMessage, CreateTextDisplay,
|
||||||
|
|
@ -96,7 +93,10 @@ impl EventHandler for Handler {
|
||||||
CommandOptionType::String,
|
CommandOptionType::String,
|
||||||
"seed",
|
"seed",
|
||||||
"Roll with a fixed seed. This bot uses xoshiro256++.",
|
"Roll with a fixed seed. This bot uses xoshiro256++.",
|
||||||
)),
|
))
|
||||||
|
.add_context(InteractionContext::Guild)
|
||||||
|
.add_context(InteractionContext::BotDm)
|
||||||
|
.add_context(InteractionContext::PrivateChannel),
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
|
|
@ -189,7 +189,19 @@ pub async fn roll(ctx: &Context, command: &CommandInteraction) -> anyhow::Result
|
||||||
let seed = fixed_seed.unwrap_or_else(|| rand::rng().next_u64());
|
let seed = fixed_seed.unwrap_or_else(|| rand::rng().next_u64());
|
||||||
let mut rng = rand_xoshiro::Xoshiro256PlusPlus::seed_from_u64(seed);
|
let mut rng = rand_xoshiro::Xoshiro256PlusPlus::seed_from_u64(seed);
|
||||||
|
|
||||||
let ev = (expression.average(&mut rng)? * 10.0).round() / 10.0;
|
let average = match expression.average(&mut rng) {
|
||||||
|
Ok(res) => res,
|
||||||
|
Err(err) => {
|
||||||
|
command
|
||||||
|
.create_followup(
|
||||||
|
&ctx.http,
|
||||||
|
CreateInteractionResponseFollowup::new().content(format!("{}", err)),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
return Err(err);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let ev = (average * 10.0).round() / 10.0;
|
||||||
|
|
||||||
let mut text_components = Vec::with_capacity((repeat + 2) as usize);
|
let mut text_components = Vec::with_capacity((repeat + 2) as usize);
|
||||||
if let Some(description) = description {
|
if let Some(description) = description {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue