2020-04-14 13:15:33 -04:00
|
|
|
import eris from 'eris';
|
|
|
|
import { promises as fs } from 'fs';
|
|
|
|
import { Collection, Command, Util } from '.';
|
|
|
|
|
|
|
|
export default class Client extends eris.Client {
|
2020-04-14 19:02:28 -04:00
|
|
|
public config: { token: string, prefix: string, guildID: string };
|
2020-04-14 13:15:33 -04:00
|
|
|
|
|
|
|
public commands: Collection<Command>;
|
|
|
|
|
|
|
|
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<Command>();
|
|
|
|
}
|
|
|
|
|
|
|
|
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));
|
2020-04-14 21:33:34 -04:00
|
|
|
this.util.signale.success(`Successfully loaded event: ${eventName}`);
|
2020-04-14 13:15:33 -04:00
|
|
|
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);
|
2020-04-14 21:33:34 -04:00
|
|
|
this.util.signale.success(`Successfully loaded command: ${command.name}`);
|
2020-04-14 13:15:33 -04:00
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|