You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

discord.js v14:如何批量断开语音频道内所有成员连接?

Discord.js v14 批量断开语音频道成员连接问题修复

原代码存在的问题:

  • 成员获取逻辑错误:用firstKey()只拿到了第一个成员的ID,没获取频道内所有成员;而且依赖guild.members.cache可能存在缓存不全,导致部分成员没被处理。
  • 调用断开方法的对象错误:遍历的是成员ID字符串,不是Member实例,字符串没有disconnect()方法,根本执行不了断开操作。
  • 频道类型检查顺序错了:先做了成员获取再判断频道类型,白做无用功。
  • API方法用错:Discord.js v14里,断开语音连接的正确方法是member.voice.disconnect(),不需要传频道ID参数。

修正后的完整代码:

try {
    const { guild } = interaction;
    const channel = interaction.options.getChannel('channel');

    // 先检查频道类型,不符合直接返回提示
    if (channel.type !== ChannelType.GuildVoice) {
        return await interaction.reply({
            embeds: [new EmbedBuilder()
                .setTitle("错误")
                .setDescription("所选频道不是语音频道。")
                .setColor("Red")],
            ephemeral: true,
        });
    }

    // 直接从语音频道的members集合获取所有在线成员,无需手动过滤
    const membersToDisconnect = channel.members;

    // 频道无成员时返回提示
    if (membersToDisconnect.size === 0) {
        return await interaction.reply({
            embeds: [new EmbedBuilder()
                .setTitle("提示")
                .setDescription("该语音频道目前没有成员。")
                .setColor("Yellow")],
            ephemeral: true,
        });
    }

    // 遍历每个成员执行断开操作
    membersToDisconnect.forEach(member => {
        member.voice.disconnect();
    });

    await interaction.reply({
        embeds: [new EmbedBuilder()
            .setTitle("成功")
            .setDescription("已成功断开该语音频道内所有成员的连接。")
            .setColor("Green")],
        ephemeral: true,
    });

} catch (error) {
    console.error(error);
    // 给用户返回错误提示
    await interaction.reply({
        embeds: [new EmbedBuilder()
            .setTitle("错误")
            .setDescription(`执行过程中出现错误:${error.message}`)
            .setColor("Red")],
        ephemeral: true,
    });
}

关键改动说明:

  1. 提前检查频道类型:避免做无效的成员获取操作,提升效率。
  2. 正确获取成员:用channel.members直接拿到频道内所有成员,不受缓存限制,确保不会漏处理。
  3. 修复断开方法:遍历Member实例调用member.voice.disconnect(),这是v14的标准用法。
  4. 增加边界判断:频道没成员时给用户提示,避免误报成功。
  5. 完善错误反馈:catch块里给用户返回具体错误信息,方便排查问题。

内容的提问来源于stack exchange,提问作者EssamanerPL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 20:38:26