From 52533d4b38cc39561e51bbd3ffb47f00de9a5cf1 Mon Sep 17 00:00:00 2001 From: Alan Mosko Date: Thu, 27 Jul 2023 09:23:44 -0300 Subject: [PATCH 1/3] =?UTF-8?q?Adi=C3=A7=C3=A3o=20de=20Get=20Last=20Messag?= =?UTF-8?q?e=20e=20Archive=20por=20Chat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/validate/validate.schema.ts | 3 +- src/whatsapp/dto/chat.dto.ts | 5 +- src/whatsapp/services/whatsapp.service.ts | 62 +++++++++++++++++++---- 3 files changed, 56 insertions(+), 14 deletions(-) diff --git a/src/validate/validate.schema.ts b/src/validate/validate.schema.ts index 8c1a4667..feb5da59 100644 --- a/src/validate/validate.schema.ts +++ b/src/validate/validate.schema.ts @@ -508,6 +508,7 @@ export const archiveChatSchema: JSONSchema7 = { $id: v4(), type: 'object', properties: { + chat: { type: 'string' }, lastMessage: { type: 'object', properties: { @@ -528,7 +529,7 @@ export const archiveChatSchema: JSONSchema7 = { }, archive: { type: 'boolean', enum: [true, false] }, }, - required: ['lastMessage', 'archive'], + required: ['archive'], }; export const deleteMessageSchema: JSONSchema7 = { diff --git a/src/whatsapp/dto/chat.dto.ts b/src/whatsapp/dto/chat.dto.ts index f2f9b1cc..f8a5da5f 100644 --- a/src/whatsapp/dto/chat.dto.ts +++ b/src/whatsapp/dto/chat.dto.ts @@ -53,13 +53,14 @@ export class ReadMessageDto { read_messages: Key[]; } -class LastMessage { +export class LastMessage { key: Key; messageTimestamp?: number; } export class ArchiveChatDto { - lastMessage: LastMessage; + lastMessage?: LastMessage; + chat?: string; archive: boolean; } diff --git a/src/whatsapp/services/whatsapp.service.ts b/src/whatsapp/services/whatsapp.service.ts index 6de7d847..9729ceed 100644 --- a/src/whatsapp/services/whatsapp.service.ts +++ b/src/whatsapp/services/whatsapp.service.ts @@ -74,6 +74,7 @@ import { getBase64FromMediaMessageDto, NumberBusiness, OnWhatsAppDto, + LastMessage, PrivacySettingDto, ReadMessageDto, WhatsAppNumberDto, @@ -2345,23 +2346,62 @@ export class WAStartupService { throw new InternalServerErrorException('Read messages fail', error.toString()); } } + + public async getLastMessage(number: string) { + const messages = await this.fetchMessages({ + where: { + key: { + remoteJid: number + }, + owner: this.instance.name + } + }); + + let lastMessage = messages.pop(); + + for (const message of messages) { + if ( + message.messageTimestamp?.low >= lastMessage.messageTimestamp?.low + || message.messageTimestamp >= lastMessage.messageTimestamp + ) { + lastMessage = message; + } + } + + return lastMessage as unknown as LastMessage; + } public async archiveChat(data: ArchiveChatDto) { this.logger.verbose('Archiving chat'); try { - data.lastMessage.messageTimestamp = data.lastMessage?.messageTimestamp ?? Date.now(); + let last_message = data.lastMessage; + let number = data.chat; + + if(!last_message && number) { + last_message = await this.getLastMessage(number); + } else { + last_message = data.lastMessage; + last_message.messageTimestamp = last_message?.messageTimestamp ?? Date.now(); + number = last_message?.key?.remoteJid; + } + + if (!last_message || Object.keys(last_message).length === 0) { + throw new NotFoundException("Last message not found"); + } + console.log(last_message); + await this.client.chatModify( { - archive: data.archive, - lastMessages: [data.lastMessage], - }, - data.lastMessage.key.remoteJid, - ); - - return { - chatId: data.lastMessage.key.remoteJid, - archived: true, - }; + archive: data.archive, + lastMessages: [last_message] + }, + this.createJid(number) + ); + + return { + chatId: number, + archived: true, + }; } catch (error) { throw new InternalServerErrorException({ archived: false, From 3ae694430796a68112d049023cf98fe1bcf11eaa Mon Sep 17 00:00:00 2001 From: Alan Mosko Date: Thu, 27 Jul 2023 09:24:38 -0300 Subject: [PATCH 2/3] Update whatsapp.service.ts --- src/whatsapp/services/whatsapp.service.ts | 60 +++++++++++------------ 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/src/whatsapp/services/whatsapp.service.ts b/src/whatsapp/services/whatsapp.service.ts index 9729ceed..eea9ede1 100644 --- a/src/whatsapp/services/whatsapp.service.ts +++ b/src/whatsapp/services/whatsapp.service.ts @@ -72,9 +72,9 @@ import { ArchiveChatDto, DeleteMessage, getBase64FromMediaMessageDto, + LastMessage, NumberBusiness, OnWhatsAppDto, - LastMessage, PrivacySettingDto, ReadMessageDto, WhatsAppNumberDto, @@ -2346,28 +2346,28 @@ export class WAStartupService { throw new InternalServerErrorException('Read messages fail', error.toString()); } } - + public async getLastMessage(number: string) { const messages = await this.fetchMessages({ - where: { - key: { - remoteJid: number - }, - owner: this.instance.name - } - }); - + where: { + key: { + remoteJid: number, + }, + owner: this.instance.name, + }, + }); + let lastMessage = messages.pop(); - + for (const message of messages) { if ( - message.messageTimestamp?.low >= lastMessage.messageTimestamp?.low - || message.messageTimestamp >= lastMessage.messageTimestamp + message.messageTimestamp?.low >= lastMessage.messageTimestamp?.low || + message.messageTimestamp >= lastMessage.messageTimestamp ) { lastMessage = message; } } - + return lastMessage as unknown as LastMessage; } @@ -2376,32 +2376,32 @@ export class WAStartupService { try { let last_message = data.lastMessage; let number = data.chat; - - if(!last_message && number) { - last_message = await this.getLastMessage(number); + + if (!last_message && number) { + last_message = await this.getLastMessage(number); } else { last_message = data.lastMessage; last_message.messageTimestamp = last_message?.messageTimestamp ?? Date.now(); number = last_message?.key?.remoteJid; } - + if (!last_message || Object.keys(last_message).length === 0) { - throw new NotFoundException("Last message not found"); + throw new NotFoundException('Last message not found'); } console.log(last_message); - + await this.client.chatModify( { - archive: data.archive, - lastMessages: [last_message] - }, - this.createJid(number) - ); - - return { - chatId: number, - archived: true, - }; + archive: data.archive, + lastMessages: [last_message], + }, + this.createJid(number), + ); + + return { + chatId: number, + archived: true, + }; } catch (error) { throw new InternalServerErrorException({ archived: false, From 1ce30f8431254406ca7234a633140dc1ccddfa47 Mon Sep 17 00:00:00 2001 From: Alan Mosko Date: Thu, 27 Jul 2023 10:20:18 -0300 Subject: [PATCH 3/3] Update whatsapp.service.ts --- src/whatsapp/services/whatsapp.service.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/whatsapp/services/whatsapp.service.ts b/src/whatsapp/services/whatsapp.service.ts index eea9ede1..b596525b 100644 --- a/src/whatsapp/services/whatsapp.service.ts +++ b/src/whatsapp/services/whatsapp.service.ts @@ -2360,10 +2360,7 @@ export class WAStartupService { let lastMessage = messages.pop(); for (const message of messages) { - if ( - message.messageTimestamp?.low >= lastMessage.messageTimestamp?.low || - message.messageTimestamp >= lastMessage.messageTimestamp - ) { + if (message.messageTimestamp >= lastMessage.messageTimestamp) { lastMessage = message; } }