Hola, quiero obtener ciertas palabras de un archivo de texto en lugar de todas las palabras del archivo. Básicamente, este archivo de texto tiene ciertas palabras que quiero eliminar si se usan en un mensaje.
Entonces quiero enviar estas palabras en un nuevo mensaje:
Cómo esto no funciona para mí, solo está enviando todas las palabras ${word} en el archivo de texto.
Esto es con lo que estoy trabajando
const badwords = fs.readFileSync("./badwords.txt","utf8").toLowerCase().split("\r\n"); const blocked = badwords.filter(word => message.content.toLowerCase().includes(word)); //filter through badwords blocked.filter(word => { if(message.content.includes(word)){ message.delete() log_channel.send(`Message deleted because it contained the words ${word}`) } }) Devolver valores de badword.txt test1 y test2
Su error proviene de cómo detecta si se encontraron badwords en message.content . blocked ya es una matriz de malas palabras encontradas (por eso todas regresan cuando las vuelve a filtrar con la misma condición), todo lo que necesita hacer es verificar si tiene una length mayor que 0. Para enviar una lista de las malas palabras encontradas toma la matriz y join en una cadena
const badwords = fs.readFileSync("./badwords.txt","utf8").toLowerCase().split("\r\n"); const blocked = badwords.filter(word => message.content.toLowerCase().includes(word)); if (blocked.length) { message.delete() log_channel.send(`Message deleted because it contained the words ${blocked.join(' ')}`) }Asumiendo que tienes la siguiente estructura badwords.txt
... bad1 bad2 bad3 ...Necesitas dividirlos por nueva línea
const badwords = fs.readFileSync("./badwords.txt","utf8").toLowerCase().split("\n");Luego, debe encontrar todas las palabras en el mensaje y convertirlas en una matriz
const message = "String with-one bad1 word, bad2, bad1".match(/\b[\w\-]+\b/gi);Y luego solo filtre el mensaje y devuelva un nuevo mensaje
const filteredMessage = message.filter(word => { if(badwords.includes(word)) { log_channel.send(`Message deleted because it contained the words ${word}`) return false; } return true; }).join(' ');