#javascript #loops #discord.js
#javascript #циклы #discord.js
Вопрос:
Я пытаюсь создать бота в discord.js это добавляет роль каждому пользователю. Я сталкиваюсь с проблемой всякий раз, когда пытаюсь утешить.регистрируйте индекс, это дает мне какое-то странное большое число вместо индекса.
async execute(message) {
const role = message.guild.roles.cache.find(r => r.name == 'Founder');
if (!role) return message.channel.send(`**${message.author.username}**, role not found`);
message.guild.members.cache.filter(m => !m.user.bot).forEach((member, i) => {
member.roles.add(role);
console.log(`Role was added to ${member.displayName}`);
console.log(`${i} users completed`);
});
message.channel.send(`**${message.author.username}**, role **${role.name}** was added to all members`);
}
Вот как это выглядит в консоли.
Ответ №1:
Если вы посмотрите на сигнатуру типа cache
, вы поймете, что это «Коллекция», которая расширяется Map
. Следовательно, forEach
метод имеет другую подпись, а именно: forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void;
. Большие числа, которые вы получаете, являются ключами карты или идентификаторами discord.
Вы можете преобразовать его в массив, сначала используя .values()
, а затем .forEach()
Ответ №2:
На самом деле, вы можете сохранить их все, используя let
идентификатор JS как таковой:
async execute(message) {
const role = message.guild.roles.cache.find(r => r.name == 'Founder');
if (!role) return message.channel.send(`**${message.author.username}**, role not found`);
let amount = 0;
message.guild.members.cache.filter(m => !m.user.bot).forEach(member => {
member.roles.add(role);
console.log(`Role was added to ${member.displayName}`);
amount = amount 1;
console.log(`${amount} users completed`);
});
message.channel.send(`**${message.author.username}**, role **${role.name}** was added to all members`);
}