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的消息?
答案 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);