feat: expose command sender to code from in-game
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
Reference in New Issue
Block a user