nyx

The first CODM discrod bot -- cath.exe Template
git clone https://codeberg.org/night0721/nyx
Log | Files | Refs | LICENSE

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 }