Node.js 它发送的成员数量是它的4倍

Node.js 它发送的成员数量是它的4倍,node.js,discord,discord.js,Node.js,Discord,Discord.js,所以我希望我的机器人在某个服务器上每10分钟向一个随机成员发送一个dm。当我的机器人从服务器向每个人发送一个dm时,它会发送一条完整的消息 但当我启动机器人时,它发送的成员数量是我的4倍 if (message.content.startsWith(botconfig.prefix + 'dmall')) { console.log("demo"); var list = message.guild.members.array(); sendMessage(list);

所以我希望我的机器人在某个服务器上每10分钟向一个随机成员发送一个dm。当我的机器人从服务器向每个人发送一个dm时,它会发送一条完整的消息

但当我启动机器人时,它发送的成员数量是我的4倍

if (message.content.startsWith(botconfig.prefix + 'dmall')) {
    console.log("demo");
    var list = message.guild.members.array();
    sendMessage(list);
  }
});


function sendMessage(list) {
  setTimeout(function () {
    for (i = 0; i < list.length; i++) {
      console.log(list.length);
    }

    console.log("I'm done, mate!");
    sendMessage(list);
  }, 10 * 1000);
}

这里有几件事不对。 For of:JavaScript变量作用域混乱

其次:setTimeout与setInterval不同

完全解决您的问题将是:

//使用discord API let users=['justme'] 函数getUsers{ //每次只显示一个新的 users=[…users,users.length.toString]; 返回用户 } 函数通知用户{ //立即检索所有用户 const currentUsers=getUsers //向每个用户发送消息 currentUsers.forEachuser=>sendMessageuser 控制台。记录“我已向每个人发送了一条消息” } 函数sendMessageuser{ console.log`向${user}发送消息` } //通过循环每个
setInterval=>notifyUsers,1000这部分代码:

for (i = 0; i < list.length; i++) {
  console.log(list.length);
}
列出时间长度。如果list.length是4,那么您将在控制台中看到

4
4
4
4
这就是指令代码要做的

我看不出有什么理由把它放在一个循环中,除非你想分别输出每个数组元素。因此,如果只想输出一次长度,请替换以下内容:

for (i = 0; i < list.length; i++) {
  console.log(list.length);
}
此外,如果要使用for循环,则必须声明所使用的所有变量。那么这个,

for (i = 0; i < list.length; i++) {

如果您在严格模式下运行代码(您应该这样做),上述for循环声明可能会导致一个错误,这是一件好事,因为您会立即看到编码错误并修复它。

为什么您声称消息发送了四次?是因为假设list->[4,4,4,4],数字4被记录了四次吗?Idk 4是我的服务器Idk中的成员数量,为什么它会发送4次sameIt,因为您正在list.length上运行for循环,它是4。这有意义吗?
for (i = 0; i < list.length; i++) {
  console.log(list.length);
}
console.log(list.length);
for (i = 0; i < list.length; i++) {
for (let i = 0; i < list.length; i++) {