From 236b17255b81b787d464a32ab4833ed780c3f767 Mon Sep 17 00:00:00 2001 From: derpystuff <3515180-derpystuff@users.noreply.gitlab.com> Date: Mon, 12 Jun 2023 22:29:46 +0200 Subject: [PATCH] eval command --- commands/message/utils/eval.js | 80 ++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 commands/message/utils/eval.js diff --git a/commands/message/utils/eval.js b/commands/message/utils/eval.js new file mode 100644 index 0000000..b8efa96 --- /dev/null +++ b/commands/message/utils/eval.js @@ -0,0 +1,80 @@ + +const { DiscordRegexNames } = require("detritus-client/lib/constants"); +const { Utils } = require("detritus-client"); + +const { REXTESTER_LANGUAGES, COLORS, REXTESTER_COMPILER_ARGS } = require("../../../labscore/constants"); + +const superagent = require('superagent') + +const { createEmbed } = require("../../../labscore/utils/embed"); +const { codeblock, highlight } = require("../../../labscore/utils/markdown"); +const { editOrReply } = require("../../../labscore/utils/message"); + +module.exports = { + label: 'code', + name: 'eval', + metadata: { + description: `Evaluate code snippets.\nSupported languages: ${highlight(Object.keys(REXTESTER_LANGUAGES).join(', '))}`, + description_short: 'Evaluate code', + examples: ['eval console.log(\'hi\') -lang js'], + category: 'utils', + usage: 'eval [-lang ]' + }, + args: [ + {name: 'lang', default: 'node'} + ], + run: async (context, args) => { + context.triggerTyping(); + + const { matches } = Utils.regex(DiscordRegexNames.TEXT_CODEBLOCK, args.code); + + if (matches.length) { + args.code = matches[0].text; + if(matches[0].language) args.lang = matches[0].language + } + + if(!REXTESTER_LANGUAGES[args.lang.toLowerCase()]) return editOrReply(context, createEmbed("warning", context, "Unsupported language.")) + + let data; + + let compArgs = ""; + if(REXTESTER_COMPILER_ARGS[args.lang]) compArgs = REXTESTER_COMPILER_ARGS[args.lang] + try{ + data = await superagent.post(`https://rextester.com/rundotnet/Run`) + .set({ + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/116.0", + "Accept": "text/plain, */*; q=0.01", + "Accept-Language": "en-US", + "Prefer": "safe", + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", + "X-Requested-With": "XMLHttpRequest", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-origin", + "Pragma": "no-cache", + "Cache-Control": "no-cache" + }) + .field('CompilerArgs', compArgs) + .field('Program', args.code) + .field('LanguageChoiceWrapper', REXTESTER_LANGUAGES[args.lang]) + + data = JSON.parse(data.text) + }catch(e){ + console.log(e) + return editOrReply(context, { embeds: [createEmbed("error", context, "Code execution failed.")] }) + } + + const embed = createEmbed("default", context, {}) + + if(data.Errors !== null){ + embed.description = codeblock("js", ['​' + data.Errors.replace(/[0-9]*\/source/g, 'source').split('\n').splice(0,10).join('\n').substr(0,1000)]) + embed.color = COLORS.error + } else { + embed.description = codeblock("js", ['​' + data.Result.split('\n').splice(0,10).join('\n').substr(0,1000)]) + embed.color = COLORS.success + if(data.Result == '​') codeblock('js', ["No Output"]) + } + + return editOrReply(context, createEmbed("default", context, embed)) + }, +}; \ No newline at end of file