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
相关产品推荐
相关产品推荐

