Discord.js v13.1.0报client.voice.createBroadcast is not a function如何解决
错误产生原因
你遇到的报错是Discord.js版本迭代导致的API变更问题:
- Discord.js从v13版本开始,将所有语音相关功能从核心库中剥离,移入独立的
@discordjs/voice包中,核心库不再内置client.voice.createBroadcast方法,也不再自带语音频道加入、音频播放相关的API - 同时v13版本废弃了原有的
message事件,替换为messageCreate事件,且强制要求声明 bot 运行需要的网关意图,未声明对应意图也会导致功能异常
修复步骤
- 首先安装语音功能依赖:
npm install @discordjs/voice - 调整代码逻辑,使用新的语音API实现功能,同时补全必要的网关意图声明
修正后的完整代码
const secret = require('./secret.json'); const { Client, Intents } = require('discord.js'); const discordTTS = require('discord-tts'); const { joinVoiceChannel, createAudioPlayer, createAudioResource, AudioPlayerStatus } = require('@discordjs/voice'); // 声明必要的网关意图 const client = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_VOICE_STATES, Intents.FLAGS.GUILD_MESSAGES ] }); client.login(secret.token); client.on('ready', () => { console.log('Online'); }); // 替换为v13支持的messageCreate事件 client.on('messageCreate', async msg => { if(msg.content === 'say test 123'){ // 校验发送者是否在语音频道 if (!msg.member.voice.channel) return msg.reply('你需要先加入一个语音频道'); // 加入语音频道 const connection = joinVoiceChannel({ channelId: msg.member.voice.channel.id, guildId: msg.guild.id, adapterCreator: msg.guild.voiceAdapterCreator }); // 创建音频播放器 const player = createAudioPlayer(); // 生成TTS音频流并转为播放资源 const audioResource = createAudioResource(discordTTS.getVoiceStream('test 123')); player.play(audioResource); connection.subscribe(player); // 播放完成后自动退出频道(可选) player.on(AudioPlayerStatus.Idle, () => { connection.destroy(); }); } });
内容的提问来源于stack exchange,提问作者Ajharul Haque Choudhury
相关产品推荐
相关产品推荐

