aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/factoid/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/factoid/mod.rs')
-rw-r--r--src/plugins/factoid/mod.rs31
1 files changed, 17 insertions, 14 deletions
diff --git a/src/plugins/factoid/mod.rs b/src/plugins/factoid/mod.rs
index 4fcc7a0..5a484e6 100644
--- a/src/plugins/factoid/mod.rs
+++ b/src/plugins/factoid/mod.rs
@@ -210,20 +210,23 @@ impl<T: Database, C: Client> Factoid<T, C> {
.collect::<Vec<String>>();
let lua = unsafe { Lua::new_with_debug() };
- let globals = lua.globals();
-
- globals.set("factoid", code)?;
- globals.set("download", lua.create_function(download)?)?;
- globals.set("json_decode", lua.create_function(json_decode)?)?;
- globals.set("sleep", lua.create_function(sleep)?)?;
- globals.set("args", args)?;
- globals.set("input", command.tokens.join(" "))?;
- globals.set("user", command.source.clone())?;
- globals.set("channel", command.target.clone())?;
- globals.set("output", lua.create_table()?)?;
-
- lua.exec::<()>(LUA_SANDBOX, Some(name))?;
- let output: Vec<String> = globals.get::<_, Vec<String>>("output")?;
+ let output = lua.context(|ctx| {
+ let globals = ctx.globals();
+
+ globals.set("factoid", code)?;
+ globals.set("download", ctx.create_function(|ctx, url| download(&ctx, url))?)?;
+ globals.set("json_decode", ctx.create_function(|ctx, json| json_decode(&ctx, json))?)?;
+ globals.set("sleep", ctx.create_function(|ctx, ms| sleep(&ctx, ms))?)?;
+ globals.set("args", args)?;
+ globals.set("input", command.tokens.join(" "))?;
+ globals.set("user", command.source.clone())?;
+ globals.set("channel", command.target.clone())?;
+ globals.set("output", ctx.create_table()?)?;
+
+ ctx.load(LUA_SANDBOX).set_name(name)?.exec()?;
+
+ Ok(globals.get::<_, Vec<String>>("output")?)
+ })?;
Ok(output.join("|"))
}