koishi-plugin-eval-unsafe
v0.2.0
Published
Command to debug Koishi with JavaScript
Readme
koishi-plugin-eval-unsafe
执行 JavaScript 以调试 Koishi
用法介绍
eval-unsafe <JavaScript代码>该指令执行代码时没有任何沙箱措施,仅适用于管理员调试,默认需要 4 级权限。
代码执行的作用域中存在以下局部变量:
requirectxcmd = ctx.command("eval-unsafe")argvsessionevent = session.eventuser = session.userchannel = session.channelguild = session.guilduserId = session.userIdchannelId = session.channelIdguildId = session.guildIdselfId = session.selfIdapp = session.appbot = session.botsend = async x => void await session.send(x)exec = x => session.execute(x, true)inspect ≈ require("util").inspect(但对于Error对象会自动精简调用堆栈输出)
最后执行的一个语句若为表达式,则会输出其结果,若为Promise则会等待其完成后输出,但undefined不会输出。值为字符串会直接输出文本,值为 Koishi 的Element或Element组成的数组(也可包含字符串但不能全为字符串)时会作为消息元素输出,否则会使用inspect函数格式化后输出。若代码抛出异常或得到的Promise被 reject,也会将异常(reject 原因)值inspect后输出。
也可使用ctx.logger.info()输出内容到日志。
0.2.0 版本新增:代码若使用顶层await,插件会改用new (async () => {}).constructor(...)()方法执行,并自动在最后一个语句为表达式时将其改写为return语句。
已知问题:若
await后为圆括号,则可能会被解析成调用名为await的函数,导致不触发该机制。可以通过写两个await来绕过此问题(如await await (_ => doSomething())())。
