【发布时间】:2021-07-20 05:49:48
【问题描述】:
下面的 cron 作业设置为每分钟更新一次计时器,并且根据日志,当有人加入服务器时才会停止。它不会抛出任何错误代码。机器人不会崩溃。我希望有人能告诉我为什么这样做。
这是 cron 作业:
cron.schedule('* * * * *', function () {
bot.channels.cache.filter((channel) => channel.name.endsWith('events')).forEach((channel) => {
channel.messages.fetch({
limit: 100
}).then(messages => {
messages.forEach(message => {
if (message.embeds.length > 0) {
const embed = message.embeds[0]
let messageID;
let event_date;
let event_time;
if (embed.color === 65280) {
messageID = message.id
event_date = message.embeds[0].fields[0].value
event_time = message.embeds[0].fields[1].value.slice(0, -4)
let now = Date.now()
const targetDate = new Date(`${event_date} ${event_time}:00`)
var difference = (targetDate - now) / 1000;
var days = Math.floor(difference / (3600 * 24));
var hours = Math.floor((difference - (days * (3600 * 24))) / 3600);
var minutes = Math.floor((difference - (days * (3600 * 24)) - (hours * 3600)) / 60);
let timeTill;
if (days > 0) {
timeTill = `${days} Days ${hours} Hours ${minutes} Min`
} else if (days === 0 && hours > 0) {
timeTill = `${hours} Hours ${minutes} Min`
} else if (days === 0 && hours === 0) {
timeTill = `${minutes} Min`
} else if (difference <= 0) {
timeTill = `Event Started - get with <@!${row.hostID}> to join up in-game.`
}
embed.fields[9] = {
name: 'Starts in:',
value: `${timeTill}`,
inline: false
}
message.edit(new Discord.MessageEmbed(embed)).catch(error => {
console.error(error);
})
console.log(`Event ${message.embeds[0].author.name} has been edited. New start time is ${timeTill}.`)
} else {
return
}
} else {
return
}
})
})
})
})
这是当有人加入时它停止的日志
[July 17 2021 01:38:01] Event 6 has been edited. New start time is 16 Hours 21 Min.
[July 17 2021 01:39:00] Event 6 has been edited. New start time is 16 Hours 20 Min.
[July 17 2021 01:40:00] Event 6 has been edited. New start time is 16 Hours 19 Min.
[July 17 2021 01:41:00] Event 6 has been edited. New start time is 16 Hours 18 Min.
[July 17 2021 01:41:14] The code tj25ttthFA was just used by Thx Meat Cat.
[July 17 2021 01:41:14] User Thx Meat Cat has joined the server! There are now 49 members in the community.
[July 17 2021 01:46:07] User Thx Meat Cat has left the server or was kicked!
[July 17 2021 01:46:07] There are now 48 members in the community.
[July 17 2021 01:49:22] The code tj25ttthFA was just used by SlayerZXY96.
再来一次
[July 17 2021 00:03:01] Event 6 has been edited. New start time is 17 Hours 56 Min.
[July 17 2021 00:04:01] Event 6 has been edited. New start time is 17 Hours 55 Min.
[July 17 2021 00:05:00] Event 6 has been edited. New start time is 17 Hours 54 Min.
[July 17 2021 00:06:00] Event 6 has been edited. New start time is 17 Hours 53 Min.
[July 17 2021 00:06:50] The code tj25ttthFA was just used by 『Tã€ã€Žiã€ã€Žnã€ã€Žyã€.
[July 17 2021 00:06:50] User 『Tã€ã€Žiã€ã€Žnã€ã€Žy〠has joined the server! There are now 48 members in the community.
[July 17 2021 00:07:53] User 『Tã€ã€Žiã€ã€Žnã€ã€Žy〠has left the server or was kicked!
[July 17 2021 00:07:53] There are now 47 members in the community.
[July 17 2021 00:14:03] The code tj25ttthFA was just used by ChAoS.
编辑
按照以下建议似乎可行,将测试 24 小时。
[July 19 2021 00:57:41] Event 8 has been edited. New start time is 65 Days 17 Ho urs 2 Min.
[July 19 2021 00:57:47] The code tj25ttthFA was just used by ChAoS.
[July 19 2021 00:57:47] User ChAoS has joined the server! There are now 73 membe rs in the community.
[July 19 2021 00:58:41] Event 8 has been edited. New start time is 65 Days 17 Ho urs 1 Min.
[July 19 2021 00:58:55] User ChAoS has left the server or was kicked!
[July 19 2021 00:58:55] There are now 72 members in the community.
[July 19 2021 00:59:41] Event 8 has been edited. New start time is 65 Days 17 Ho urs 0 Min.
[July 19 2021 00:59:46] The code tj25ttthFA was just used by ChAoS.
[July 19 2021 00:59:46] User ChAoS has joined the server! There are now 73 membe rs in the community.
[July 19 2021 01:00:41] Event 8 has been edited. New start time is 65 Days 16 Hours 59 Min.
【问题讨论】:
-
如果有很多频道符合过滤条件。一次可能有多个请求。也许是 Discord 速率限制?
-
在撰写此日志时,有 29 个频道满足过滤器要求,总共提取了 30 条消息,但只有 1 条消息通过了 if 语句,而且它可以运行几个小时而没有问题,但是当有人加入时,它就死了
-
您可以尝试将
cron.schedule()替换为setInterval()。这样你就知道这是否是 cron 的问题。 -
所以我这样做了,它似乎奏效了,不知道为什么它不能作为 cron 工作,但是是的,我会让它运行接下来的 24 小时看看它做了什么.我将日志添加到原始帖子中。
标签: cron discord.js