feat: expose command sender to code from in-game

This commit is contained in:
2025-02-21 23:34:25 -05:00
parent aadc9a919e
commit 3fc917efae
4 changed files with 35 additions and 25 deletions

View File

@@ -12,6 +12,7 @@ use mlua::{Lua, Table};
#[derive(Debug)]
#[allow(dead_code)]
pub enum Error {
CreateEnv(mlua::Error),
EvalChunk(mlua::Error),
ExecChunk(mlua::Error),
LoadChunk(mlua::Error),
@@ -32,7 +33,7 @@ pub fn register_functions(lua: &Lua, globals: &Table) -> mlua::Result<()> {
logging::register_functions(lua, globals)
}
pub fn reload(lua: &Lua) -> Result<(), Error> {
pub fn reload(lua: &Lua, sender: Option<String>) -> Result<(), Error> {
lua.load(
&std::fs::read_to_string(
lua.globals()
@@ -41,17 +42,29 @@ pub fn reload(lua: &Lua) -> Result<(), Error> {
)
.map_err(Error::ReadFile)?,
)
.set_environment(create_env(lua, sender)?)
.exec()
.map_err(Error::LoadChunk)
}
pub async fn eval(lua: &Lua, code: &str) -> Result<String, Error> {
pub async fn eval(lua: &Lua, code: &str, sender: Option<String>) -> Result<String, Error> {
lua.load(code)
.set_environment(create_env(lua, sender)?)
.eval_async::<String>()
.await
.map_err(Error::EvalChunk)
}
pub async fn exec(lua: &Lua, code: &str) -> Result<(), Error> {
lua.load(code).exec_async().await.map_err(Error::ExecChunk)
pub async fn exec(lua: &Lua, code: &str, sender: Option<String>) -> Result<(), Error> {
lua.load(code)
.set_environment(create_env(lua, sender)?)
.exec_async()
.await
.map_err(Error::ExecChunk)
}
fn create_env(lua: &Lua, sender: Option<String>) -> Result<Table, Error> {
let globals = lua.globals();
globals.set("sender", sender).map_err(Error::CreateEnv)?;
Ok(globals)
}