Quería hacer que mi bot dijera lo que yo le dijera usando un comando. Tengo el código copiado de otras partes de mi bot y está funcionando allí, pero aquí simplemente no funciona y no puedo entender por qué. No hay mensajes de error. Aquí está mi código:
const { Permissions } = require('discord.js'); module.exports = { name: 'say', description: "Sprawia że coś mówię.", execute(message, args) { let text = args.join(" ").slice(22); if(text) { message.channel.send(text) } else { message.reply('test')//show correct usage } } }(const {Permissions} se usará más adelante, así que no se preocupe si está allí) También puede ver cómo se ve en Discord: aquí .
El código funciona exactamente como lo ha programado. Echa un vistazo a esta línea:
let text = args.join(" ").slice(22); Suponiendo que sus args en el caso de prueba "rp say xd" se supone que son "xd" , el código anterior es completamente incorrecto. El código combina los argumentos, separándolos con espacios, y luego obtiene una subcadena de eso a partir del carácter 22. En otras palabras, para que el text sea algo más que una cadena vacía, sus argumentos tendrían que tener más de 22 caracteres ( "rp say xdddddddddddddddddddd!" haría que el text fuera igual al final "!" ).
Debido a que text siempre es una cadena vacía para argumentos de menos de 22 caracteres, básicamente solo está haciendo if ("") , que es lo mismo que hacer if (false) . Esto significa que su declaración else siempre se ejecutará, a menos que sus args tengan más de 22 caracteres combinados.
Para arreglar esto, haz algo como esto en su lugar:
let text = args.join(" ");O, si tenía la intención de hacer que su bot solo use los primeros 22 caracteres de los argumentos que se le proporcionaron:
let text = args.join(" ").slice(0, 22); //.slice(startIndex, endIndexExclusive)