import eris from 'eris'; import { promises as fs } from 'fs'; import { Collection, Command, Util } from '.'; export default class Client extends eris.Client { public config: { token: string, prefix: string, guildID: string }; public commands: Collection; public util: Util; // eslint-disable-next-line @typescript-eslint/no-useless-constructor constructor(token: string, options?: eris.ClientOptions) { super(token, options); this.commands = new Collection(); } public loadPlugins() { this.util = new Util(this); } public async loadEvents() { const evtFiles = await fs.readdir(`${__dirname}/../events`); evtFiles.forEach((file) => { const eventName = file.split('.')[0]; if (file === 'index.js') return; // eslint-disable-next-line const event = new (require(`${__dirname}/../events/${file}`).default)(this); this.on(eventName, (...args) => event.run(...args)); this.util.signale.success(`Successfully loaded event: ${eventName}`); delete require.cache[require.resolve(`${__dirname}/../events/${file}`)]; }); } public async loadCommands() { const commandFiles = await fs.readdir(`${__dirname}/../commands`); commandFiles.forEach((file) => { // eslint-disable-next-line new-cap const command: Command = new (require(`${__dirname}/../commands/${file}`).default)(this); this.commands.add(command.name, command); this.util.signale.success(`Successfully loaded command: ${command.name}`); }); } }