'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 };