简体   繁体   中英

discord.js v13 - Cannot use Interaction Options

For the past while, I've been trying to make an "Eval" command using Slash Commands.
I have a system in place that goes along with my Command Handler, however, it's specifically the "Eval" command that's causing issues.

I'm currently using @discordjs/builders , however, it's not helping with this.
This is how the Slash Command is built:

slash: new SlashCommandBuilder()
        .setName("eval")
        .setDescription("Evaluates JavaScript code.")
        .addStringOption(option => option.setName("code").setDescription("Your JavaScript code.").setRequired(true)),

In Discord, the "code" option doesn't even appear. When I try to run the command by running:

/eval ```js
console.log("Hello World");

I get an error saying Cannot read property "replace" of null
Here's the script for the Slash Command:

runSlash: async (interaction, bot) => {
        if (interaction.user.id !== interaction.guild.ownerId) {
            interaction.reply("You are not allowed to do this.");
            return bot.commandLog(`${msg.author} attempted to use the EVAL command, but was not Atelo.`);
        }

        const toEval = interaction.options.getString("code");

        console.log(interaction.options);
        /*
        this is what ^^^ returns:
          CommandInteractionOptionResolver {
             _group: null,
             _subcommand: null,
             _hoistedOptions: []
          }
        */
        console.log(interaction.options.getString("code")); // Also returns null

        const toRemove = /^(```js)|(```)$/gi;

        const evalEmbed = new MessageEmbed();
        try {
            const evalled = eval(toEval.replace(toRemove, ''));
            evalEmbed.setTitle("Evaluation Successful");
            evalEmbed.addFields({ name: "Output", value: "```js\n" + evalled + "\n```" });
            evalEmbed.setFooter(interaction.guild.name, interaction.guild.iconURL());
            evalEmbed.setTimestamp();
        } catch (err) {
            evalEmbed.setTitle("Evaluation Failed");
            evalEmbed.addFields({ name: "Output", value: "```js\n" + err + "\n```" });
            evalEmbed.setFooter(interaction.guild.name, interaction.guild.iconURL());
            evalEmbed.setTimestamp();
        }

        interaction.reply({ embeds: [evalEmbed] });
        return bot.commandLog(`${msg.author} successfully used the EVAL command.`);
    }
}

I've tried debugging for a while, and I am extremely confused. Thanks for any help you can provide!

So, I realized I used the wrong variable within my Command Handler, which broke the Slash Commands.

Oops!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM