discord.js - 搜索主命令文件夹的子文件夹的最简单方法?
问题描述
所以这是我的命令处理程序代码:
const fs = require('fs');
module.exports = (client, Discord) =>{
const command_files = fs.readdirSync('./commands/').filter(file => file.endsWith('.js'));
for(const file of command_files){
const command = require(`../commands/${file}`);
if(command.name){
client.commands.set(command.name, command);
} else {
continue;
}
}
}
递归搜索所有子文件夹的最简单方法是什么.commands/
,以便我可以使用.commands/fun
. 如果答案不包括使用包来限制依赖关系,我会更喜欢。
解决方案
这将取决于您想要的深度级别。
您可以扫描一次以上映射的任何目录,然后将结果展平,或创建递归函数(前者意义不大,因为您必须再次映射)。
注意:我要指出的一件事是硬编码文件路径很危险。这些与操作系统无关 - 请参阅path.sep
.
const fs = require('fs');
const path = require('path');
async function getFiles(directory) {
const files = await Promise.all(
fs.readdirSync(directory, { withFileTypes: true }).map(file => {
const res = path.resolve(directory, file.name);
return file.isDirectory() ? getFiles(res) : res;
})
);
return Array.prototype.concat(...files);
}
全面实施:
const fs = require('fs');
const path = require('path');
async function getFiles(directory) {
const files = await Promise.all(
fs.readdirSync(directory, { withFileTypes: true }).map(file => {
const res = path.resolve(directory, file.name);
return file.isDirectory() ? getFiles(res) : res;
})
);
return Array.prototype.concat(...files);
}
module.exports = async (client, Discord) => {
const command_files = await getFiles(path.resolve(__dirname, '..', 'commands'));
for (const file of command_files) {
const command = require(file);
if (command.name) {
client.commands.set(command.name, command);
} else {
continue;
}
}
};
推荐阅读
- c# - Anglesharp HTML 解析器似乎解析文档的深度不足以访问所需的元素
- python - 在模式之后捕获所有组
- python - keras.layers 与 keras.layers.core 是什么?
- c# - 为什么秒表没有正确计时我的方法?
- javascript - 自javascript中事件的纪元以来以毫秒为单位获取时间
- amazon-web-services - AWS ARN 的秘密是什么?
- reactjs - 构建 firebase/react 应用程序时的空白页
- python - Python:在两个日期时间列中匹配相同的日期格式
- ios - 我是否需要请求许可才能使用 OneSignal 进行跟踪?
- r - grid.table 自定义列标题背景颜色和字体大小