const { inspect } = require('util'); const { username } = require('os').userInfo(); let _storage = null; //eslint-disable-line const { Command } = require('../../../../interfaces/'); class Evaluate extends Command { constructor(client) { super(client, { name: 'evaluate', module: 'developer', aliases: [ 'eval', 'e' ], usage: '', restricted: true, arguments: [ { name: 'log', type: 'BOOLEAN', types: ['FLAG'], default: true }, { name: 'hide', type: 'BOOLEAN', types: ['FLAG'], default: true } ], showUsage: true, keepQuotes: true, guarded: true }); } async execute(message, { params, args }) { params = params.join(' '); const { guild, author, member } = message; //eslint-disable-line no-unused-vars try { let evaled = eval(params); //eslint-disable-line no-eval if(evaled instanceof Promise) await evaled; if(typeof evaled !== 'string') evaled = inspect(evaled); evaled = evaled .replace(new RegExp(this.client.token, 'gu'), '') .replace(new RegExp(username, 'gu'), ''); if(args.log) guild._debugLog(`[${message.author.tag}] Evaluation Success: ${evaled}`); if (evaled.length > 1850) { evaled = `${evaled.substring(0, 1850)}...`; } await message.respond( `Evaluation was successful.\`\`\`js\n${args.hide ? '' : evaled}\`\`\``, { emoji: 'success' } ); } catch(error) { let msg = `${error}${error.stack ? `\n${error.stack}` : ''}`; if(args.log) guild._debugLog(`[${message.author.tag}] Evaluation Fail: ${msg}`); if(msg.length > 2000) msg = `${msg.substring(0, 1900)}...`; await message.respond( `Evaluation failed.\`\`\`js\n${args.hide ? '' : msg}\`\`\``, { emoji: 'failure' } ); } } } module.exports = Evaluate;