feat(commands): finished vm command
This commit is contained in:
parent
b8176e0d5c
commit
d6b2470a8b
5 changed files with 45 additions and 10 deletions
|
@ -54,6 +54,7 @@
|
|||
<TypeScriptCodeStyleSettings version="0">
|
||||
<option name="FORCE_SEMICOLON_STYLE" value="true" />
|
||||
<option name="USE_PUBLIC_MODIFIER" value="true" />
|
||||
<option name="PREFER_AS_TYPE_CAST" value="true" />
|
||||
<option name="USE_DOUBLE_QUOTES" value="false" />
|
||||
<option name="FORCE_QUOTE_STYlE" value="true" />
|
||||
<option name="ENFORCE_TRAILING_COMMA" value="WhenMultiline" />
|
||||
|
@ -91,6 +92,7 @@
|
|||
<option name="ALIGN_MULTILINE_FOR" value="false" />
|
||||
<option name="SPACE_BEFORE_IF_PARENTHESES" value="false" />
|
||||
<option name="SPACE_BEFORE_CATCH_PARENTHESES" value="false" />
|
||||
<option name="SPACE_BEFORE_SWITCH_PARENTHESES" value="false" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||
|
@ -113,6 +115,7 @@
|
|||
<option name="ALIGN_MULTILINE_FOR" value="false" />
|
||||
<option name="SPACE_BEFORE_IF_PARENTHESES" value="false" />
|
||||
<option name="SPACE_BEFORE_CATCH_PARENTHESES" value="false" />
|
||||
<option name="SPACE_BEFORE_SWITCH_PARENTHESES" value="false" />
|
||||
<indentOptions>
|
||||
<option name="INDENT_SIZE" value="2" />
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||
|
|
|
@ -13,4 +13,4 @@
|
|||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with ArgonBot. If not, see <https: //www.gnu.org/licenses/>.
|
||||
*/
|
||||
*/
|
||||
|
|
|
@ -50,6 +50,7 @@
|
|||
"sodium": "^3.0.2",
|
||||
"terminal-link": "^3.0.0",
|
||||
"tslib": "^2.3.0",
|
||||
"typescript": "^4.3.4",
|
||||
"utf-8-validate": "^5.0.5",
|
||||
"vm2": "^3.9.3",
|
||||
"zlib-sync": "^0.1.7"
|
||||
|
@ -93,7 +94,6 @@
|
|||
"standard-version": "^9.3.0",
|
||||
"ts-node": "^10.0.0",
|
||||
"tsconfig-paths": "^3.9.0",
|
||||
"typescript": "^4.3.4",
|
||||
"typescript-eslint-language-service": "^4.1.4"
|
||||
},
|
||||
"eslintConfig": {
|
||||
|
|
|
@ -14,27 +14,58 @@
|
|||
* You should have received a copy of the GNU General Public License
|
||||
* along with ArgonBot. If not, see <https: //www.gnu.org/licenses/>.
|
||||
*/
|
||||
import { VM } from 'vm2';
|
||||
import { NodeVM } from 'vm2';
|
||||
import { transpile } from 'typescript';
|
||||
import Command from '@structures/command';
|
||||
|
||||
import type { Client, Message } from 'discord.js';
|
||||
|
||||
export class vm extends Command {
|
||||
public constructor(client: Client) {
|
||||
super(client);
|
||||
public constructor(client: Client, file: string) {
|
||||
super(client, file);
|
||||
}
|
||||
|
||||
public run(message: Message, vmLang: string, code: string): void {
|
||||
const javascriptVM = new VM({ eval: false, timeout: 1000, wasm: false });
|
||||
public async run(message: Message, vmLang: string, ...codeArray: string[]): Promise<void> {
|
||||
const code = codeArray.join(' ');
|
||||
const javascriptVM = new NodeVM({ eval: false, timeout: 1000, wasm: false, console: 'off' });
|
||||
|
||||
switch(vmLang.toLowerCase()) {
|
||||
case 'js':
|
||||
case 'javascript':
|
||||
message.reply('Computing JavaScript code... Please wait!');
|
||||
javascriptVM.run(code);
|
||||
await message.reply('Computing JavaScript code... Please wait!');
|
||||
|
||||
try {
|
||||
let returnVal: string;
|
||||
if(!code.includes('module.exports = '))
|
||||
returnVal = await javascriptVM.run(`module.exports = (() => {${code}})();`);
|
||||
else
|
||||
returnVal = await javascriptVM.run(`(() => {${code}})()`);
|
||||
|
||||
await message.reply(`\`\`\`js\n${returnVal}\`\`\``);
|
||||
} catch(err) {
|
||||
await message.reply(`An error has occurred while executing JavaScript code!\n\`\`\`\n${err.message}\n\`\`\``);
|
||||
}
|
||||
break;
|
||||
case 'ts':
|
||||
case 'typescript':
|
||||
await message.reply('Computing TypeScript code... Please wait!');
|
||||
|
||||
try {
|
||||
const jsCode = transpile(code);
|
||||
let returnVal: string;
|
||||
|
||||
if(!jsCode.includes('module.exports = '))
|
||||
returnVal = await javascriptVM.run(`module.exports = (() => {${jsCode}}()`);
|
||||
else
|
||||
returnVal = await javascriptVM.run(`(() => {${jsCode}}()`);
|
||||
|
||||
await message.reply(`\`\`\`js\n${returnVal}\`\`\``);
|
||||
} catch(err) {
|
||||
await message.reply(`An error has occurred while executing TypeScript code!\n\`\`\`\n${err.message}\n\`\`\``);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
message.reply('Unknown Language given!');
|
||||
await message.reply('Unknown Language given!');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -85,5 +85,6 @@
|
|||
},
|
||||
"include": [
|
||||
"src/**/*.ts",
|
||||
"*.json"
|
||||
]
|
||||
}
|
||||
|
|
Reference in a new issue