Skip to content

Commit

Permalink
fix(bot): 🔥 se incorpora la funcionalidad de blacklist dinámica
Browse files Browse the repository at this point in the history
📢Ahora incluimos la blacklist dinámica en nuestro sistema. 🚫✨
  • Loading branch information
Carlos Moran committed Oct 19, 2023
1 parent 6677522 commit 966834e
Show file tree
Hide file tree
Showing 3 changed files with 207 additions and 29 deletions.
6 changes: 5 additions & 1 deletion packages/bot/core/core.class.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ const loggerQueue = new Console({
})

const idleForCallback = new IdleState()
const DynamicBlacklist = require('../utils/BlacklistDynamic')

/**
* [ ] Escuchar eventos del provider asegurarte que los provider emitan eventos
Expand All @@ -34,6 +35,7 @@ class CoreClass extends EventEmitter {
queuePrincipal
stateHandler = new SingleState()
globalStateHandler = new GlobalState()
dynamicBlacklist = new DynamicBlacklist()
generalArgs = {
blackList: [],
listEvents: {},
Expand All @@ -52,6 +54,8 @@ class CoreClass extends EventEmitter {
this.providerClass = _provider
this.generalArgs = { ...this.generalArgs, ..._args }

this.dynamicBlacklist.addToBlacklist(this.generalArgs.blackList)

this.queuePrincipal = new Queue(
loggerQueue,
this.generalArgs.queue.concurrencyLimit,
Expand Down Expand Up @@ -108,7 +112,7 @@ class CoreClass extends EventEmitter {
let msgToSend = []
let endFlowFlag = false
let fallBackFlag = false
if (this.generalArgs.blackList.includes(from)) return
if (this.dynamicBlacklist.isInBlacklist(from)) return
if (!body) return

let prevMsg = await this.databaseClass.getPrevByNumber(from)
Expand Down
80 changes: 80 additions & 0 deletions packages/bot/utils/BlacklistDynamic.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
class DynamicBlacklist {
#blacklist = new Set()

/**
* Constructor para inicializar la lista negra.
* @param {Array<string>} initialNumbers - Lista inicial de números a bloquear.
*/
constructor(initialNumbers = []) {
this.addToBlacklist(initialNumbers)
}

/**
* Excepción lanzada cuando un número ya existe en la lista negra.
*/
static PhoneNumberAlreadyExistsError = class extends Error {
constructor(phoneNumber) {
super(`El número de teléfono ${phoneNumber} ya está en la lista negra.`)
this.name = 'PhoneNumberAlreadyExistsError'
}
}

/**
* Excepción lanzada cuando un número no se encuentra en la lista negra.
*/
static PhoneNumberNotFoundError = class extends Error {
constructor(phoneNumber) {
super(`El número de teléfono ${phoneNumber} no está en la lista negra.`)
this.name = 'PhoneNumberNotFoundError'
}
}

/**
* Añade uno o varios números de teléfono a la lista negra.
* @param {string | Array<string>} phoneNumbers - Número o números a añadir.
* @returns {Array<string>} - Devuelve una lista de mensajes indicando el resultado de añadir cada número.
*/
addToBlacklist(...phoneNumbers) {
const responseMessages = []

phoneNumbers.flat().forEach((number) => {
if (this.#blacklist.has(number)) {
responseMessages.push(`El número de teléfono ${number} ya está en la lista negra.`)
} else {
this.#blacklist.add(number)
responseMessages.push(`Número ${number} añadido exitosamente.`)
}
})

return responseMessages
}

/**
* Elimina un número de teléfono de la lista negra.
* @param {string} phoneNumber - El número a eliminar.
*/
removeFromBlacklist(phoneNumber) {
if (!this.#blacklist.has(phoneNumber)) {
throw new DynamicBlacklist.PhoneNumberNotFoundError(phoneNumber)
}
this.#blacklist.delete(phoneNumber)
}

/**
* Verifica si un número de teléfono está en la lista negra.
* @param {string} phoneNumber - El número a verificar.
* @returns {boolean} - Verdadero si está en la lista, falso en caso contrario.
*/
isInBlacklist(phoneNumber) {
return this.#blacklist.has(phoneNumber)
}

/**
* Proporciona una copia de la lista negra actual.
* @returns {Array<string>} - Los números de teléfono en la lista negra.
*/
getBlacklistSnapshot() {
return [...this.#blacklist]
}
}
module.exports = DynamicBlacklist
Loading

0 comments on commit 966834e

Please sign in to comment.