mirror of
https://github.com/cheveguerra/bot-whatsapp.git
synced 2026-04-18 03:29:15 +00:00
67 lines
2.2 KiB
JavaScript
67 lines
2.2 KiB
JavaScript
const { toSerialize } = require('./methods/toSerialize')
|
|
const { flatObject } = require('../utils/flattener')
|
|
|
|
class FlowClass {
|
|
allCallbacks = []
|
|
flowSerialize = []
|
|
flowRaw = []
|
|
constructor(_flow) {
|
|
if (!Array.isArray(_flow)) throw new Error('Esto debe ser un ARRAY')
|
|
this.flowRaw = _flow
|
|
|
|
this.allCallbacks = flatObject(_flow)
|
|
console.log('[🙌🙌🙌]', this.allCallbacks)
|
|
|
|
const mergeToJsonSerialize = Object.keys(_flow)
|
|
.map((indexObjectFlow) => _flow[indexObjectFlow].toJson())
|
|
.flat(2)
|
|
|
|
this.flowSerialize = toSerialize(mergeToJsonSerialize)
|
|
}
|
|
|
|
find = (keyOrWord, symbol = false, overFlow = null) => {
|
|
keyOrWord = `${keyOrWord}`
|
|
let capture = false
|
|
let messages = []
|
|
let refSymbol = null
|
|
overFlow = overFlow ?? this.flowSerialize
|
|
|
|
/** Retornar expresion regular para buscar coincidencia */
|
|
const mapSensitive = (str, flag = false) => {
|
|
const regexSensitive = flag ? 'g' : 'i'
|
|
if (Array.isArray(str)) {
|
|
return new RegExp(str.join('|'), regexSensitive)
|
|
}
|
|
return new RegExp(str, regexSensitive)
|
|
}
|
|
|
|
const findIn = (keyOrWord, symbol = false, flow = overFlow) => {
|
|
const sensitive = refSymbol?.options?.sensitive || false
|
|
capture = refSymbol?.options?.capture || false
|
|
|
|
if (capture) return messages
|
|
|
|
if (symbol) {
|
|
refSymbol = flow.find((c) => c.keyword === keyOrWord)
|
|
if (refSymbol?.answer) messages.push(refSymbol)
|
|
if (refSymbol?.ref) findIn(refSymbol.ref, true)
|
|
} else {
|
|
refSymbol = flow.find((c) => {
|
|
return mapSensitive(c.keyword, sensitive).test(keyOrWord)
|
|
})
|
|
if (refSymbol?.ref) findIn(refSymbol.ref, true)
|
|
return messages
|
|
}
|
|
}
|
|
findIn(keyOrWord, symbol)
|
|
return messages
|
|
}
|
|
|
|
findBySerialize = (refSerialize) =>
|
|
this.flowSerialize.find((r) => r.refSerialize === refSerialize)
|
|
|
|
findIndexByRef = (ref) => this.flowSerialize.findIndex((r) => r.ref === ref)
|
|
}
|
|
|
|
module.exports = FlowClass
|