Skip to content

Commit

Permalink
fix(bot): ⚡ added delay promises
Browse files Browse the repository at this point in the history
  • Loading branch information
leifermendez committed Dec 7, 2022
1 parent 8dd3be9 commit 73caf09
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 4 deletions.
3 changes: 2 additions & 1 deletion TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@
- [X] sensitivy viene activado por defecto
- [X] fallback respuesta en hijo: Se puede colocar en option el ref de la answer fallback
- [X] Cuando Envian Sticket devuelve mensaje raro
- [ ] addAnswer agregar delay
- [ ] colocar mensaje esperando conectando whatsapp (provider)
- [ ] createDatabase validar implementacion de funciones
- [ ] limitar caracteres de mensajes
- [ ] limitar caracteres de mensajes 4000
- [X] cuando envias numeros (5 o 1) se dispara el flujo

### @bot-whatsapp/database
Expand Down
10 changes: 8 additions & 2 deletions packages/bot/core/core.class.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
const { toCtx } = require('../io/methods')
const { printer } = require('../utils/interactive')
const { delay } = require('../utils/delay')
const Queue = require('../utils/queue')
const { Console } = require('console')
const { createWriteStream } = require('fs')

Expand Down Expand Up @@ -140,10 +142,14 @@ class CoreClass {
])
}

sendFlow = (messageToSend, numberOrId) => {
sendFlow = async (messageToSend, numberOrId) => {
const queue = []
for (const ctxMessage of messageToSend) {
queue.push(this.sendProviderAndSave(numberOrId, ctxMessage))
const delayMs = ctxMessage?.options?.delay || 0
if (delayMs) await delay(delayMs)
Queue.enqueue(() =>
this.sendProviderAndSave(numberOrId, ctxMessage)
)
}
return Promise.all(queue)
}
Expand Down
3 changes: 2 additions & 1 deletion packages/bot/io/methods/addAnswer.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const { toJson } = require('./toJson')
/**
*
* @param answer string
* @param options {media:string, buttons:[{"body":"😎 Cursos"}], capture:true default false}
* @param options {media:string, buttons:[{"body":"😎 Cursos"}], delay:ms, capture:true default false}
* @returns
*/
const addAnswer =
Expand All @@ -24,6 +24,7 @@ const addAnswer =
: false,
child:
typeof options?.child === 'string' ? `${options?.child}` : null,
delay: typeof options?.delay === 'number' ? options?.delay : 0,
})

const getNested = () => ({
Expand Down
4 changes: 4 additions & 0 deletions packages/bot/utils/delay.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
const delay = (miliseconds) =>
new Promise((res) => setTimeout(res, miliseconds))

module.exports = { delay }
46 changes: 46 additions & 0 deletions packages/bot/utils/queue.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
class Queue {
static queue = []
static pendingPromise = false

static enqueue(promise) {
return new Promise((resolve, reject) => {
this.queue.push({
promise,
resolve,
reject,
})
this.dequeue()
})
}

static dequeue() {
if (this.workingOnPromise) {
return false
}
const item = this.queue.shift()
if (!item) {
return false
}
try {
this.workingOnPromise = true
item.promise()
.then((value) => {
this.workingOnPromise = false
item.resolve(value)
this.dequeue()
})
.catch((err) => {
this.workingOnPromise = false
item.reject(err)
this.dequeue()
})
} catch (err) {
this.workingOnPromise = false
item.reject(err)
this.dequeue()
}
return true
}
}

module.exports = Queue

0 comments on commit 73caf09

Please sign in to comment.