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

如何解决discord.js机器人!roll命令无法发送视频文件的问题?

解决Discord.js机器人无法发送视频文件的问题

核心问题修正

你的代码里message.reply的调用方式不符合Discord.js v14的规范,导致文件参数未被正确识别。同时需要排查路径、文件合规性等问题,具体解决步骤如下:

1. 修复message.reply的参数格式

Discord.js v14中,reply方法仅接受一个包含所有选项的对象,不能分开传递文本内容和文件选项。修改后的代码:

if(command === "roll") {
    const random = Math.floor(Math.random() * jets.length);
    message.reply({
        content: "Dés lancés :",
        files: [jets[random]]
    });
}

2. 确保文件路径绝对正确

相对路径可能因执行环境导致解析错误,建议使用绝对路径定位文件:
首先引入path模块,然后生成绝对路径:

const { Client, GatewayIntentBits } = require('discord.js');
const path = require('path'); // 新增引入path模块

const client = new Client({
    intents: [
        GatewayIntentBits.Guilds,
        GatewayIntentBits.GuildMessages,
        GatewayIntentBits.MessageContent,
    ],
});

const prefix = '!';
const jets = [
    path.resolve(__dirname, 'assets/01.mp4'), // 生成绝对路径
    path.resolve(__dirname, 'assets/02.mp4'),
    // 其他视频路径
];

__dirname会指向当前脚本所在的目录,确保assets文件夹和脚本在同一层级。

3. 检查文件的Discord合规性

  • 大小限制:普通服务器单文件最大8MB,Nitro用户上传上限为50MB,确保视频文件在允许范围内。
  • 格式支持:Discord仅支持MP4、MOV等常见视频格式,若格式不兼容会导致上传失败。

4. 添加错误捕获用于调试

在发送逻辑中加入错误捕获,方便定位具体问题:

if(command === "roll") {
    const random = Math.floor(Math.random() * jets.length);
    message.reply({
        content: "Dés lancés :",
        files: [jets[random]]
    }).catch(error => {
        console.error('发送视频失败:', error);
        message.reply('抱歉,发送视频时出现错误,请检查日志!');
    });
}

控制台会输出具体错误信息,比如路径不存在、文件过大等。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:05:16