uberbot/src/commands/eval.rs

24 lines
736 B
Rust
Raw Normal View History

use crate::bot::{Command, Context};
2022-07-17 13:10:34 -05:00
use async_trait::async_trait;
use std::collections::HashMap;
2022-07-16 16:30:12 -05:00
#[derive(Default)]
pub struct Eval {
2022-07-17 13:10:34 -05:00
last_eval: HashMap<String, f64>,
2022-07-16 16:30:12 -05:00
}
2022-07-16 17:05:21 -05:00
#[async_trait]
2022-07-16 16:30:12 -05:00
impl Command for Eval {
async fn execute(&mut self, msg: Context<'_>) -> anyhow::Result<String> {
2022-07-16 16:30:12 -05:00
if let Some(expr) = msg.content {
2022-07-16 17:05:21 -05:00
let last_eval = self.last_eval.entry(msg.author.into()).or_insert(0.0);
let mut meval_ctx = meval::Context::new();
2022-07-16 16:30:12 -05:00
let value = meval::eval_str_with_context(expr, meval_ctx.var("x", *last_eval))?;
*last_eval = value;
2022-07-17 14:16:28 -05:00
Ok(format!("{} = {:.10}", expr, value))
2022-07-16 16:30:12 -05:00
} else {
Ok("No expression to evaluate".into())
}
}
}