54 lines
1.5 KiB
JavaScript
54 lines
1.5 KiB
JavaScript
'use strict';
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const { Events } = require('discord.js');
|
|
const guildMemberAddEvent = require('../events/guildMemberAdd');
|
|
const logger = require('../utils/logger');
|
|
|
|
/**
|
|
* Loads all event files from src/events and registers them on the client.
|
|
* Each event file must export: { name, once?, execute }
|
|
*
|
|
* @param {import('discord.js').Client} client
|
|
*/
|
|
function loadEvents(client) {
|
|
const eventsPath = path.join(__dirname, '..', 'events');
|
|
const eventFiles = fs
|
|
.readdirSync(eventsPath)
|
|
.filter((file) => file.endsWith('.js'));
|
|
|
|
let loaded = 0;
|
|
|
|
for (const file of eventFiles) {
|
|
try {
|
|
const event = require(path.join(eventsPath, file));
|
|
|
|
if (!event.name || typeof event.execute !== 'function') {
|
|
logger.warn(
|
|
`[eventhandler] skipping ${file}: missing "name" or "execute"`,
|
|
);
|
|
continue;
|
|
}
|
|
|
|
if (event.once) {
|
|
client.once(event.name, (...args) => event.execute(client, ...args));
|
|
} else {
|
|
client.on(event.name, (...args) => event.execute(client, ...args));
|
|
}
|
|
|
|
logger.debug(`[eventhandler] registered event: ${event.name}`);
|
|
loaded++;
|
|
} catch (err) {
|
|
logger.error(`[eventhandler] failed to load ${file}:`, err);
|
|
}
|
|
}
|
|
|
|
client.on(Events.GuildMemberAdd, guildMemberAddEvent.bind(null, client));
|
|
loaded++;
|
|
|
|
logger.info(`[eventhandler] ${loaded} event(s) registered`);
|
|
}
|
|
|
|
module.exports = { loadEvents };
|