Configurcion de personalidad
This commit is contained in:
55
mvp/Whatsapp-bot/src/whatsapp/whatsapp-debounce.service.ts
Normal file
55
mvp/Whatsapp-bot/src/whatsapp/whatsapp-debounce.service.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
@Injectable()
|
||||
export class WhatsappDebounceService {
|
||||
private pendingMessages: Map<
|
||||
string,
|
||||
{
|
||||
timer: NodeJS.Timeout;
|
||||
texts: string[];
|
||||
}
|
||||
> = new Map();
|
||||
|
||||
private readonly DEBOUNCE_MS = 3000;
|
||||
|
||||
/**
|
||||
* Agrega un mensaje al buffer del usuario.
|
||||
* @param userId Identificador único del usuario (ej. JID)
|
||||
* @param messageText Texto del mensaje
|
||||
* @param callback Función a ejecutar cuando se complete el debounce (recibe el texto combinado)
|
||||
*/
|
||||
async add(
|
||||
userId: string,
|
||||
messageText: string,
|
||||
callback: (combinedMessage: string) => Promise<void>,
|
||||
): Promise<void> {
|
||||
if (this.pendingMessages.has(userId)) {
|
||||
const pending = this.pendingMessages.get(userId)!;
|
||||
clearTimeout(pending.timer);
|
||||
pending.texts.push(messageText);
|
||||
|
||||
pending.timer = setTimeout(async () => {
|
||||
await this.flush(userId, callback);
|
||||
}, this.DEBOUNCE_MS);
|
||||
} else {
|
||||
this.pendingMessages.set(userId, {
|
||||
timer: setTimeout(async () => {
|
||||
await this.flush(userId, callback);
|
||||
}, this.DEBOUNCE_MS),
|
||||
texts: [messageText],
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private async flush(
|
||||
userId: string,
|
||||
callback: (combinedMessage: string) => Promise<void>,
|
||||
): Promise<void> {
|
||||
const pending = this.pendingMessages.get(userId);
|
||||
if (!pending) return;
|
||||
|
||||
this.pendingMessages.delete(userId);
|
||||
const combinedMessage = pending.texts.join(' ');
|
||||
await callback(combinedMessage);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user