Я разработчик бота для дискорда, пишу на JS. В настоящее время я пытаюсь сопоставить пользователей, у которых есть разрешение «ПОДКЛЮЧИТЬСЯ» на голосовом канале ina, для некоторых частных каналов жертвователей, чтобы жертвователи могли видеть, кого они внесли в белый список. Вот мой код:
if (!message.member.voiceChannel) {
let novoice = new Discord.RichEmbed()
.setDescription("Please join your voice chat to use this command.")
.setColor(config.orange)
message.delete()
message.channel.send({ embed: novoice }).then(msg => msg.delete(10000));
return
} else if (message.member.voiceChannel.name.includes('?')) {
let list = new Discord.RichEmbed()
.setAuthor(`? List of whitelisted members in ${message.member.voiceChannel}`)
.setDescription(message.member.voiceChannel.members.filter(members => members.hasPermission('CONNECT') === true).join(" "))
message.channel.send({ embed: list });
return
}
Пожалуйста, дайте мне знать, если у вас есть идея или совет, как решить эту проблему. Спасибо за любую помощь заранее!





Вы можете сделать это, перебирая членов гильдии и добавляя в свой список тех, у кого есть разрешение на подключение к каналу.
let whitelisted = [];
let members = message.guild.members.array();
for (var i = 0; i < members.length; i++) {
if (message.member.voiceChannel.permissionsFor(members[i]).has('CONNECT')) whitelisted.push(`<@${members[i].id}>`);
}
let list = whitelisted.join(', '); // mentions of each user
Обновлено:
Оглядываясь назад на свой собственный ответ, я, честно говоря, не стал бы голосовать за него. Вот решение, которое я хотел бы предоставить в первый раз.
Вы также можете использовать метод Collection#filter(), который оценивает переданную ему функцию с каждым значением. Таким образом, он определяет, что добавить в новую коллекцию, на основе возвращаемого значения (правда/ложь). Обратите внимание, что исходная коллекция остается неизменной — вместо нее возвращается новая.
// discord.js v11
const whitelisted = message.guild.members.filter(
(m) => member.voiceChannel.permissionsFor(m).has('CONNECT')
);
// discord.js v12
const whitelisted = message.guild.members.cache.filter(
(m) => member.voice.channel.permissionsFor(m).has('CONNECT')
);
whitelisted.array().join(', '); // list of mentions
Большое спасибо! У меня, честно говоря, не было идей :P