import { Message } from 'eris'; import { Client } from '..'; import { Command } from '../class'; export default class Load extends Command { constructor(client: Client) { super(client); this.name = 'load'; this.description = '(Re)loads command, config or util'; this.aliases = ['reload']; this.permissions = { roles: ['662163685439045632'] }; this.enabled = true; } public async run(message: Message, args: string[]) { try { if (!args[0]) return this.client.commands.get('help').run(message, [this.name]); const allowed = ['config', 'util', 'command']; const type = args[0].toLowerCase(); if (!allowed.includes(type)) return this.error(message.channel, 'Invalid type provided to (re)load.'); const corepath = '/opt/CloudServices/dist'; if (type === 'config') { this.client.config = require(`${corepath}/config.json`); delete require.cache[`${corepath}/config.json`]; } else if (type === 'util') { const Util = require(`${corepath}/class/Util`).default; this.client.util = new Util(this.client); delete require.cache[`${corepath}/class/Util.js`]; } else { try { delete require.cache[`${corepath}/commands/index.js`]; delete require.cache[`${corepath}/commands/${args[1]}.js`]; Object.keys(require.cache).filter((path) => path.includes(`${args[1]}_`)).forEach((path) => delete require.cache[path]); const cmdIndex = require('.'); let cmd = cmdIndex[args[1]]; if (!cmd) return this.error(message.channel, 'Could not find file.'); cmd = require(`${corepath}/commands/${args[1]}`).default; this.client.commands.remove(args[1]); this.client.loadCommand(cmd); delete require.cache[`${corepath}/commands/index.js`]; delete require.cache[`${corepath}/commands/${args[1]}.js`]; Object.keys(require.cache).filter((path) => path.includes(`${args[1]}_`)).forEach((path) => delete require.cache[path]); } catch (error) { if (error.message.includes('Cannot find module')) return this.error(message.channel, 'Could not find file.'); throw error; } } return this.success(message.channel, `Reloaded ${type}.`); } catch (error) { return this.client.util.handleError(error, message, this); } } }