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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:15:02