脚本最后写了 hamibot.exit(); 但是最后还是没完成什么情况? 还有定时的如果脚本没运行完,下一次的定时到了,就不运行了吗?怎么设置定时一到强制运行脚本?

已存档
1246235347_mm93 · 6 个月前

回答

神秘机师
245
· 6 个月前

定时用循环的,每天,每周等等

0
0
BATU1579
415
· 6 个月前

Hi !

  1. hamibot.exit() 函数的主要功能是用来保证使用 hamibot.postMessage() 函数发送的数据可以在脚本结束前完成发送的(相当于等发送完成再结束脚本),具体你说的没完成是什么原因,还得看你的代码具体分析,如果可以请在下面补充上相关的代码。
  2. 如果脚本没有运行完成,就启动下一次执行,hamibot 会先主动终止脚本,然后再运行新的任务。
  3. 定时时间到了以后会自动终止,我不太理解你说的强制运行是什么意思,如果你希望总是只有一个脚本正在执行可以尝试使用下面的代码终止其他脚本:
let current_engine = engines.myEngine();

engines
  .all()
  .filter((engine) => engine !== current_engine)
  .forEach((engine) => {
    engine.forceStop();
  });

使用的时候把这段代码放在开头执行即可。不过如果你没有拿到要启动的脚本的代码,可以通过注册退出事件的监听器,并在退出时调用 API 来启动其他脚本:

const SCRIPT_ID = "";
const HAMIBOT_TOKEN = "";

events.on("exit", function () {
    // 获取机器人
    const { _id, name } = http.get(`https://api.hamibot.com/v1/robots/${hamibot.env.ROBOT_ID}`, {
        headers: {
            authorization: HAMIBOT_TOKEN,
        },
    }).body.json();

    // 远程调用脚本
    http.request(`https://api.hamibot.com/v1/scripts/${SCRIPT_ID}/run`, {
        method: "POST",
        contentType: "application/json",
        headers: {
            authorization: HAMIBOT_TOKEN,
        },
        body: JSON.stringify({
            robots: [{ _id: _id, name: name }],
        }),
    });
});

const current_engine = engines.myEngine();

engines
    .all()
    .filter((engine) => engine !== current_engine)
    .forEach((engine) => {
      engine.forceStop();
    });

才发现 http 模块的类型声明还有不少问题,我一会儿会去修改一下的 QAQ。

希望帮到你~

0
0