javascript - 如何在 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);
}
}
有人可以帮助我吗?
解决方案
首先,根据服务器的大小,对公会的所有成员进行 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);
});
});