我是新来的不和谐js和试图让我的机器人发送消息在一个特定的时间(通过时间戳设置)。
client.on('ready', function(e)
{
console.log(`Logged in as ${client.user.tag}!`)
let scheduledMessage = new cron.CronJob('0 10 15 * * *', () => {
const guild = client.guilds.cache.get('ID');
const channel = client.channels.cache.get('ID');
const exampleEmbed = new MessageEmbed()
.setColor('#ebdc05')
.setTitle('Another ten minutes')
channel.send({ embeds: [exampleEmbed] });
});
scheduledMessage.start()
});
我发现这个方法在15:10:00发送消息。我的问题是,我需要机器人每31小时发送一次消息。
我还发现了写"0 0 */31 * * *"而不是"0 10 15 * * *"的方法。这是有效的,每31个小时会发送一条消息,但我担心我的机器人有时会在31个小时之后发送消息,只是在时间之后加上秒和分钟,在某些时候它会在15:12:00或其他时间发送消息。
所以我想出了一个想法,只是做一个时间戳,并添加时间,总是有31个小时,然后让机器人在准确的时间戳发送消息。遗憾的是,我没有找到解决那个问题的办法。
这可能吗?
编辑:时间戳变体将是有用的,因为我可以很容易地减去和添加时间,并在嵌入中显示它。
您所使用的cron
库的意义在于您可以显式地告诉它分和秒——在您的示例中是0.
它不会累积错误。除非它非常坏,否则cron
库将执行"找出下一个时间戳";给你的东西。
cron字符串0 0 */31 * * *
表示"每31小时,时间看起来像XX:00:00"。所以它永远不会在15:12 -或15:10运行。你说过"在这一分一秒运行",所以它会。
免责声明:我试着阅读https://github.com/kelektiv/node-cron的代码来确认这一点,但它相当复杂。https://github.com/node-cron/node-cron/tree/master/src更容易读,它肯定是每秒钟检查一次时间戳。