I’m trying to update my discord bot from API v11 to API v12, and I’m having problems to send a direct message to all server users. It is not returning any error and I’m using the latest version from Discord API
This is the function:
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);
}
}
Could someone help me?
Advertisement
Answer
First of all, depending on the size of the server, DMing all members of a guild is in violation of Discord’s Terms of Service, and will commonly get your bot banned.
Second of all, message.guild.members.cache will only return the cached members of a guild, which is very rarely every member. Instead, use message.guild.fetch(), which will forcefully fetch every member of the guild through Discord’s API
Third of all, a lot of your code is very overcomplicated, for example, your use of map(member => member). Here’s how I would rewrite your function:
// 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);
});
});