当我尝试执行这段代码时,我会得到一个错误。“错误: 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”中的每个文件,并在调用时运行命令。
发布于 2021-11-25 16:37:43
改变这一点:
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错误。
https://stackoverflow.com/questions/70114523
复制相似问题