【问题标题】:Cron Job stops running for no reasonCron Job 无故停止运行
【发布时间】: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


【解决方案1】:

不知道为什么,但上面的评论解决了这个问题。

“您可以尝试将 cron.schedule() 替换为 setInterval()。这样您就知道这是否是 cron 的问题。– Skulaurun Mrusal”

【讨论】:

    猜你喜欢
    • 2015-06-23
    • 1970-01-01
    • 2014-06-03
    • 2016-03-29
    • 2019-06-01
    • 2016-01-10
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多