You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

discord.js:Bot就绪时加入语音频道失败问题求助

解决Discord.js Bot就绪时无法加入语音频道的问题

嘿,我来帮你排查这个问题!你的代码没法正常运行大概率是因为Discord.js版本的API差异,再加上几个容易忽略的权限或依赖问题,咱们一步步来解决:

1. 先确认你的Discord.js版本,API写法差异很大

你用的client.channels.get()Discord.js v11及更早版本的写法,但从v12开始,Channels变成了需要异步获取的Manager对象,而且v14之后连channel.join()都被移除了,得用专门的语音包。

如果是v12/v13版本:

改用client.channels.fetch()(异步方法,需要用async/await),同时加入错误捕获和类型检查:

client.on('ready', async () => {
  try {
    // 异步获取频道
    const channel = await client.channels.fetch('432462518380789771');
    
    // 先确认这是语音频道
    if (!channel.isVoice()) { // v12/v13用isVoice(),v14用isVoiceBased()
      console.error('指定的ID对应的不是语音频道!');
      return;
    }
    
    // 加入频道
    await channel.join();
    console.log('成功加入语音频道啦!');
  } catch (error) {
    // 打印错误信息方便排查
    console.error('加入频道时出错:', error);
  }
});

如果是v14版本:

v14把语音功能拆分到了@discordjs/voice包,需要先安装依赖:

npm install @discordjs/voice @discordjs/opus ffmpeg-static

然后用新的API写法:

const { joinVoiceChannel } = require('@discordjs/voice');

client.on('ready', async () => {
  try {
    const channel = await client.channels.fetch('432462518380789771');
    
    if (!channel.isVoiceBased()) {
      console.error('这不是语音频道哦!');
      return;
    }

    // 建立语音连接
    const connection = joinVoiceChannel({
      channelId: channel.id,
      guildId: channel.guild.id,
      adapterCreator: channel.guild.voiceAdapterCreator,
    });
    console.log('成功加入语音频道!');
  } catch (error) {
    console.error('加入失败:', error);
  }
});

2. 检查Bot的权限配置

就算代码对了,权限不够也会失败:

  • 确保Bot在目标服务器中,并且角色拥有**连接语音频道(Connect)的权限,建议同时开启说话(Speak)**权限;
  • 如果是私有语音频道,需要单独给Bot设置频道权限,允许它进入。

3. 额外调试小技巧

  • 在获取频道后加个判断,确认频道存在:
    if (!channel) {
      console.error('找不到指定ID的频道!');
      return;
    }
    
  • 查看控制台的错误信息,比如提示"Missing Permissions"就是权限问题,"Unknown Channel"可能是ID错误或Bot不在服务器里。

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

火山引擎 最新活动