eval.js (4039B)
1 const Discord = require("discord.js"); 2 module.exports = { 3 name: "eval", 4 category: "Owner", 5 usage: "(Code)", 6 Owner: true, 7 description: "Eval something", 8 9 options: [ 10 { 11 type: 3, 12 name: "code", 13 description: "The code to eval", 14 required: true, 15 }, 16 ], 17 run: async (client, interaction, args, utils) => { 18 const code = args[0]; 19 function CheckFilter(object) { 20 if (typeof object === "string") { 21 object = object.replace( 22 new RegExp(`${client.token || process.env.TOKEN}`, "gi"), 23 "Cannot eval Token" 24 ); 25 } else if (typeof object === "object") { 26 if (Array.isArray(object)) { 27 for (let i = 0; i < object.length; i++) { 28 object[i] = CheckFilter(object[i]); 29 } 30 } else { 31 for (const key in object) { 32 object[key] = CheckFilter(object[key]); 33 } 34 } 35 } 36 return object; 37 } 38 const oldSend = Discord.TextChannel.prototype.send; 39 Discord.TextChannel.prototype.send = async function send(content, options) { 40 return oldSend.bind(this)(CheckFilter(content), CheckFilter(options)); 41 }; 42 let evaled; 43 try { 44 evaled = eval(code); 45 if (evaled instanceof Promise) evaled = await evaled; 46 } catch (err) { 47 evaled = err; 48 } 49 if (typeof evaled !== "string") evaled = require("util").inspect(evaled); 50 evaled = chunk([evaled], 750); 51 let reactions = ["❌", "⏪", "◀️", "⏹️", "▶️", "⏩"], 52 page = 0, 53 evaledEmbed = new Discord.EmbedBuilder() 54 .setColor(client.color) 55 .setDescription(`\`\`\`js\n${evaled[0]}\n\`\`\``) 56 .setTimestamp() 57 .setAuthor({ 58 name: `Evaled by ${interaction.user.tag}`, 59 iconURL: interaction.user.displayAvatarURL({ dynamic: true }), 60 }); 61 const mainMessage = await interaction.channel.send({ 62 embeds: [evaledEmbed], 63 }); 64 Discord.TextChannel.prototype.send = oldSend; 65 await Promise.all( 66 (evaled.length === 1 ? ["❌", "⏹️"] : reactions).map(r => 67 mainMessage.react(r) 68 ) 69 ); 70 const filter = (reaction, user) => 71 (evaled.length === 1 ? ["❌", "⏹️"] : reactions).some( 72 e => e === reaction.emoji.name 73 ) && user.id === interaction.user.id; 74 const collector = mainMessage.createReactionCollector({ 75 filter, 76 time: 999999, 77 }); 78 collector.on("collect", async reaction => { 79 switch (reaction.emoji.name) { 80 case "❌": 81 await collector.stop(); 82 return mainMessage.delete(); 83 case "⏪": 84 if (evaled.length === 1 || page === 0) return; 85 page = 0; 86 break; 87 case "◀️": 88 if (evaled.length === 1) return; 89 if (page === 0) { 90 page = evaled.length - 1; 91 } else { 92 page -= 1; 93 } 94 break; 95 case "⏹️": 96 await collector.stop(); 97 for (const reaction of mainMessage.reactions.cache.map(e => e)) { 98 await reaction.users.remove(client.user.id); 99 } 100 return; 101 case "▶️": 102 if (evaled.length === 1) return; 103 if (page === evaled.length - 1) { 104 page = 0; 105 } else { 106 page += 1; 107 } 108 break; 109 case "⏩": 110 if (evaled.length === 1 || page === evaled.length - 1) return; 111 page = evaled.length - 1; 112 break; 113 } 114 evaledEmbed = new Discord.EmbedBuilder() 115 .setColor(interaction.guild.me.displayColor) 116 .setDescription(`\`\`\`js\n${evaled[page]}\n\`\`\``); 117 await mainMessage.edit({ 118 embeds: [evaledEmbed], 119 }); 120 }); 121 }, 122 }; 123 function chunk(arr, size) { 124 let c; 125 Array.from({ length: Math.ceil(arr.length / size) }, (v, i) => { 126 c = arr.slice(i * size, i * size + size); 127 }); 128 return c; 129 }