rashi-discord-bot-lib
Version:
🚀 Powerful Discord bot framework with built-in database, event handling, and utilities
71 lines • 2.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventLoader = void 0;
const FileLoader_1 = require("../utils/FileLoader");
const Logger_1 = require("../utils/Logger");
class EventLoader {
logger;
fileLoader;
constructor(logger) {
this.logger = logger || new Logger_1.Logger();
this.fileLoader = new FileLoader_1.FileLoader();
}
async loadEvents(client, eventsPath, recursive = true, blacklist = []) {
try {
const result = await this.fileLoader.loadFiles(eventsPath, {
extensions: ['.js', '.ts'],
recursive,
blacklist,
requireDefault: true
});
let registeredCount = 0;
for (const event of result.files) {
if (this.validateEvent(event)) {
this.registerEvent(client, event);
registeredCount++;
}
}
if (result.errors.length > 0) {
this.logger.warn(`Failed to load ${result.errors.length} event files`);
}
return registeredCount;
}
catch (error) {
this.logger.error('Failed to load events:', error);
return 0;
}
}
validateEvent(event) {
if (!event || typeof event !== 'object') {
this.logger.warn('Invalid event: not an object');
return false;
}
if (!event.name || typeof event.name !== 'string') {
this.logger.warn('Invalid event: missing or invalid name');
return false;
}
if (!event.execute || typeof event.execute !== 'function') {
this.logger.warn(`Invalid event ${event.name}: missing or invalid execute function`);
return false;
}
return true;
}
registerEvent(client, event) {
if (event.once) {
client.once(event.name, (...args) => this.executeEvent(event, args));
}
else {
client.on(event.name, (...args) => this.executeEvent(event, args));
}
}
async executeEvent(event, args) {
try {
await event.execute(...args);
}
catch (error) {
this.logger.error(`Error executing event ${event.name}:`, error);
}
}
}
exports.EventLoader = EventLoader;
//# sourceMappingURL=EventLoader.js.map