是否可以映射在语音通道中具有特定权限的人? Discord.js

Is it possile to map people that have certain permissions in voice channel? Discord.js

我是一名使用 JS 编写的 discord 机器人开发人员。 我目前正在尝试将具有 "CONNECT" 权限的用户映射到某些私人捐助者频道的语音频道上,以便捐助者可以看到他们将谁列入了白名单。 这是我的代码:

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() 方法计算传递给它的函数的每个值。通过这种方式,它根据 return 值 (truthy/falsy) 确定将哪个添加到新的 Collection。请注意,原来的 Collection 保持不变——一个新的 returned 代替。

// 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