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

Discord.js v13多音乐bot使用@discordjs/voice连接语音频道异常问题

问题根源

你遇到的多bot接入语音频道冲突是@discordjs/voice库的分组机制导致的:该库本身不自动关联你创建的Discord.Client实例,默认所有语音连接请求共享同一个全局分组,同服务器下的连接会被直接复用,不会区分请求来自哪个bot客户端。你打印的bot ID正确只能说明你上层触发逻辑的实例是对的,但语音库层面没有做实例隔离,所以会复用第一个bot的已存在连接。

修复方法

你只需要给joinVoiceChannel方法新增group参数,用每个bot的唯一ID作为分组值,就能实现不同bot的语音连接完全隔离。

另外需要确保你传入的adapterCreator参数是从当前调用请求对应的botClient实例中获取的对应服务器的适配器,不能混用其他bot的适配器,正确的获取方式为botClient.guilds.cache.get(guildID).voiceAdapterCreator。

修改后核心代码

function playMusic(bot, botClient, channel, guildID, adapterCreator) {
    try {
        console.log("BOT ID: " + bot.id);
        console.log("BOT USER ID: " + botClient.user.id);

        let vc = joinVoiceChannel({
            channelId: channel.id,
            guildId: guildID,
            adapterCreator: adapterCreator,
            group: botClient.user.id // 新增分组参数,用bot自身ID隔离连接
        });

        let resource = createAudioResource(createReadStream('resources/audio.mp3'), {
            inlineVolume : true
        });

        var player = createAudioPlayer();

        vc.subscribe(player);
        player.play(resource);

        return player;
    } catch(ex) {
        console.log(ex);

        return undefined;
    }
}

配套注意事项

后续你需要获取/销毁指定bot的语音连接时,也需要传入对应的group参数,否则会拿错其他bot的连接,示例:

// 获取指定bot在指定服务器的连接
const connection = getVoiceConnection(guildID, botClient.user.id);
// 销毁连接
connection?.destroy();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:36:04