Search code examples
javascriptdiscorddiscord.js

Receiving discord.js slash command parameters


I'm currently trying to make a calculation using parameters input via a slash command. Putting them in works fine, however I do not know how to actually retrieve them. the current code yields an error TypeError: Cannot read properties of undefined (reading 'get') which has me quite confused, as the discord.js documentation shows that said function should exist and be exactly what I'm looking for.

const { SlashCommandBuilder } = require('discord.js');

module.exports = {
    data: new SlashCommandBuilder()
        .setName('manacost')
        .setDescription('Calculates the ´soul spawn cost using your inputs')
        .addStringOption(option =>
            option.setName('health')
                .setDescription('The amount of health your soul has. Supports k=1000...')
                .setRequired(true))
        .addStringOption(option =>
            option.setName('damage')
                .setDescription('The amount of damage your soul has. Supports k=1000...')
                .setRequired(true))
        .addIntegerOption(option =>
            option.setName('breeze')
                .setDescription('The amount of breeze you have.(0-80)')
                .setRequired(false)),
    async execute(interaction) {
        if (!interaction.isChatInputCommand()) return;
        let hp = interaction.options.get('health');
        let dmg = interaction.option.get('damage');
        let b =  interaction.option.get('breeze');
        console.log({hp, dmg, b});
        await interaction.reply({content: hp, dmg, b});
    },
}

Solution

  • The interaction options can be found using interaction.option.getString() or interaction.option.getInteger(). Also in your Code you have mixed up interaction.options and interaction.option. You should only use interaction.options.

    That means your code has to change from

    let hp = interaction.options.get('health');
    let dmg = interaction.option.get('damage');
    let b =  interaction.option.get('breeze');

    to

    let hp = interaction.options.getString('health');
    let dmg = interaction.options.getString('damage');
    let b =  interaction.options.getInteger('breeze');

    You should take a look at this post from the discord.js guide for more information and a look at the other option types.