【问题标题】:Make my discord bot send message at specific hours让我的不和谐机器人在特定时间发送消息
【发布时间】:2019-07-11 03:54:33
【问题描述】:

我有一个问题我几乎解决了,但我现在卡住了。

我想让我的机器人在镜像时间(00h00、01h01、02h02...)在频道中发送一条消息,以与我的朋友们进行一场恶作剧,目前我做了这个: 在我的代码顶部我有var currentdate = new Date();

然后,稍后在我的源代码中:

if(currentdate.getMinutes() == currentdate.getHours())
{
    bot.channels.get('SPECIFICCHANNELID').send('Touchez votre nez :nose:');
}

这是一种工作,因为消息是由机器人在正确的通道中发送的,但是只有当机器人检测到消息时才会发送消息,所以如果在任何镜像时间内没有人发送消息,那么机器人会不发送任何东西。

如果在这个时间间隔内有多条消息,机器人也会多次发送消息,当然我希望它只发送1次消息,例如11:11:00。

感谢您的帮助,如果我的英语不好,请见谅!

【问题讨论】:

  • 您可以查看node-cron 包以在特定时间设置任务。否则你也可以使用setInterval
  • 您能提供更多代码吗?你在哪里运行这个 sn-p?如果您在 on('message') 侦听器中运行它,这可能会回答为什么如果未发送消息则不会调用您的代码。
  • @WillHoskings 是的,它实际上在 on('message') 里面,但是当我把它放在外面时,机器人什么也不做。

标签: javascript discord discord.js


【解决方案1】:

您必须使用 if 语句并且您没有指定小时或分钟,因此机器人无法发送消息。


 async function verifyTime() {
    var d = new Date();

    if (d.getHours() == d.getMinutes()) {

           //your code goes here
          
        } catch (error) {

            console.log(error);

        }
        setTimeout(() => {
            verifyTime();
        }, 61 * 1000);
    } else {
        setTimeout(() => {
            verifyTime();
        }, 1000);
    }
 }


client.login(token);

//⬇ remember to place this under your client.login

setTimeout(() => {
 verifyTime();
 }, 5000);

【讨论】:

    【解决方案2】:

    您需要每隔一段时间检查是否发送消息。

    setInterval 之类的东西会起作用。

    setInterval(function(){
        if(currentdate.getMinutes() == currentdate.getHours())
        {
            bot.channels.get('SPECIFICCHANNELID').send('Touchez votre nez :nose:');
        }
    }, MIN_INTERVAL)
    
    
    

    您希望MIN_INTERVAL 成为检查发送消息的最短时间(以毫秒为单位)。

    如果你想每分钟检查一次

    const MIN_INTERVAL = 1000 * 60

    【讨论】:

    • 你不是说setInterval吗?
    猜你喜欢
    • 2020-12-26
    • 2020-12-18
    • 2019-07-18
    • 2021-01-04
    • 2019-07-27
    • 2019-12-10
    • 2021-04-25
    • 2021-06-30
    • 2021-06-22
    相关资源
    最近更新 更多