如何断开用户与 discord.js 中语音通道的连接?

How do I disconnect a user from a voice channel in discord.js?

不知道怎么让用户离开语音频道

我正在尝试做一个验证,除了离开语音通道部分外,我已经完成了所有设置。

bot.on('voiceStateUpdate', (oldMember, newMember) => {
  let newUserChannel = newMember.voiceChannel
  let oldUserChannel = oldMember.voiceChannel
  var channel = bot.channels.get('614299678300831744');


  if(oldUserChannel === undefined && newUserChannel !== 615306755420717143) {
    channel.send(newMember + ' has been verified.');
    let role = newMember.guild.roles.find(role => role.name === "Verified");
    newMember.addRole(role);
    let verifyEmbed = new Discord.RichEmbed()
    .setAuthor("Verificaiton")
    .setDescription("You have been verified")
    .setFooter(newMember.guild.name)
    .setColor("#98AFC7")
    newMember.sendMessage(verifyEmbed);
    newMember.disconnect();
  }
});

我没有收到任何错误,但它应该会断开我与语音通道的连接,但不能吗?

问题是 .disconnect() 不是 GuildMember class 的方法。 GuildMember 上可以使用的所有方法都可以在 here 中找到。

.disconnect()只是一个存在于voiceChannel上的方法,用于"Disconnect the voice connection, causing a disconnect and closing event to be emitted."1

据我所知,无法从语音频道中强行删除用户。

而不是 newMember.disconnect(); 使用 newMember.setVoiceChannel(null);

这是相关的documentation

我在我的机器人上使用它,它工作正常。

您可以让机器人创建一个新的语音通道,将用户移动到新创建的语音通道,删除该通道,从而断开用户连接

let randomnumber = Math.floor(Math.random() * 9000 + 1000)

await receivedMessage.guild.createChannel(`voice-kick-${randomnumber}`, "voice")
await vcUser.setVoiceChannel(receivedMessage.guild.channels.find(r => r.name === `voice-kick-${randomnumber}`))
receivedMessage.guild.channels.find(r => r.name === `voice-${randomnumber}`).delete()

正在添加 randomnumber 命令以在 VC 中创建一个随机数,这样就不会有任何 VC 具有相同的名称!

不确定这是否仍然相关,但自更新以来您现在可以执行以下操作。

newMember.member.voice.disconnect();

参考VoiceStateclass方法disconnect