2020-04-15 15:13:29 -04:00
import axios from 'axios' ;
import { inspect } from 'util' ;
import { Message } from 'eris' ;
import { Client , Command } from '../class' ;
export default class Eval extends Command {
constructor ( client : Client ) {
super ( client ) ;
this . name = 'eval' ;
this . description = 'Evaluates native JS code' ;
this . aliases = [ 'e' ] ;
this . permissions = 4 ;
this . enabled = true ;
this . guildOnly = false ;
}
public async run ( message : Message , args : string [ ] ) {
try {
const evalMessage = message . content . slice ( this . client . config . prefix . length ) . trim ( ) . split ( ' ' ) . slice ( 1 ) ;
let evalString = evalMessage . join ( ' ' ) . trim ( ) ;
let evaled : any ;
let depth = 0 ;
if ( args [ 0 ] && args [ 0 ] . startsWith ( '-d' ) ) {
depth = Number ( args [ 0 ] . replace ( '-d' , '' ) ) ;
if ( ! depth || depth < 0 ) depth = 0 ;
const index = evalMessage . findIndex ( ( v ) = > v . startsWith ( '-d' ) ) + 1 ;
evalString = evalMessage . slice ( index ) . join ( ' ' ) . trim ( ) ;
}
if ( args [ 0 ] === '-a' ) {
const index = evalMessage . findIndex ( ( v ) = > v === '-a' ) + 1 ;
evalString = ` (async () => { ${ evalMessage . slice ( index ) . join ( ' ' ) . trim ( ) } })() ` ;
}
try {
// eslint-disable-next-line no-eval
evaled = await eval ( evalString ) ;
if ( typeof evaled !== 'string' ) {
evaled = inspect ( evaled , { depth } ) ;
}
if ( evaled === undefined ) {
evaled = 'undefined' ;
}
} catch ( error ) {
evaled = error . stack ;
}
evaled = evaled . replace ( new RegExp ( this . client . config . token , 'gi' ) , 'juul' ) ;
// evaled = evaled.replace(new RegExp(this.client.config.emailPass, 'gi'), 'juul');
// evaled = evaled.replace(new RegExp(this.client.config.cloudflare, 'gi'), 'juul');
const display = this . client . util . splitString ( evaled , 1975 ) ;
if ( display [ 5 ] ) {
try {
const { data } = await axios . post ( 'https://snippets.cloud.libraryofcode.org/documents' , display . join ( '' ) ) ;
return message . channel . createMessage ( ` ${ this . client . util . emojis . SUCCESS } Your evaluation evaled can be found on https://snippets.cloud.libraryofcode.org/ ${ data . key } ` ) ;
} catch ( error ) {
return message . channel . createMessage ( ` ${ this . client . util . emojis . ERROR } ${ error } ` ) ;
}
}
return display . forEach ( ( m ) = > message . channel . createMessage ( ` \` \` \` js \ n ${ m } \ n \` \` \` ` ) ) ;
} catch ( err ) {
2020-04-15 15:33:46 -04:00
return this . client . util . handleError ( err , message , this , false ) ;
2020-04-15 15:13:29 -04:00
}
}
}