#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. Это работает для меня, кстати, и обычно это должно работать в целом.