Fast Entires
En muchos casos, los usuarios suelen escribir mensajes individuales en un corto per铆odo de tiempo. El comportamiento habitual del bot es responder a cada mensaje de forma independiente, lo que puede resultar un comportamiento molesto en algunos casos de uso.
Para este otro tipo de entornos puedes implementar una funcionalidad la cual puedes crear para tener un margen de 3000ms para que el usuario escriba un mensaje, y cada vez que escriba un mensaje en un tiempo inferior a 3000ms acumular谩 todos los mensajes y luego pasado el margen de tiempo el bot interpretar谩 todo como una sola conversaci贸n.
Aplicando esta implementaci贸n, lo que se consigue es que antes de pasar a la etapa de procesamiento, todos los mensajes independientes (3) se conviertan en uno (1) y se procesen como un mensaje independiente.
Gracias robmoncayonabux por compartir esta 煤til soluci贸n a un caso de uso muy particular.
En este ejemplo decimos 3000ms que equivale a 3 segundos pero puedes modificarlo a tu gusto en MESSAGE_GAP_SECONDS
interface Message {
text: string;
timestamp: number;
}
const messageQueue: Message[] = [];
const MESSAGE_GAP_SECONDS = 3000;
let messageTimer: NodeJS.Timeout | null = null;
/**
* Adds a message to the queue for later processing.
* @param messageText The text of the message to add to the queue.
* @returns A promise that resolves when the message queue is processed.
*/
async function enqueueMessage(messageText: string): Promise<void> {
messageQueue.push({ text: messageText, timestamp: Date.now() });
return new Promise((resolve) => {
if (messageTimer) {
clearTimeout(messageTimer);
}
messageTimer = setTimeout(() => {
resolve(processMessageQueue());
}, MESSAGE_GAP_SECONDS);
});
}
/**
* Processes the message queue by combining all messages into a single string and clearing the queue.
* @returns The combined string of all messages in the queue.
*/
function processMessageQueue(): string {
if (messageQueue.length === 0) {
return '';
}
const combinedMessage = messageQueue.map(message => message.text).join(" ");
messageQueue.length = 0;
return combinedMessage;
}
export { enqueueMessage, processMessageQueue };