用户从开始时间起每 X 小时创建一次计划

User created schedules every X hours from start time

我正在尝试在 discord.js 中编写一个 discord 机器人,它允许用户安排从一天中给定的开始时间 (0-23) 开始每 X(1-730) 小时发生一次付款。我想通过节点计划使用 cron 时间,但如果用户想要每 77 小时一次怎么办?

目前,我从命令保存到数据库的对象是:

const jobParams = { name: 'Job Title', currencyName: 'Credits', interval: '77', amount: '30', startHour: 5, member: '119351283999047682', role: null };

这里的最终目标是让系统在启动时安排作业,每 77 小时(每 3 天 5 小时)为提供的成员提供 30 "Credits",从下一个 0500 开始计数.支付交易准备就绪。

用户还需要能够按需取消作业。

您可以尝试使用 node-schdule https://www.npmjs.com/package/node-schedule

我个人没有使用过它,但你似乎可以安排一些回调在你的时间段后发生。

来自页面上的示例

var schedule = require('node-schedule');

var j = schedule.scheduleJob('42 * * * *', function(){
  console.log('The answer to life, the universe, and everything!');
});

然后您可以围绕调度程序构建一些 API 来创建/销毁调度。

您可以在 cron times 中使用步骤。 */77 类似于 "every 77th." 使用此概念,您可以每 77 小时通过 另一个 作业启动一个 cron 作业 运行 在下一个早上 5 点(只有一次)。

const { CronJob } = require('cron');
const foo = () => console.log('Hello, world!');

const job = new CronJob('0 */77 * * *', foo);
new CronJob('0 5 * * *', () => {
  job.start();
  this.stop();
}, null, true);

或者,您可以在每早上 5 点启动一次 cron 作业,并设置一个超时以在 77 小时内执行您的代码。

const job = new CronJob('0 5 * * *', () => setTimeout(foo, 1000 * 60 * 60 * 77), null, true);