Discord.js错误:EISDIR:对目录进行非法操作,读取



当我尝试执行此代码时,我会得到一个错误"错误:EISDIR:对目录进行非法操作,读取";。

第18行:第19列

const { Client, Intents, Collection } = require('discord.js')
const config = require('./config.json')
const fs = require('fs')
const bot = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES ] })
bot.commands = new Collection()
var cmdFiles = fs.readFileSync('./cmd').filter(f => f.endsWith(".js"))
for(const f in cmdFiles) {
const cmd = require(`./commands/${f}`)
bot.commands.set(cmd.help.name, cmd)
}
bot.once("ready", () => {
console.log('Bot is ready!')
})
bot.on("messageCreate", async message => {
if(message.author.bot) return;
var prefix = config.prefix
if(!message.content.startsWith(prefix)) return;
var array = message.content.split(" ");
var command = array[0];
const data = bot.commands.get(command.slice(prefix.length))
if(!data) return;
var args = array.slice(1)
try {
await data.run(bot, message, args)
} catch(e) {
await message.channel.send(e)
await console.log(e)
}
})
bot.login(config.token)

是的,所有配置都已定义。我试着搜索这个错误,但没有得到我需要的任何东西。

我想做的是从数组列表中的目录"cmd"加载每个文件,并在调用时运行命令。

更改此项:

var cmdFiles = fs.readFileSync('./cmd').filter(f => f.endsWith(".js"));

到此:

var cmdFiles = fs.readdirSync('./cmd').filter(f => f.endsWith(".js"));

正如您的问题所述,./cmd是一个目录,您不能用fs.readFileSync()列出目录中的文件。您可以使用fs.readdirSync()来执行此操作。

fs.readFileSync()尝试将目录作为文件打开并读取其内容。由于它不是一个文件,您会得到EISDIR错误。

最新更新