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

Discord音乐机器人播放30-50秒后自动停止问题排查

Discord音乐机器人播放中途停止问题解决

你的机器人播放歌曲30-50秒就停止,核心原因是队列的自动断开配置缺失,同时缺少必要的错误监听来排查潜在问题,以下是具体解决方案:

1. 配置队列自动断开规则

创建队列时添加自动断开相关配置,确保播放结束后在语音频道停留指定时间再退出,避免过早断开:

const queue = await player.createQueue(message.guild, {
    leaveOnEnd: false,          // 播放结束后不立即退出
    leaveOnEndCooldown: 300000, // 播放结束后停留5分钟(单位:毫秒)
    leaveOnEmpty: true,         // 语音频道为空时退出
    leaveOnEmptyCooldown: 300000, // 频道为空后等待5分钟再退出
    leaveOnStop: true,          // 手动停止播放时退出
    leaveOnStopCooldown: 300000 // 停止播放后等待5分钟退出
});

2. 优化队列获取逻辑

避免重复创建队列,优先获取已存在的队列,再创建新队列:

let queue = player.getQueue(message.guild);
if (!queue) {
    queue = await player.createQueue(message.guild, {
        // 填入上述配置项
    });
}

3. 添加队列事件监听

监听曲目播放错误、队列结束等事件,排查是否是播放出错导致中途停止:
在队列创建后添加以下代码:

// 监听曲目播放错误
queue.on('trackError', (queue, track, error) => {
    console.error(`播放曲目 ${track.title} 出错:`, error);
    message.channel.send(`播放曲目 ${track.title} 时出现错误,请重试。`);
});

// 监听队列结束事件
queue.on('queueEnd', (queue) => {
    message.channel.send('队列已播放完毕,将在5分钟后退出语音频道。');
});

4. 确认FFmpeg路径配置

确保discord-player能正确找到FFmpeg路径,若系统环境变量未配置FFmpeg,可在player初始化时指定路径(修改../../client/player文件):

const { Player } = require('discord-player');
const player = new Player(client, {
    ytdlOptions: {
        quality: 'highestaudio',
        highWaterMark: 1 << 25
    },
    ffmpegPath: '你的FFmpeg完整路径' // 例:Windows为'C:/ffmpeg/bin/ffmpeg.exe',Linux为'/usr/bin/ffmpeg'
});

修改后的完整play命令代码

const { QueryType } = require("discord-player")
const player = require("../../client/player")
const Discord = require('discord.js')

module.exports = {
    name: 'play',
    cooldown: 5,
    aliases: ['p'],
    description: "Plays a song",
    usage: "?p <song/vid-URL>",
    category: "Music",

    async execute(client, message, args) {
        const songTitle = args.join(" ")
        const nosongEmbed = new Discord.MessageEmbed()
            .setColor('#3d35cc')
            .setDescription(`‼️ - Please provide a song URL or song name!`)

        if (!songTitle) return message.reply({ embeds: [nosongEmbed] })

        const novcEmbed = new Discord.MessageEmbed()
            .setColor('#3d35cc')
            .setDescription(`‼️ - You have to be in a Voice Channel to use this command!`)

        if (!message.member.voice.channel) return message.reply({ embeds: [novcEmbed] })

        // 优先获取现有队列,不存在则创建
        let queue = player.getQueue(message.guild);
        if (!queue) {
            queue = await player.createQueue(message.guild, {
                leaveOnEnd: false,
                leaveOnEndCooldown: 300000,
                leaveOnEmpty: true,
                leaveOnEmptyCooldown: 300000,
                leaveOnStop: true,
                leaveOnStopCooldown: 300000
            });
        }

        // 添加事件监听
        queue.on('trackError', (queue, track, error) => {
            console.error(`播放曲目 ${track.title} 出错:`, error);
            message.channel.send(`播放曲目 ${track.title} 时出现错误,请重试。`);
        });

        queue.on('queueEnd', (queue) => {
            message.channel.send('队列已播放完毕,将在5分钟后退出语音频道。');
        });

        if (!queue.connection) await queue.connect(message.member.voice.channel)

        let url = songTitle

        // 搜索曲目
        const result = await player.search(url, {
            requestedBy: message.author,
            searchEngine: QueryType.AUTO
        })

        // 无结果则返回
        if (result.tracks.length === 0)
            return message.reply("No results")

        // 添加到队列
        const song = result.tracks[0]
        await queue.addTrack(song)
        const embed = new Discord.MessageEmbed()
            .setColor("AQUA")
            .setDescription(`**[${song.title}](${song.url})** has been added to the Queue`)
            .setThumbnail(song.thumbnail)
            .setFooter({ text: `Duration: ${song.duration}`})
        message.reply({ embeds: [embed] })
        
        // 未播放则开始播放
        if (!queue.playing) await queue.play()
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:32:52