From 2e50963d1641f09d0d86170c37722df7bece61ea Mon Sep 17 00:00:00 2001 From: Caleb Ephrem Date: Sun, 15 Mar 2026 08:45:55 +0000 Subject: [PATCH 1/2] chore: rename 01registerCommands.js to registerCommands.js --- .../clientReady/{01registerCommands.js => registerCommands.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/events/clientReady/{01registerCommands.js => registerCommands.js} (100%) diff --git a/src/events/clientReady/01registerCommands.js b/src/events/clientReady/registerCommands.js similarity index 100% rename from src/events/clientReady/01registerCommands.js rename to src/events/clientReady/registerCommands.js From bdb613847a3bdd1bb191a3b3ed711dcb37c6b9d1 Mon Sep 17 00:00:00 2001 From: Caleb Ephrem Date: Sun, 15 Mar 2026 10:09:23 +0000 Subject: [PATCH 2/2] refactor(compile): migrate from piston api to wandbox --- src/events/messageCreate/compile.js | 74 +++++++++++++++++++---------- 1 file changed, 49 insertions(+), 25 deletions(-) diff --git a/src/events/messageCreate/compile.js b/src/events/messageCreate/compile.js index 54560b9..bdaf370 100644 --- a/src/events/messageCreate/compile.js +++ b/src/events/messageCreate/compile.js @@ -49,8 +49,8 @@ module.exports = async (client, message) => { const embed = new EmbedBuilder() .setFooter({ text: `${message.author.tag} | ${lang}` }) .setTimestamp(); - - const isSuccess = output.success && output.exitCode === 0; + const isSuccess = + output.success && (!output.stderr || output.stderr.trim() === ""); if (output.stdout) { embed.addFields({ @@ -202,38 +202,62 @@ module.exports = async (client, message) => { } }; +let wandboxCompilers = null; + +async function getCompilers() { + if (wandboxCompilers) return wandboxCompilers; + + const res = await fetch("https://wandbox.org/api/list.json"); + const data = await res.json(); + + wandboxCompilers = data; + return data; +} + async function runCode(lang, code) { try { - const res = await fetch("https://emkc.org/api/v2/piston/execute", { + const compilers = await getCompilers(); + + const compiler = compilers.find((c) => + c.name.toLowerCase().includes(lang.toLowerCase()), + ); + + if (!compiler) { + return { + success: false, + stderr: `Unsupported language: ${lang}`, + }; + } + + const res = await fetch("https://wandbox.org/api/compile.json", { method: "POST", - headers: { "Content-Type": "application/json" }, + headers: { + "Content-Type": "application/json", + }, body: JSON.stringify({ - language: lang, - version: "*", - files: [{ content: code }], + compiler: compiler.name, + code, }), }); - if (res.ok) { - const data = await res.json(); + if (!res.ok) { + return { success: false }; + } - if (!data.run) { - return { success: false }; - } + const data = await res.json(); - const { stdout, stderr, code } = data.run; + return { + success: true, + exitCode: data.status ?? 0, + stdout: data.program_output?.replace(/```/g, "`\u200b``"), + stderr: data.program_error?.replace(/```/g, "`\u200b``"), + }; + } catch (err) { + console.error("Code execution error:", err); - return { - success: true, - exitCode: code, - // Replace backticks with non-breaking spaces - stdout: stdout?.replace(/```/g, "`\u200b``"), - stderr: stderr?.replace(/```/g, "`\u200b``"), - }; - } - } catch (error) { - console.error("An error occurred while trying to run code:", error); + return { + success: false, + stderr: "Failed to execute code", + }; } - - return { success: false }; }