Estoy tratando de hacer un filtro de palabras prohibidas de discordia que sea personalizable por servidor, similar a como lo hacen MEE6, Dyno, etc.
Actualmente tengo el servidor y las palabras especificadas guardadas en una base de datos. Lo que tengo actualmente para filtrar estas palabras es hacer una búsqueda en la base de datos en cada uno de los mensajes enviados y estoy seguro de que no es una buena idea.
código de ejemplo:
client.on("messageCreate", async message => { sql.query(`SELECT * FROM words WHERE serverid = ${serverID}`, (err, res) => { let words = res[0] for (let i in words) { if(message.content.includes(words[i])) return message.delete() } }) })Pensé que este método sería increíblemente lento e ineficiente cuando se envían miles de mensajes simultáneamente, me pregunto si hay una mejor manera de hacerlo almacenando las palabras en un caché/mapa o algo así, gracias.
Ejecutaría esa consulta solo cuando se inicie el bot y la almacenaría dentro de un objeto en el objeto del cliente para poder acceder fácilmente sin tener que depender del objeto global.
client.wordFilters = {} // for every server id sql.query(`SELECT * FROM words WHERE serverid = ${serverID}`, (err, res) => { client.wordFilters[serverID] = [...res] // assuming res is an array of banned words // or you need to turn it into an array first // or just use it as an object, use it as how you see fit }) luego, cada vez que se agregue una nueva palabra prohibida, no olvide enviarla también a la matriz dentro client.wordFilters[serverID]
client.on("messageCreate", async message => { // assuming the res object above is an array for (let i = 0; i < client.wordFilters[serverID]; i++){ let word = client.wordFilters[serverID][i] if(message.content.includes(word)) return message.delete() } })