一次是所有人,而不是每10分钟一个人

时间:2019-12-28 22:58:49

标签: node.js discord discord.js

我想每10分钟发送一次特定服务器中dm的服务器中的所有成员。当它发送所有成员时,它将在控制台中发送完整的消息。 但是它一次发送给每个人,有时在每台小服务器上每10分钟工作一次,但我认为在大服务器上它无法工作,而且我使用帐户而不是Bot也许是为什么?

  • 一次在DM中向所有人发送垃圾邮件
  • 它说:“此错误是由于在没有catch块的情况下抛出异步函数而引起的,或者是拒绝了.catch()无法处理的承诺。”
if (command === `${prefix}dmall`) {
   let myGuild = bot.guilds.get('YOU guild HERE')
     let list = myGuild.members.map(member => member.user.id)
    sendMessage(list, myGuild);
  }
});



function sendMessage(list, myGuild) {
  for (var i = 0; i < list.length; i++) {
    setTimeout((function(index){ 
      return function() {
                var member = myGuild.members.get(list[index])
                if(!member.user.bot && member) {
                    member.send('asdsadsa').catch(console.log('Member not allow to send him DM message'))
                }
        if(index === list.length-1) console.log('done')
      };
    })(i), 10000 * (i + 1))
  }
}

bot.login(botconfig.token);

1 个答案:

答案 0 :(得分:0)

  

“此错误是由于在没有catch块的情况下抛出异步函数而引起的,或者是由于拒绝了未经.catch()处理的诺言而引起的。”

那是因为它在某个地方需要.catch()

通常,在代码中,您为每个用户放置一个setTimeout

  • 可能有很多待处理的超时时间
  • 也许是10分钟之前在这里的用户不再在这里
  • 实际要做的是:现在发送第一个用户,在10分钟内发送第二个用户,在20分钟内发送第三个用户,然后在…上发送o。
  • 10000秒不是10分钟

最好在开始时使用一个setTimeout(如果需要循环,则使用setInterval),并在那时进行所有算法。