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

使用Distube开发音乐机器人:歌曲结束无声音且提示无Guild ID

解决DisTube机器人播放结束无声音+“没有Guild ID”报错问题

问题原因

报错“没有Guild ID”说明queue.guild可能未定义,或是你错误地直接通过Discord.js Voice模块管理连接(DisTube本身已封装了完整的语音连接逻辑)。播放结束后无声音也可能和错误的连接销毁时机、方式有关。

解决方案

1. 确认Queue对象结构,定位Guild属性

先在finish事件中打印Queue完整结构,确认guild的存在及路径:

distube.on('finish', async queue => {
  console.log(queue); // 查看Queue的结构细节,确认guild的位置
});

如果发现queue.guild不存在,可能是DisTube版本差异导致,新版中queue通常直接挂载guild属性,若路径不同(比如queue.guildId),则对应修改取值方式。

2. 使用DisTube内置方法管理语音连接

DisTube提供了专门的语音连接管理方法,无需手动调用@discordjs/voice的getVoiceConnection,避免状态冲突:

distube.on('finish', async queue => {
  if (queue.voice) {
    queue.voice.disconnect();
    console.log('已退出语音频道');
  } else {
    console.log('未找到有效语音连接');
  }
});

这种方式让DisTube自行处理连接销毁,既解决“没有Guild ID”的报错,也能避免因手动操作导致的播放状态异常。

3. 检查DisTube初始化配置

确保初始化DisTube时传入了正确配置的客户端实例,且开启了必要的Intents:

const { DisTube } = require('distube');
const Discord = require('discord.js');
const client = new Discord.Client({ 
  intents: [
    Discord.GatewayIntentBits.Guilds,
    Discord.GatewayIntentBits.GuildVoiceStates
  ] 
});
const distube = new DisTube(client, { /* 你的配置项 */ });

缺少GuildVoiceStates这类关键Intents,会导致无法正常获取Guild信息或维持语音连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:14:58