Как я могу отправить прямое сообщение Discord всем пользователям на сервере в API v12?

#javascript #node.js #arrays #foreach #discord.js

#javascript #node.js #массивы #foreach #discord.js

Вопрос:

Я пытаюсь обновить своего бота 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);
 }
}
  

Кто-нибудь может мне помочь?

Комментарии:

1. У вас есть какие-либо ошибки?

2. ошибка заключалась в следующем: один из участников, которому я пытался отправить сообщение, был ботом.

Ответ №1:

Прежде всего, в зависимости от размера сервера, удаление всех членов гильдии является нарушением Условий обслуживания Discord и обычно приводит к блокировке вашего бота.

Во-вторых, message.guild.members.cache вернет только кэшированных членов гильдии, что очень редко бывает каждым членом. Вместо этого используйте message.guild.fetch() , который принудительно извлекает каждого члена гильдии через API Discord

В-третьих, большая часть вашего кода очень сложна, например, использование 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);
  });
});
  

Комментарии:

1. Я знаю, что код был действительно слишком сложным, и мотив таков: я тестировал команду. последней функцией было message.guild.members.cache. forEach(members=… но не работает. Так что большое спасибо за ответ!

2. И да, мы согласны с требованиями discord