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

Discord音乐Bot自动跳歌问题求助(附代码)

修复Discord音乐Bot自动跳过下一首歌曲的方案

检查队列元素的移除时机

核心问题大概率出在播放结束后的队列操作重复执行:

  • 若你在开始播放某首歌之前就已经从队列头部移除了该元素,播放结束后又再次执行移除操作,就会误删下一首歌曲。
  • 正确逻辑应该是:仅在开始播放歌曲时从队列中移除对应元素,播放结束的回调只需触发下一首的播放,不要再操作队列。

修正数组队列的索引处理

如果用数组实现队列,注意以下细节:

  • 播放时取数组第一个元素(queue[0]),播放启动后立刻用shift()移除该元素,而非等到播放结束后才移除。
  • 禁止在finish或类似播放结束的回调中再次调用shift()或删除索引0的元素,这会导致下一首被错误移除。

同步播放状态与队列实例

  • 确认添加播放列表到队列时,是按顺序插入元素,没有出现重复插入、索引错位的情况。
  • 确保show queue命令读取的队列和播放逻辑使用的是同一个实例,避免因多副本导致的状态不一致。

示例修正逻辑(伪代码)

// 播放下一首的核心函数
async function playNext() {
  if (queue.length === 0) {
    return voiceChannel.disconnect(); // 队列空则断开连接
  }
  const currentTrack = queue[0]; // 获取当前要播放的曲目
  player.play(currentTrack); // 启动播放
  queue.shift(); // 播放开始后移除已启动的曲目
}

// 播放结束事件回调
player.on('finish', () => {
  playNext(); // 直接触发下一首播放,无需再操作队列
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:20:25