Estoy tratando de hacer un comando de barra de dados con un controlador de comandos que publica una imagen de los dados, pero dice url1 undefined . Cuando intento simplemente publicar las imágenes directamente, dice que la interacción falló: esta interacción ya ha sido reconocida .
module.exports= { name: "diceslash", description:"dice slashcommand", execute(interaction){ const diceroll = Math.floor(Math.random() * 6) + 1 const dices = Math.floor(Math.random() * 6) + 1 const ans = diceroll + dices; if (diceroll == 1){ const url1 = 'https://imgur.com/a/YdAmiRe'; } if (diceroll == 2){ const url1 = 'https://imgur.com/a/w35gKMR'; } if (diceroll == 3){ const url1 = 'https://imgur.com/a/MkDVhQS'; } if (diceroll == 4){ const url1 = 'https://imgur.com/a/WCuaCbL'; } if (diceroll == 5){ const url1 = 'https://imgur.com/a/0xyPIkx'; } if (diceroll == 6){ const url1 = 'https://imgur.com/a/urv1H42'; } if (dices == 1){ const url2 = 'https://imgur.com/a/YdAmiRe'; } if (dices == 2){ const url2 = 'https://imgur.com/a/w35gKMR'; } if (dices == 3){ const url2 = 'https://imgur.com/a/MkDVhQS'; } if (dices == 4){ const url2 = 'https://imgur.com/a/WCuaCbL'; } if (dices == 5){ const url2 = 'https://imgur.com/a/0xyPIkx'; } if (dices == 6){ const url2 = 'https://imgur.com/a/urv1H42'; } interaction.reply ({content: url1+" "+url2}) interaction.reply({content: "you got "+ ans}) } }const tiene un alcance de bloque, por lo que url1 y url2 solo están disponibles dentro de las declaraciones if. Fuera de esos bloques, estas variables no están undefined .
Sin embargo, probablemente no debería usar tantas declaraciones if. Simplemente almacene las imágenes en una matriz o un mapa y elija una de ellas como esta:
module.exports = { name: 'diceslash', description: 'dice slashcommand', execute(interaction) { const dices = [ 'https://imgur.com/a/YdAmiRe', 'https://imgur.com/a/w35gKMR', 'https://imgur.com/a/MkDVhQS', 'https://imgur.com/a/WCuaCbL', 'https://imgur.com/a/0xyPIkx', 'https://imgur.com/a/urv1H42', ]; const dice1 = Math.floor(Math.random() * 6) + 1; const dice2 = Math.floor(Math.random() * 6) + 1; const ans = dice1 + dice2; // array's index starts at zero const url1 = dices[dice1 - 1]; const url2 = dices[dice2 - 1]; interaction.reply({ content: `${url1} ${url2} \n you got ${ans}` }); }, };También podría almacenar los dados en un objeto con sus URL y valores y simplificarlo así:
module.exports = { name: 'diceslash', description: 'dice slashcommand', execute(interaction) { const dices = [ { url: 'https://imgur.com/a/YdAmiRe', value: 1 }, { url: 'https://imgur.com/a/w35gKMR', value: 2 }, { url: 'https://imgur.com/a/MkDVhQS', value: 3 }, { url: 'https://imgur.com/a/WCuaCbL', value: 4 }, { url: 'https://imgur.com/a/0xyPIkx', value: 5 }, { url: 'https://imgur.com/a/urv1H42', value: 6 }, ]; // helper function to pick a random item from an array const pick = (arr) => arr[Math.floor(Math.random() * arr.length)]; const dice1 = pick(dices); const dice2 = pick(dices); const ans = dice1.value + dice2.value; interaction.reply({ content: `${dice1.url} ${dice2.url}` }); interaction.followUp({ content: `you got ${ans}` }); }, }; En cuanto a la segunda parte de su pregunta; el error se produce porque intenta responder a una interacción dos veces. Una interacción solo se puede responder una vez. Puede enviar una sola respuesta (ver mi primer fragmento) o usar el método followUp() para el segundo mensaje (ver el segundo fragmento).