Повторение члена ‘forEach’ с ролью

#foreach #collections #discord #discord.js

#предначертание #Коллекции #Discord #discord.js

Вопрос:

Я нашел несколько сообщений, которые, похоже, пытаются решить эту проблему, но ни одно из решений / попыток, которые я видел, не сработает для меня.

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

Это просто не будет работать, поэтому (для целей тестирования / отладки) В настоящее время у меня есть следующий код:

 const teamCaptainRole = await message.guild.roles.cache.find(role => role.name === "Team Captain");
console.log(teamCaptainRole.members)
await teamCaptainRole.members.forEach(member => {
  console.log(member)
});
 

Предыдущие «консольные журналы» «teamCaptainRole» показали мне, что я успешно выбираю роль. Консольный журнал «teamCaptainRole.members» возвращает:

 Collection [Map] {}
 

Я поискал в Google эти слова, но просто нахожусь в тупике — я не могу найти способ покопаться в этой Карте / Коллекции. У меня нет никакого предыдущего опыта работы с картами, но массивы и объекты я хорошо понимаю. Похоже, что ‘forEach’ никогда не запускается, но также не выдает никаких ошибок — просто ничего не происходит. Прямо сейчас я бы просто хотел иметь возможность видеть серию консольных журналов участников, у которых есть эта роль, чтобы я знал, что forEach работает.

Любая помощь?

Ответ №1:

 let role = message.guild.roles.cache.find(r => r.name === "Team Captain");
let giveRole = message.guild.roles.cache.find(r => r.name === "Enter Role Here");
let users = role.members.map(m => message.guild.member(m.user));
for(let user of users) {
   user.roles.add(giveRole);
}
 

role -> Роль, из которой мы будем искать пользователей.
giveRole -> Роль, которую мы дадим всем участникам, у которых она есть role .
users -> Пользователи, у которых есть role .

Вы могли бы использовать users.forEach() то же самое, но я использовал базовый цикл for. Мы сопоставляем тех пользователей, у которых есть роль, но как объект GuildMember, чтобы мы могли добавлять giveRole в цикл for.

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

1. Эй, спасибо, но я все еще не могу заставить это работать. Я установил для него значение: const teamCaptainRole = await message.guild.roles.cache.find(role => role.name === "Team Captain"); const teamCaptains = await teamCaptainRole.members.map(m => message.guild.member(m.user)); console.log(teamCaptains); и журнал консоли выдает мне: [] следовательно, forEach и обычный цикл ‘for’ ничего не дают.

2. Хорошо, тогда это работает! В вашей гильдии просто нет пользователей с такой ролью ^^

3. Как ни странно, я достаточно компетентен, чтобы проверять подобные вещи — роль, которую он выбирает (проверяется с помощью журнала консоли, это правильная роль), имеет 14 членов с этой ролью.

4. Хм, хорошо, каков результат user , если вы используете мой цикл for?

5. Это работает для меня, кстати, и обычно это должно работать в целом.