fix(bot): fix fallback refactor

This commit is contained in:
Leifer Jesús Mendez
2023-01-28 15:46:13 +01:00
parent 7e2bf22d63
commit e22780d3fa
3 changed files with 204 additions and 60 deletions

View File

@@ -71,8 +71,8 @@ class CoreClass {
logger.log(`[handleMsg]: `, messageCtxInComming)
const { body, from } = messageCtxInComming
let msgToSend = []
let fallBackFlag = false
let endFlowFlag = false
let fallBackFlag = false
if (this.generalArgs.blackList.includes(from)) return
if (!body) return
if (!body.length) return
@@ -105,11 +105,23 @@ class CoreClass {
return
}
// 📄 Esta funcion se encarga de enviar un array de mensajes dentro de este ctx
const sendFlow = async (messageToSend, numberOrId) => {
// [1 Paso] esto esta bien!
// 📄 Continuar con el siguiente flujo
const continueFlow = async () => {
const cotinueMessage =
this.flowClass.find(refToContinue?.ref, true) || []
sendFlow(cotinueMessage, from, { continue: true })
return
}
// 📄 Esta funcion se encarga de enviar un array de mensajes dentro de este ctx
const sendFlow = async (
messageToSend,
numberOrId,
options = { continue: false }
) => {
if (!options.continue && prevMsg?.options?.capture)
await cbEveryCtx(prevMsg?.ref)
if (prevMsg?.options?.capture) await cbEveryCtx(prevMsg?.ref)
const queue = []
for (const ctxMessage of messageToSend) {
if (endFlowFlag) return
@@ -127,11 +139,13 @@ class CoreClass {
}
// 📄 [options: fallBack]: esta funcion se encarga de repetir el ultimo mensaje
const fallBack = async () => {
fallBackFlag = true
await this.sendProviderAndSave(from, refToContinue)
const fallBack = async (next = false, message = null) => {
QueuePrincipal.queue = []
return refToContinue
if (next) return continueFlow()
return this.sendProviderAndSave(from, {
...refToContinue,
answer: message ?? refToContinue.answer,
})
}
// 📄 [options: flowDynamic]: esta funcion se encarga de responder un array de respuesta esta limitado a 5 mensajes
@@ -141,8 +155,7 @@ class CoreClass {
listMsg = [],
optListMsg = { limit: 5, fallback: false }
) => {
if (!Array.isArray(listMsg))
throw new Error('Esto debe ser un ARRAY')
if (!Array.isArray(listMsg)) listMsg = [listMsg]
fallBackFlag = optListMsg.fallback
const parseListMsg = listMsg
@@ -165,7 +178,7 @@ class CoreClass {
for (const msg of parseListMsg) {
await this.sendProviderAndSave(from, msg)
}
return
return continueFlow()
}
// 📄 Se encarga de revisar si el contexto del mensaje tiene callback o fallback
@@ -181,11 +194,12 @@ class CoreClass {
fallBack,
flowDynamic,
endFlow,
continueFlow,
})
}
// 📄🤘(tiene return) [options: nested(array)]: Si se tiene flujos hijos los implementa
if (!fallBackFlag && prevMsg?.options?.nested?.length) {
if (prevMsg?.options?.nested?.length) {
const nestedRef = prevMsg.options.nested
const flowStandalone = nestedRef.map((f) => ({
...nestedRef.find((r) => r.refSerialize === f.refSerialize),
@@ -197,12 +211,11 @@ class CoreClass {
return
}
// 📄🤘(tiene return) [options: capture (boolean)]: Si se tiene option boolean
if (!fallBackFlag && !prevMsg?.options?.nested?.length) {
// 📄🤘(tiene return) Si el mensaje previo implementa capture
if (!prevMsg?.options?.nested?.length) {
const typeCapture = typeof prevMsg?.options?.capture
const valueCapture = prevMsg?.options?.capture
if (['string', 'boolean'].includes(typeCapture) && valueCapture) {
if (typeCapture === 'boolean' && fallBackFlag) {
msgToSend = this.flowClass.find(refToContinue?.ref, true) || []
sendFlow(msgToSend, from)
return
@@ -228,6 +241,7 @@ class CoreClass {
}
/**
* @deprecated
* @private
* @param {*} message
* @param {*} ref