diff --git a/src/bots/misc.rs b/src/bots/misc.rs deleted file mode 100644 index ecb1f61..0000000 --- a/src/bots/misc.rs +++ /dev/null @@ -1,42 +0,0 @@ -use arrayvec::ArrayString; -use meval::Context; -use serde_json::Value; -use std::collections::HashMap; -use std::fmt::Write; -use crate::bot::NormalCommand; -use async_trait::async_trait; - -pub struct Waifu; - -#[async_trait] -impl NormalCommand for Waifu { - async fn execute(&mut self, _last_msg: &HashMap, message: String) -> anyhow::Result { - let api_resp = reqwest::get(format!("https://api.waifu.pics/sfw/{}", message)) - .await? - .text() - .await?; - let api_resp = api_resp.trim(); - let value: Value = serde_json::from_str(api_resp)?; - let url = value["url"].as_str().unwrap_or("Invalid API Response.").to_string(); - Ok(url) - } -} - -pub fn mathbot( - author: String, - expr: Option<&str>, - last_evals: &mut HashMap, -) -> anyhow::Result> { - if let Some(expr) = expr { - let last_eval = last_evals.entry(author).or_insert(0.0); - let mut meval_ctx = Context::new(); - let mut result = ArrayString::new(); - let value = meval::eval_str_with_context(expr, meval_ctx.var("x", *last_eval))?; - *last_eval = value; - tracing::debug!("{} = {}", expr, value); - write!(result, "{} = {}", expr, value)?; - Ok(result) - } else { - Ok(ArrayString::from("No expression to evaluate")?) - } -} diff --git a/src/commands/eval.rs b/src/commands/eval.rs new file mode 100644 index 0000000..aaf8372 --- /dev/null +++ b/src/commands/eval.rs @@ -0,0 +1,24 @@ +use std::collections::HashMap; +use async_trait::async_trait; +use meval::Context; +use crate::bot::{Command, Message}; + +#[derive(Default)] +pub struct Eval { + last_eval: HashMap +} + +impl Command for Eval { + //noinspection RsNeedlessLifetimes + async fn execute<'a>(&mut self, msg: Message<'a>) -> anyhow::Result { + if let Some(expr) = msg.content { + let last_eval = self.last_eval.entry(author).or_insert(0.0); + let mut meval_ctx = Context::new(); + let value = meval::eval_str_with_context(expr, meval_ctx.var("x", *last_eval))?; + *last_eval = value; + Ok(format!("{} = {}", expr, value)) + } else { + Ok("No expression to evaluate".into()) + } + } +} diff --git a/src/commands/mod.rs b/src/commands/mod.rs index c768615..2b53c91 100644 --- a/src/commands/mod.rs +++ b/src/commands/mod.rs @@ -2,5 +2,6 @@ pub mod help; pub mod leek; pub mod waifu; pub mod sed; +pub mod eval; #[cfg(feature = "debug")] pub mod debug; \ No newline at end of file diff --git a/src/commands/sed.rs b/src/commands/sed.rs index 48412c7..9db6798 100644 --- a/src/commands/sed.rs +++ b/src/commands/sed.rs @@ -7,7 +7,7 @@ pub struct Sed; #[async_trait] impl Trigger for Sed { async fn execute<'a>(&mut self, msg: Message<'a>, matches: Captures<'a>) -> anyhow::Result { - let mut foreign_author; + let foreign_author; let author = if let Some(author) = matches.name("u").map(|m| m.as_str()) { foreign_author = true; author