'use strict'; const { NodeVM } = require('vm2'); const util = require('util'); const crypto = require('crypto'); const timers = require('timers'); const style = require('../utils/style'); const vm = new NodeVM({ console: 'inherit', sandbox: { util, crypto, timers, }, }); const vmConsole = []; vm.on('console.log', (data, ...args) => { vmConsole.push(data); console.log(args); }); async function onCommand(args, context) { const script = args.join(' '); context.logger.info(`JavaScript ran by ${context.user.username}: ${script}`); try { const result = await vm.run(script, { sandbox: { console: { log: () => console.log('console loggin!'), }, }, }); context.sendMessage(`${style.green('')} ${result} | ${vmConsole.join(' ')}`, context.room.id); } catch (error) { context.sendMessage(`${style.red(`<${error.name}>`)} ${error.message}`, context.room.id); } } module.exports = { onCommand, commands: ['js', '>'], };