UNPKG

djskage

Version:

A Discord.js extension for utility commands

176 lines (175 loc) 7.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const discord_js_1 = require("discord.js"); const logger_1 = __importDefault(require("../utils/logger")); const pagination_1 = require("../utils/pagination"); let tW = false; module.exports = { name: "javascript", aliases: ["js"], description: "Execute javascript code", usage: "js <code>", execute: async (kage, client, ctx) => { const args = ctx.content.split(" ").slice(2); if (ctx.content.includes("client.token") && !tW) { tW = true; return ctx.reply({ content: "Tokens are not hidden, please watch out where you run this command. Public channels should be avoided at all times.", }); } tW = false; const sensitiveKeys = [ "discordToken", "discordSecret", "appSecret", "mongo_uri", "prc_key", "erm_key", "bloxlink_key", ]; function redactSensitiveInfo(jsonData) { const seen = new WeakSet(); if (typeof jsonData !== "object") { if (typeof jsonData === "bigint") { return jsonData.toString(); } if (jsonData === client.token) { return "$CLIENT_TOKEN"; } return jsonData; } const jsonString = JSON.stringify(jsonData, (key, value) => { if (typeof value === "object" && value !== null) { if (seen.has(value)) { return "~"; } seen.add(value); } if (sensitiveKeys.includes(key)) { return "$REDACTED"; } if (typeof value === "bigint") { return value.toString(); } if (value === client.token) { return "$CLIENT_TOKEN"; } return value; }, 2); return JSON.parse(jsonString); } function detectToken(input) { const discordTokenPattern = /[a-zA-Z0-9]{24}\.[a-zA-Z0-9_-]{6}\.[a-zA-Z0-9_-]{27}/; if (discordTokenPattern.test(input)) { ctx.reply({ content: `A possible Token was detected, be careful when sharing this information. Incase you ran this command in a public channel, please delete this message and visit https://discord.com/developers/applications/${client.application?.id || client.user?.id}/bot to reset your bots token.`, }); } } try { const isMessage = ctx instanceof discord_js_1.Message; let _message = ctx; let _msg = ctx; let _guild = ctx.guild; let _channel = ctx.channel; let _user = ctx.author; let _bot = client; if (!isMessage) return ctx.reply({ content: "Invalid Context" }); const output = redactSensitiveInfo(await run(_message, _msg, _guild, _channel, _user, _bot, args.join(" "))); try { if (output instanceof discord_js_1.EmbedBuilder) { ctx.reply({ embeds: [output] }); return; } if (output instanceof discord_js_1.AttachmentBuilder) { ctx.reply({ files: [output], }); return; } if (output instanceof discord_js_1.Message) { ctx.reply(output); return; } if (output instanceof Object && output !== null && output.constructor && output.constructor.name !== "Object" && output.constructor.name !== "Array") { let msgT = output.toString(); if (msgT.length <= 2000) { ctx.reply(`\`\`\`js\n${msgT}\`\`\``); } else { const msg = []; let chunk = ""; for (const line of msgT.split("\n")) { if (chunk.length + line.length + 1 > 1750) { msg.push(chunk); chunk = ""; } chunk += line + "\n"; } if (chunk) msg.push(chunk); await (0, pagination_1.createPaginatedReply)(ctx, msg, "js"); } return; } if (output instanceof Object) { let msgT = JSON.stringify(output, null, 2) || output.toString(); if (msgT.length <= 2000) { ctx.reply(`\`\`\`json\n${msgT}\`\`\``); } else { const msg = []; let chunk = ""; for (const line of msgT.split("\n")) { if (chunk.length + line.length + 1 > 1750) { msg.push(chunk); chunk = ""; } chunk += line + "\n"; } if (chunk) msg.push(chunk); await (0, pagination_1.createPaginatedReply)(ctx, msg, "json"); } return; } if (Array.isArray(output)) { ctx.reply(`\`\`\`json\n${JSON.stringify(output, null, 2)}\`\`\``); return; } ctx.reply(`${output ? output.toString() : output}`); detectToken(output); } catch (err) { ctx.reply(`\`\`\`js\n${err.toString()}\`\`\``); logger_1.default.error(err.toString(), err, "DJK - js"); } } catch (err) { ctx.reply(`\`\`\`js\n\n${err.toString()}\`\`\``); logger_1.default.error(err.toString(), err, "DJK - js"); } }, }; const run = (_message, _msg, _guild, _channel, _user, _bot, abcdefg123456zyxxw) => new Promise(async (resolve, reject) => { let _client = _bot; if (!abcdefg123456zyxxw.startsWith("return ") && abcdefg123456zyxxw.split("\n").length === 1) { abcdefg123456zyxxw = `return ${abcdefg123456zyxxw}`; } try { const result = await eval(`(async () => { ${abcdefg123456zyxxw} })()`); resolve(result); } catch (err) { reject(err); } });