有没有办法对此进行可能的冷却

时间:2018-07-18 06:15:48

标签: node.js discord

 dmGuild.members.forEach(member => {
        setTimeout(function(){
            if(member.id == bot.user.id) return;
            console.log(`DMing ${member.user.username}`);
            member.send(`${msg}  ${Math.floor(Math.random() * 9999)}`);
        }, 0);
    });

我需要帮助,以找到一种方法来限制每次使用此方法。例如:我使用命令,并且它们都立即发送消息,反正是否有发送速率限制为5000ms的dm的消息?

1 个答案:

答案 0 :(得分:0)

您可以从index回调中提取forEach,并在指定setTimeout延迟时使用它。

dmGuild.members.forEach((member, i) => {
    setTimeout(function(){
      if(member.id == bot.user.id) return;
      console.log(`DMing ${member.user.username}`);
      member.send(`${msg}  ${Math.floor(Math.random() * 9999)}`);
    }, (i+1) * 5000);
});

如果发生错误TimeoutOverflowWarning,请尝试使用递归逐步创建超时。

function fn(members, i = 0) {
  var member = members[i];

  if(member.id != bot.user.id) {
    console.log(`DMing ${member.user.username}`);
    member.send(`${msg}  ${Math.floor(Math.random() * 9999)}`);
  }

  if (i < members.length) {
    setTimeout(() => fn(members, i + 1), 5000);
  }
}

fn(dmGuild.members);