【问题标题】:is there a way to put a possible cooldown on this有没有办法对此进行可能的冷却
【发布时间】:2018-12-25 22:43:16
【问题描述】:
 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);
    });

我需要帮助找到一种方法来限制每次使用它。例如:我使用该命令,它们都立即收到消息,是否可以在两者之间发送一个 5000 毫秒速率限制的 dm?

【问题讨论】:

    标签: node.js discord


    【解决方案1】:

    您可以从forEach 回调中获取index,并在指定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);
    

    【讨论】:

    • 嗨,当我尝试收到此错误时(节点:13940) TimeoutOverflowWarning:2.143324247614423e+22 不适合 32 位有符号整数。超时持续时间设置为 1。
    • 解决方案对您有帮助吗? @sai10r
    猜你喜欢
    • 2013-02-22
    • 2015-03-26
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    相关资源
    最近更新 更多