65 lines
1.8 KiB
JavaScript
65 lines
1.8 KiB
JavaScript
let wpsInstance = null;
|
|
|
|
|
|
function InvokeFromXbot(param) {
|
|
// 1. 解析参数, 如果不是字符串, 则转换为字符串, 并用json解析, 解析失败直接retrun
|
|
if (typeof param !== 'string') {
|
|
param = JSON.stringify(param);
|
|
}
|
|
try {
|
|
param = JSON.parse(param);
|
|
} catch (e) {
|
|
return { msg: '参数解析失败', code: -1 };
|
|
}
|
|
|
|
// 2. 判断是否有method字段, 如果没有直接return
|
|
if (!param.method) {
|
|
return { msg: '参数错误', code: -2 };
|
|
}
|
|
|
|
// 3. 获取 method 字段对应的方法和 args 参数
|
|
let method = param.method;
|
|
|
|
let args = null;
|
|
|
|
try {
|
|
args = JSON.parse(param.args);
|
|
} catch (e) {
|
|
args = {};
|
|
}
|
|
|
|
|
|
console.log("method:", method);
|
|
console.log("args:", args);
|
|
// confsole.log("args", typeof args);
|
|
|
|
// 4. 判断 method 是否为 inject, 如果是则执行注入方法, 其他走默认方法执行调用函数
|
|
if (method === 'inject') {
|
|
let code = args.code;
|
|
console.log("start eval code");
|
|
console.log(code);
|
|
console.log(new Function(code)());
|
|
wpsInstance = new Function(code)(); // 执行并获取返回值
|
|
console.log("success eval code");
|
|
return { message: "inject ok", code: 0 }
|
|
}
|
|
|
|
// 5. 判断是否有 wpsInstance, 如果没有直接return
|
|
if (!wpsInstance) {
|
|
return { msg: '未注入', code: -3 };
|
|
}
|
|
|
|
// 6. 判断 wpsInstance 是否有 method 方法, 如果没有直接return
|
|
if (!wpsInstance[method]) {
|
|
return { msg: '方法不存在', code: -4 };
|
|
}
|
|
|
|
// 7. 执行 wpsInstance 的 method 方法, 并返回结果
|
|
try {
|
|
const result = wpsInstance[method](args ?? null);
|
|
return { msg: '执行成功', code: 0, data: result };
|
|
} catch (e) {
|
|
return { msg: '执行失败', code: -5 };
|
|
}
|
|
}
|