From a5c38658a8637d57deea99683d437501f2fcc19f Mon Sep 17 00:00:00 2001 From: Leifer Mendez Date: Tue, 15 Nov 2022 19:52:57 +0100 Subject: [PATCH] work flow --- packages/bot/core/core.class.js | 26 ++++++++++++++++++++------ packages/bot/io/flow.class.js | 24 ++++++++++++------------ 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/packages/bot/core/core.class.js b/packages/bot/core/core.class.js index 256aebc..ab5f3fc 100644 --- a/packages/bot/core/core.class.js +++ b/packages/bot/core/core.class.js @@ -47,16 +47,30 @@ class CoreClass { * @param {*} ctxMessage */ handleMsg = ({ body, to, from }) => { - this.databaseClass.save(body) - const messageToSend = this.flowClass.find(body) || [] - console.log(messageToSend) - if (Array.isArray(messageToSend)) this.sendFlow(messageToSend, from) + let msgToSend = [] + console.log('____', this.databaseClass.listHistory) + const prevMsg = [...this.databaseClass.listHistory].pop() + + if (prevMsg?.ref && prevMsg?.options?.capture) { + msgToSend = this.flowClass.find(prevMsg.ref, true) || [] + } else { + msgToSend = this.flowClass.find(body) || [] + } + if (Array.isArray(msgToSend)) this.sendFlow(msgToSend, from) + } + + sendProviderAndSave = (numberOrId, ctxMessage) => { + const { answer } = ctxMessage + return Promise.all([ + this.providerClass.sendMessage(numberOrId, answer), + this.databaseClass.save(ctxMessage), + ]) } sendFlow = (messageToSend, numberOrId) => { const queue = [] - for (const message of messageToSend) { - queue.push(this.providerClass.sendMessage(numberOrId, message)) + for (const ctxMessage of messageToSend) { + queue.push(this.sendProviderAndSave(numberOrId, ctxMessage)) } return Promise.all(queue) } diff --git a/packages/bot/io/flow.class.js b/packages/bot/io/flow.class.js index b83e850..6818982 100644 --- a/packages/bot/io/flow.class.js +++ b/packages/bot/io/flow.class.js @@ -5,20 +5,20 @@ class FlowClass { } find = (keyOrWord, symbol = false) => { + let capture = false let messages = [] - const findIn = (keyOrWord, symbol = false, flow = this.flow) => { - if (symbol) { - const refSymbol = flow.find((c) => c.keyword === keyOrWord) - if (refSymbol && refSymbol.answer) - messages.push(refSymbol.answer) - if (refSymbol && refSymbol.ref) findIn(refSymbol.ref, true) - } else { - const refSymbolByKeyworkd = flow.find((c) => - c.keyword.includes(keyOrWord) - ) - if (refSymbolByKeyworkd && refSymbolByKeyworkd.ref) - findIn(refSymbolByKeyworkd.ref, true) + let refSymbol + const findIn = (keyOrWord, symbol = false, flow = this.flow) => { + 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) => c.keyword.includes(keyOrWord)) + if (refSymbol?.ref) findIn(refSymbol.ref, true) return messages } }