Estaba tratando de hacer un filtro de malas palabras con mi bot en discord.js v13 y node.js v16. Escribí un código simple pero no funciona correctamente.
Mi código:
const args = message.content.split(/ +/); if ((message.guild.id = 'GUILD_ID')) { const bad = ['word1', 'word2']; if (bad.includes(args[0].join(' '))) { message.delete(); } else { return; } }Cuando envío un mensaje de 'palabra 1', funciona correctamente y elimina el mensaje. pero cuando mando por ejemplo: "Hola palabra1", no funciona.
¿Qué necesita hacer?
Nota: ¡No recibo ningún error!
Es porque verifica si la matriz contiene la cadena "Hello word1" .
Puede usar Array#some() con una función de devolución de llamada para verificar si la cadena contiene alguna de esas palabras en la matriz:
function containsBadWords(str) { const badWords = ['word1', 'word2'] if (badWords.some(word => str.toLowerCase().includes(word))) return 'String contains bad words' else return 'No bad words found' } console.log(containsBadWords('word1')) console.log(containsBadWords('Some other text that includes word2 here')) console.log(containsBadWords('No bad words here')) // make sure you don't use single '=' here! if (message.guild.id === 'GUILD_ID') { const bad = ['word1', 'word2'] if (bad.some(word => message.content.includes(word))) message.delete() else return }array include no devolverá verdadero para su cadena Hello world1. En su caso, desea encontrar si la matriz incluye ese valor por subcadena. Esta no es la forma en que funciona el método array.includes. Consulte esta respuesta En javascript, ¿cómo busca en una matriz una coincidencia de subcadena?