Hice una función de tirada de dados "funcional" en mi bot. Funciona bien para lo que necesito, pero me preguntaba cómo podría hacerlo, dependiendo de lo que se diga en discord, se activa.
Entonces, decir !rolld6 usaría 6 en la respuesta var en lugar de 20.
if (message.content.toLowerCase().includes("!rolld20")) { const ayy = client.emojis.cache.find(emoji => emoji.name === "diceroll"); var response = [Math.floor(Math.random() * ((20 - 1) + 1) + 1)]; message.channel.send(`${ayy}` + `Rolling.`) .then(msg => { setTimeout(function() { msg.edit(`${ayy}` + `Rolling..`) }, 1000); setTimeout(function() { msg.edit(`${ayy}` + `Rolling...`) }, 2000) setTimeout(function() { msg.edit(`${ayy}` + `Rolling....`) }, 3000) setTimeout(function() { msg.edit(`${ayy}` + " Rolled... " + response + " " + `${ayy}`).then().catch(console.error) }, 4000) }) return; }Ni siquiera estoy seguro de lo que buscaría para resolver esto, ¡así que cualquier ayuda es muy apreciada!
Use una expresión regular en lugar de .includes y luego extraiga los dígitos después de la d para aleatorizar.
No necesita restar 1, luego agregue 1 justo después de eso; esos se cancelan, ni necesita poner el resultado en una matriz; interpolar solo el número aleatorio generado en el mensaje funcionará bien.
const match = message.content.match(/!rolld(\d+)/i); if (match) { const die = match[1]; const response = 1 + Math.floor(Math.random() * die); const ayy = client.emojis.cache.find(emoji => emoji.name === "diceroll");