diff --git a/site/Cargo.toml b/site/Cargo.toml index e33bb27..1c94bcf 100644 --- a/site/Cargo.toml +++ b/site/Cargo.toml @@ -15,5 +15,6 @@ env_logger = "0" percent-encoding = "2" rustls = { version = "0.18", features = ["dangerous_configuration"] } structopt = "0.3" +dnd_dice_roller = "0.3" maj = { path = "..", features = ["server"], default-features = false } \ No newline at end of file diff --git a/site/src/index.gmi b/site/src/index.gmi deleted file mode 100644 index 3615a62..0000000 --- a/site/src/index.gmi +++ /dev/null @@ -1,21 +0,0 @@ -# maj -``` - __ - _____ _____ |__| - / \ \__ \ | | -| Y Y \ / __ \_ | | -|__|_| /(____ //\__| | - \/ \/ \______| -``` - -A gemini ecosystem for Rust - -=> gemini://gemini.circumlunar.space/ Gemini homepage - -## Homepage -The main homepage for maj is on tulpa.dev: -=> https://tulpa.dev/cadey/maj - -## Projects -=> /majc majc, an interactive curses client -=> /majd majd, a high-power gemini server with Lua capabilities diff --git a/site/src/main.rs b/site/src/main.rs index 868b326..7e4d257 100644 --- a/site/src/main.rs +++ b/site/src/main.rs @@ -1,4 +1,5 @@ use async_std::task; +use dnd_dice_roller::{dice::Dice, error::DiceError}; use maj::{ gemini::{Builder, Node}, route, seg, @@ -10,10 +11,13 @@ use rustls::{ internal::pemfile::{certs, rsa_private_keys}, AllowAnyAnonymousOrAuthenticatedClient, Certificate, PrivateKey, RootCertStore, ServerConfig, }; -use std::fs::File; -use std::io::{self, BufReader}; -use std::path::{Path, PathBuf}; -use std::sync::Arc; +use std::{ + fs::File, + io::{self, BufReader}, + path::{Path, PathBuf}, + str::FromStr, + sync::Arc, +}; use structopt::StructOpt; #[derive(StructOpt, Debug)] @@ -42,7 +46,7 @@ struct Options { #[structopt( long = "hostname", env = "SERVER_HOSTNAME", - default_value = "maj.kahless.cetacean.club" + default_value = "cetacean.club" )] hostname: String, } @@ -95,63 +99,53 @@ struct Handler { files: maj::server::files::Handler, } -async fn index() -> Result { - let msg = include_bytes!("index.gmi"); - Ok(Response::gemini(msg.to_vec())) -} +async fn dice(req: Request) -> Result { + fn dice_roll>(roll: T) -> Result { + let mut dice = Dice::from_str(&roll.into())?; -async fn majc() -> Result { - let msg = include_bytes!("majc.gmi"); - Ok(Response::gemini(msg.to_vec())) -} + if dice.number_of_dice_to_roll > 100 { + dice.number_of_dice_to_roll = 100; + } -async fn need_cert(req: Request) -> Result { - match req.certs { - None => Ok(Response::need_cert("test")), - Some(certs) => Ok(Response::render( - Builder::new() - .heading(1, "Cert test") - .text(format!("{:?}", certs)) - .build(), - )), + if dice.sides > 100 { + dice.sides = 100 + } + + if dice.sides == 0 { + dice.sides = 6; + } + + let res = dice.roll_dice(); + let reply = format!( + "{}{} = {}\n", + res.dice_results, + match dice.modifier { + Some(amt) => format!(" + {}", amt), + None => "".into(), + }, + res.final_result[0] + ); + Ok(reply) } -} -async fn input(req: Request) -> Result { match req.url.query() { - None => Ok(Response::input("test")), + None => Ok(Response::input( + "What do you want to roll? [n]dn[+n] [adv|dadv]", + )), Some(q) => Ok({ - use Node::*; - let result = vec![ - Heading { - level: 1, - body: "Input test".to_string(), - }, - Node::blank(), - Text("You gave me:".to_string()), - Preformatted(format!("{}", percent_decode_str(q).decode_utf8()?)), - ]; + let dice = percent_decode_str(q).decode_utf8()?; + let b = Builder::new() + .heading(1, "Dice Results") + .text("") + .text(format!("You rolled {} and you got:", dice)) + .text("") + .preformatted(format!("{}", dice_roll(dice)?)); - Response::render(result) + Response::render(b.build()) }), } } -async fn user(name: String) -> Result { - Ok(Response::render({ - use Node::*; - - vec![ - Heading { - level: 1, - body: format!("{}'s user page", name), - }, - Node::blank(), - Text(format!("this is a test page for {}", name)), - ] - })) -} - #[async_trait::async_trait] impl MajHandler for Handler { async fn handle(&self, req: Request) -> Result { @@ -167,11 +161,7 @@ impl MajHandler for Handler { } route!(req.url.path(), { - (/) => index().await; - (/"cert") => need_cert(req).await; - (/"input") => input(req).await; - (/"majc") => majc().await; - (/"~"/[name: String][/rest..]) => user(name).await; + (/"dice") => dice(req).await; }); self.files.handle(req).await diff --git a/site/src/majc.gmi b/site/src/majc.gmi deleted file mode 100644 index 80c3f74..0000000 --- a/site/src/majc.gmi +++ /dev/null @@ -1,24 +0,0 @@ -``` - __ - _____ _____ |__| ____ - / \ \__ \ | |_/ ___\ - | Y Y \ / __ \_ | |\ \___ - |__|_| /(____ //\__| | \___ > - \/ \/ \______| \/ -``` - -A curses client for Gemini! - -## Homepage -The main homepage for majc is on tulpa.dev: -=> https://tulpa.dev/cadey/maj - -## Important Keys -: opens the menubar -c: closes the active window -o: prompts to open a URL -h: shows history -l: shows active links in the page -q: quits majc -?: shows this screen -~: toggles the debug logging pane