求助:SlashCommandBuilder的NumberOption无法访问数组元素
Discord机器人错误修复:无法读取属性问题
你的代码里有几个关键错误导致报错,修复方案如下:
错误点与修正:
属性名拼写错误:
interaction.option→ 应为interaction.options(Discord.js中获取命令选项的属性是复数options)setnumber('numero')→ 应为getNumber('numero')(你需要获取用户输入的选项值,而非设置,且方法名是驼峰命名的getNumber)
数组索引不匹配:
JavaScript数组索引从0开始,但用户输入的是1-based的天数(比如输入1对应第一天),所以需要将获取到的数值减1,才能正确对应数组元素。字符串冗余字符:
数组第三个元素里多了一个),可以顺手清理掉。
修正后的完整代码:
const { SlashCommandBuilder } = require('discord.js'); module.exports = { data: new SlashCommandBuilder() .setName('dia') .setDescription('Te doy una entrada del diario') .addNumberOption(option => option.setName('numero') .setDescription('El numero de dia que quieres')), async execute(interaction) { const dias = [ "aqui va lo del dia 1", "aqui va lo del dia 2", "aqui va lo del dia 3", "aqui va lo del dia 4!!!" ]; // 获取用户输入的天数,减1转换为数组索引 const diaIndex = interaction.options.getNumber('numero') - 1; // 处理用户输入超出数组范围的情况,避免返回undefined let diaelegido = dias[diaIndex] || "Lo siento, ese día no existe en el diario!"; await interaction.reply(diaelegido); }, };
额外优化:
加了一个判断,如果用户输入的天数超出数组长度(比如输入5),会返回提示信息,避免回复undefined给用户,提升体验。
内容的提问来源于stack exchange,提问作者Camilo Tobon
相关产品推荐
相关产品推荐

