Discord.js 触发!image命令从gta文件夹发随机图片出现ENOENT错误如何解决
错误原因
fs.readdirSync('./gta/')返回的结果仅包含目标文件夹下的纯文件名,不携带上级目录路径。你直接将纯文件名传入发送接口时,程序会默认从代码运行的根目录/home/container/查找文件,自然匹配不到对应资源。
修复代码
只需要在选中文件名后拼接gta/目录前缀即可,完整修改后的代码如下:
client.on("message", message => { // 若需要响应!image命令,可将下方判断值修改为'!image' if(message.content === '!imagetest'){ const gtaFolderPath = './gta/' const files = fs.readdirSync(gtaFolderPath) const chosenFileName = files[Math.floor(Math.random() * files.length)] // 拼接完整文件路径 const fullFilePath = gtaFolderPath + chosenFileName console.log(fullFilePath) message.channel.send({ files: [fullFilePath] }) } })
兼容优化方案
如果需要适配不同操作系统的路径分隔符,或者保证绝对路径准确,建议用Node.js内置的path模块处理路径:
// 代码顶部先引入path模块 const path = require('path') client.on("message", message => { if(message.content === '!imagetest'){ const gtaFolderPath = path.join(__dirname, 'gta') const files = fs.readdirSync(gtaFolderPath) const chosenFileName = files[Math.floor(Math.random() * files.length)] const fullFilePath = path.join(gtaFolderPath, chosenFileName) console.log(fullFilePath) message.channel.send({ files: [fullFilePath] }) } })
该写法会自动生成你需要的/home/container/gta/[随机图片名称]格式的绝对路径,避免相对路径的定位误差。
内容的提问来源于stack exchange,提问作者Gijs
相关产品推荐
相关产品推荐

