如何解决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
相关产品推荐
相关产品推荐

