const { Client } = require('discord.js'); const options = require('../../options.json'); const Registry = require('./Registry.js') const EventHooker = require('./EventHooker.js'); const Dispatcher = require('./Dispatcher.js') const Resolver = require('./Resolver.js'); const Transporter = require('./Transporter.js'); const { Guild, User, Message } = require('../../structure/extensions/'); const { Command, Observer, Inhibitor, Setting } = require('../../structure/interfaces/'); class DiscordClient extends Client { constructor(options) { super(options.bot.clientOptions); this.registry = new Registry(this); this.eventHooker = new EventHooker(this); this.dispatcher = new Dispatcher(this); this.resolver = new Resolver(this); this.transporter = new Transporter(this); this._options = options; this._built = false; } async build() { if(this._built) return undefined; await super.login(this._options.bot.token); await this.registry.loadComponents('components/commands/', Command); await this.registry.loadComponents('components/observers', Observer); await this.dispatcher.dispatch(); this._built = true; } } module.exports = DiscordClient; const client = new DiscordClient(options); client.build();