djskage
Version:
A Discord.js extension for utility commands
176 lines (175 loc) • 7.1 kB
JavaScript
;
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);
}
});