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

Discord.js音乐机器人投票跳过系统问题求助:重复投票与达标未跳过故障

修复你的Discord.js投票跳过系统问题

让我帮你搞定这两个故障,咱们一步步来看问题出在哪,以及怎么修复:

问题1:同一用户能重复投票

你代码里已经判断了用户是否投过票,但判断后没有终止后续代码,导致提示完用户“已经投过票”之后,还是把用户ID塞进了voteskips数组里。只需要在提示语句后面加个return,就能阻止重复添加。

问题2:票数达标却无法跳过歌曲

这里有两个核心错误:

  • 计算所需票数时用了message.member.voice.channel.size——这个属性是语音频道的最大可容纳人数,不是当前在频道里的真实成员数,应该换成channel.members.size。
  • 跳过歌曲后没有重置voteskips数组,下次投票会累积之前的票数,导致逻辑混乱。

修复后的完整代码

else if (cmd === "skip") { 
    let queue = distube.getQueue(message.guild.id); 
    let channel = message.member.voice.channel; 

    // 检查用户是否在语音频道
    if (!channel) { 
        return message.channel.send("You need to Join Voice Channel");
    } 
    // 检查是否有播放队列
    if (!queue) { 
        return message.channel.send("Nothing Playing");
    } 
    // 检查是否还有下一首歌
    if (queue.songs.length < 1) { 
        return message.channel.send("There are no more tracks left. Add some");
    } 

    // 计算所需票数:当前语音频道成员数的一半向上取整
    const required = Math.ceil(channel.members.size / 2); 

    // 检查用户是否已投票
    if (voteskips.includes(message.member.id)) { 
        return message.channel.send("You already voted for skipping this song");
    } 

    // 添加投票
    voteskips.push(message.member.id); 
    message.channel.send(`**Votes : ${voteskips.length}/${channel.members.size}** ${required - voteskips.length} more votes needed to skip`);

    // 检查是否达到跳过条件
    if (voteskips.length >= required) { 
        // 执行跳过/停止操作
        if (queue.autoplay || queue.songs.length > 1) {
            distube.skip(message);
        } else {
            distube.stop(message);
        }
        
        // 发送跳过成功提示
        message.channel.send({
            embeds: [
                new Discord.MessageEmbed()
                    .setTitle("Skipped current track")
                    .setColor("LIGHT_GREY")
            ]
        });

        // 重置投票数组,为下一次投票做准备
        voteskips = [];
    } 
}

额外优化提示

  • 建议把voteskips改成按服务器存储的对象(比如const voteSkips = new Map();),这样多个服务器同时使用时不会互相干扰,避免跨服务器的投票数据混乱。
  • 可以在歌曲开始播放时自动重置对应服务器的投票数组,确保每次新歌曲的投票都是从零开始。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:04:07