如何设置Discord机器人加入语音频道后自动self-deafen,解决方法调用报错
报错原因
- 方法调用对象错误:
setSelfDeaf、setSelfMute这类修改自身语音状态的方法,不属于语音频道(VoiceChannel)实例,而是属于加入频道后返回的语音连接(VoiceConnection)实例,直接对频道对象调用不存在的方法,自然会抛出类型错误。 - 异步逻辑未等待:
voicechannel.join()是异步操作,没有使用await等待加入完成就尝试调用后续方法,此时连接还未建立,也会引发异常。 - 方法名拼写错误:正确的方法名是驼峰格式
setSelfDeaf,你写的setSelfdeaf首字母d未大写,就算调用对象正确也会报错。
修复代码
根据你使用的discord.js版本选择对应方案:
适用discord.js v12版本
client.on('ready', async () => { console.log(`Logged in ${client.user.tag}`) const voicechannel = client.channels.cache.get("869738167576723506"); // 等待加入完成拿到连接实例 const connection = await voicechannel.join(); // 修改自身状态为deaf connection.voice.setSelfDeaf(true); })
适用discord.js v13及以上版本
v13之后语音功能已经拆分为独立的@discordjs/voice包,需要先安装依赖:npm install @discordjs/voice
代码示例:
const { joinVoiceChannel } = require('@discordjs/voice'); client.on('ready', async () => { console.log(`Logged in ${client.user.tag}`) const voicechannel = client.channels.cache.get("869738167576723506"); // 加入频道时直接配置selfDeaf状态 joinVoiceChannel({ channelId: voicechannel.id, guildId: voicechannel.guild.id, adapterCreator: voicechannel.guild.voiceAdapterCreator, selfDeaf: true }); })
内容的提问来源于stack exchange,提问作者ihl
相关产品推荐
相关产品推荐

