如何检查discord.js中特定语音频道中是否存在具有特定角色的成员

如何检查discord.js中特定语音频道中是否存在具有特定角色的成员,discord.js,Discord.js,我正在尝试查找是否有任何具有特定角色id的成员出现在特定的语音频道中。如果该特定语音频道中甚至有一个具有特定角色id的成员,则只有这些成员才能使用music bot的命令。 从我的研究中,我了解到,voiceStateUpdate可能会有所帮助,但问题是我不知道如何在代码中使用它(因为我是JavaScript新手)。以下是指向文档的链接: . 以下是我代码的一部分: client.on('voiceStateUpdate', (oldMember, newMember) => { })

我正在尝试查找是否有任何具有特定角色id的成员出现在特定的语音频道中。如果该特定语音频道中甚至有一个具有特定角色id的成员,则只有这些成员才能使用music bot的命令。 从我的研究中,我了解到,
voiceStateUpdate
可能会有所帮助,但问题是我不知道如何在代码中使用它(因为我是JavaScript新手)。以下是指向文档的链接: . 以下是我代码的一部分:

client.on('voiceStateUpdate', (oldMember, newMember) => {
  });
client.on('message', async message => {
    if (message.author.bot) return
    if (!message.content.startsWith(prefix)) return

    let messageArray = message.content.split(" ");
    let cmd = messageArray[0];
    const args = message.content.substring(prefix.length).split(' ');
    const searchString = args.slice(1).join(' ')
    const url = args[1] ? args[1].replace(/<(._)>/g, '$1') : ''
    const serverQueue = queue.get(message.guild.id)
   
 if() {        //the conditional statement I am trying to put here but I don't know how to do it properly
    if (message.content.startsWith(`${prefix}play`)) {
        const voiceChannel = message.member.voice.channel
        if (!voiceChannel) return message.channel.send("You need to be in a voice channel to play music")
    .......
client.on('voiceStateUpdate',(旧成员,新成员)=>{
});
client.on('message',异步消息=>{
if(message.author.bot)返回
如果(!message.content.startsWith(前缀))返回
让messageArray=message.content.split(“”);
设cmd=messageArray[0];
const args=message.content.substring(前缀.length).split(“”);
const searchString=args.slice(1).join(“”)
常量url=args[1]?args[1]。替换(//g,$1'):“”
const serverQueue=queue.get(message.guild.id)
if(){//是我试图放在这里的条件语句,但我不知道如何正确地执行它
if(message.content.startsWith(`${prefix}play`){
const voiceChannel=message.member.voice.channel
if(!voiceChannel)返回message.channel.send(“您需要在语音频道播放音乐”)
.......
因此,主要的问题是,我不知道如何在if语句中准确地编写它们,以使代码正常工作。

client.on(“message”,async message=>{
//正在检查邮件作者是否是机器人。
if(message.author.bot)返回false;
//检查消息是否在DM通道中发送。
如果(!message.guild)返回false;
//可以使用该命令的角色。
const Role=message.guild.roles.cache.get(“RoleID”);
//可以使用命令的语音通道。
const VoiceChannel=message.guild.channels.cache.get(“VoiceChannelID”);
if(message.content.toLowerCase()=“测试”){
//检查协会成员是否在语音频道中。
如果(!message.member.voice.channel)返回message.reply(“您需要使用语音频道”);
//检查GuildMember是否位于所需的语音频道中。
如果(message.member.voice.channelID!==VoiceChannel.id)返回message.reply(“您在错误的VoiceChannel.”);
//检查GuildMember是否具有所需的角色。
如果(!message.member.roles.cache.has(Role.id))返回message.reply(“不允许您执行此命令”);
//执行你的命令。
返回消息。回复(“执行命令”);
};
});

因此,据我所知,您希望仅当角色为“示例角色”的用户在频道“示例频道”中时才执行该命令

为此,您需要角色id和频道id

client.on(“消息”,异步消息=>{
if(message.author.bot)返回;
如果(!(message.guild))返回;
var roleID='roleID';
var vc=message.guild.channels.cache.get(“VoiceChannelID”);
if(message.content.toLowerCase()=“测试”){
canUse=false;
vc.members.forEach((成员)=>{
if(member.roles.has(roleID)){
canUse=True;
}
})
如果(!(canUse)){//语音频道中没有人指定角色。
返回;
}
log(“语音频道的成员具有指定的角色”)
}
});

感谢您的回复。我希望
如果(!message.member.roles.cache.has(Role.id))返回message.reply(“不允许您执行此命令”)
仅当至少有一个具有该角色的成员在该语音频道中时才执行。如果具有特定角色的成员不在该语音频道中,则任何成员都可以使用该命令。您可以循环查看
语音频道的成员,并检查是否有任何成员具有该角色。