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

Discord机器人无法播放本地音频文件求助

问题分析与解决方案

你遇到的问题是Discord机器人能正常加入语音频道,但没有声音输出且终端无报错信息。结合你的代码、配置截图,以下是可能的原因及对应解决方法:

1. 音频文件路径错误

你使用相对路径 join("..", "sounds", 'ratinho.ogg'),但相对路径的基准是当前Node.js进程的工作目录,而非命令文件所在目录,很可能导致机器人找不到音频文件。

修复方法:用 __dirname 构建绝对路径,确保路径精准:

const resource = createAudioResource(join(__dirname, "..", "sounds", 'ratinho.ogg'));

同时确认 sounds 文件夹确实存在于对应层级,且 ratinho.ogg 文件没有拼写错误。

2. 缺失音频处理核心依赖

@discordjs/voice 必须依赖Opus编码库和FFmpeg才能处理音频。从你的 package.json 截图来看,未安装这两个关键依赖,这是无声问题的常见诱因。

修复方法:执行命令安装依赖:

npm install @discordjs/opus ffmpeg-static
  • @discordjs/opus:提供Discord语音要求的Opus编码支持
  • ffmpeg-static:静态编译的FFmpeg工具,用于解码本地音频文件

3. 音频文件格式不兼容

Discord仅支持Opus编码的OGG文件,如果你的 ratinho.ogg 不是用Opus编码的,机器人无法正常播放。

验证与修复:

  • 用FFmpeg检查文件编码:
    ffmpeg -i ratinho.ogg
    
    查看输出中Audio行的编码类型,需显示为opus。
  • 若编码不符,重新转换格式:
    ffmpeg -i 原音频文件.mp3 -c:a libopus ratinho.ogg
    

4. 机器人缺少语音发言权限

即使机器人能加入频道,也可能未被授予语音频道发言权限。

检查步骤:

  • 进入目标语音频道的权限设置,确认机器人角色/账号开启了「发言」权限
  • 或给机器人角色添加服务器级的「在语音频道发言」权限

5. 代码逻辑遗漏与优化

未捕获资源创建错误

createAudioResource 可能因文件不存在、格式错误抛出异常,但你的代码未捕获,导致无声却无报错。

优化代码:

try {
    const audioFileName = audio.value === "Ratinho" ? "ratinho.ogg" : "gira_aspas.ogg";
    const resource = createAudioResource(join(__dirname, "..", "sounds", audioFileName));
    player.play(resource);
} catch (error) {
    console.error(`音频加载失败:${error.message}`);
    await interaction.reply(`播放失败:无法加载指定音频`);
    return;
}

音频选择逻辑失效

你的命令提供了两种音频选项,但代码硬编码了ratinho.ogg,导致选择「Gira aspas」时仍播放同一文件,需动态匹配文件名。

连接稳定后再播放

建议在语音连接就绪后再播放音频,避免因连接未稳定导致的无声:

voiceConnection.on('stateChange', (oldState, newState) => {
    if (newState.status === 'ready') {
        player.play(resource);
    }
});

内容的提问来源于stack exchange,提问作者Arthur de Araujo Neves

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:05:59