首页 > 解决方案 > 如何在 API v12 上向服务器上的所有用户发送 Discord 直接消息?

问题描述

我正在尝试将我的 discord 机器人从 API v11 更新到 API v12,但在向所有服务器用户发送直接消息时遇到问题。它没有返回任何错误,我正在使用 Discord API 的最新版本

这是功能:

const members = message.guild.members.cache.map((member) => member);
for (let i = 0; i < message.guild.memberCount; i++) {
 console.log(typeof members[i].id);
 if (blacklist.includes(members[i].id) === true) {
  console.log('1 usuário da BlackList não recebeu a mensagem.');
 } else {
  client.users.cache
   .get(members[i].id)
   .send('oi pepe')
   .catch(console.error);
 }
}

有人可以帮助我吗?

标签: javascriptnode.jsarraysforeachdiscord.js

解决方案


首先,根据服务器的大小,对公会的所有成员进行 DM 操作违反了 Discord 的服务条款,并且通常会禁止您的机器人。

其次,message.guild.members.cache只会返回一个公会的缓存成员,这很少是每个成员。相反,使用message.guild.fetch(),它将通过 Discord 的 API 强制获取公会的每个成员

第三,你的很多代码都非常复杂,例如,你使用 map(member => member). 以下是我将如何重写您的函数:

// get all members in the guild
message.guild.members.fetch().then((members) => {
  // iterate a function through every member of the guild
  // with `Array.prototype.forEach()`
  members.forEach((member) => {
     if (blacklist.includes(member.id) || member.user.bot)
      return console.log("1 usuário da BlackList não recebeu a mensagem.");
     member.send("oi pepe").catch(console.error);
  });
});

推荐阅读