48 lines
1.1 KiB
JavaScript
48 lines
1.1 KiB
JavaScript
const fs = require('node:fs');
|
|
const path = require('node:path');
|
|
|
|
const isJavaScriptFile = (file) => file.endsWith('.js');
|
|
|
|
const getEventFilePaths = (eventsPath) =>
|
|
fs
|
|
.readdirSync(eventsPath)
|
|
.filter(isJavaScriptFile)
|
|
.sort((left, right) => left.localeCompare(right))
|
|
.map((file) => path.join(eventsPath, file));
|
|
|
|
const loadEventModules = (eventsPath) => {
|
|
const eventFiles = getEventFilePaths(eventsPath);
|
|
const events = [];
|
|
const invalidEvents = [];
|
|
const loadErrors = [];
|
|
|
|
for (const filePath of eventFiles) {
|
|
let event;
|
|
try {
|
|
delete require.cache[require.resolve(filePath)];
|
|
event = require(filePath);
|
|
} catch (error) {
|
|
loadErrors.push({ filePath, error });
|
|
continue;
|
|
}
|
|
|
|
if (typeof event?.name !== 'string' || typeof event?.execute !== 'function') {
|
|
invalidEvents.push(filePath);
|
|
continue;
|
|
}
|
|
|
|
events.push({ filePath, event });
|
|
}
|
|
|
|
return {
|
|
events,
|
|
invalidEvents,
|
|
loadErrors,
|
|
};
|
|
};
|
|
|
|
module.exports = {
|
|
getEventFilePaths,
|
|
loadEventModules,
|
|
};
|