feat: add support for splitMessages and timePerChar in EvolutionBotService for WhatsApp message handling

This commit is contained in:
Thélio Matheus 2024-10-10 21:51:02 -03:00
parent 9a034d323e
commit cd2a687751

View File

@ -119,6 +119,7 @@ export class EvolutionBotService {
let match: RegExpExecArray | null; let match: RegExpExecArray | null;
const getMediaType = (url: string): string | null => { const getMediaType = (url: string): string | null => {
const extension = url.split('.').pop()?.toLowerCase(); const extension = url.split('.').pop()?.toLowerCase();
const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp']; const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'];
@ -189,45 +190,52 @@ export class EvolutionBotService {
} }
} }
if (textBuffer.trim()) { const splitMessages = settings.splitMessages ?? false;
const timePerChar = settings.timePerChar ?? 0;
const minDelay = 1000;
const maxDelay = 20000;
if (splitMessages) {
const multipleMessages = textBuffer.trim().split("\n\n"); const multipleMessages = textBuffer.trim().split("\n\n");
if (multipleMessages) { for (let index = 0; index < multipleMessages.length; index++) {
for (let index = 0; index < multipleMessages.length; index++) { const message = multipleMessages[index];
const message = multipleMessages[index];
const delay = Math.min(Math.max(message.length * timePerChar, minDelay), maxDelay);
const delayPerChar = 200
const minDelay = 1000 if (instance.integration === Integration.WHATSAPP_BAILEYS) {
const maxDelay = 20000 await instance.client.presenceSubscribe(remoteJid);
const delay = Math.min(Math.max(message.length * delayPerChar, minDelay), maxDelay); await instance.client.sendPresenceUpdate('composing', remoteJid);
}
await new Promise<void>((resolve) => {
if (instance.integration === Integration.WHATSAPP_BAILEYS) { setTimeout(async () => {
await instance.client.presenceSubscribe(remoteJid); await instance.textMessage(
await instance.client.sendPresenceUpdate('composing', remoteJid); {
} number: remoteJid.split('@')[0],
delay: settings?.delayMessage || 1000,
await new Promise<void>((resolve) => { text: message,
setTimeout(async () => { },
await instance.textMessage( false
{ );
number: remoteJid.split('@')[0], resolve();
delay: settings?.delayMessage || 1000, }, delay);
text: message, });
},
false if (instance.integration === Integration.WHATSAPP_BAILEYS) {
); await instance.client.sendPresenceUpdate('paused', remoteJid);
resolve();
}, delay);
});
if (instance.integration === Integration.WHATSAPP_BAILEYS) {
await instance.client.sendPresenceUpdate('paused', remoteJid);
}
} }
} }
} else {
await instance.textMessage(
{
number: remoteJid.split('@')[0],
delay: settings?.delayMessage || 1000,
text: textBuffer.trim(),
},
false
);
} }
sendTelemetry('/message/sendText'); sendTelemetry('/message/sendText');