From e7c803fdd1e5bb8c43b9cdc8afdf329c4546b685 Mon Sep 17 00:00:00 2001 From: Lucas Batista Date: Mon, 11 Nov 2024 16:05:36 -0300 Subject: [PATCH] LN6qDBu9 - add message to contact database --- src/api/models/contact.model.ts | 2 ++ .../channels/whatsapp.baileys.service.ts | 29 ++++++++++++++----- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/api/models/contact.model.ts b/src/api/models/contact.model.ts index a915bb19..beab8e41 100644 --- a/src/api/models/contact.model.ts +++ b/src/api/models/contact.model.ts @@ -8,6 +8,7 @@ export class ContactRaw { id?: string; profilePictureUrl?: string; owner: string; + lastMessage?: object; } type ContactRawBoolean = { @@ -21,6 +22,7 @@ const contactSchema = new Schema({ id: { type: String, required: true, minlength: 1 }, profilePictureUrl: { type: String, minlength: 1 }, owner: { type: String, required: true, minlength: 1 }, + lastMessage: { type: Object }, }); export const ContactModel = dbserver?.model(ContactRaw.name, contactSchema, 'contacts'); diff --git a/src/api/services/channels/whatsapp.baileys.service.ts b/src/api/services/channels/whatsapp.baileys.service.ts index c9d4fefb..1fb03432 100644 --- a/src/api/services/channels/whatsapp.baileys.service.ts +++ b/src/api/services/channels/whatsapp.baileys.service.ts @@ -143,7 +143,7 @@ export class BaileysStartupService extends ChannelStartupService { public readonly cache: CacheService, public readonly chatwootCache: CacheService, public readonly baileysCache: CacheService, - private readonly providerFiles: ProviderFiles, + private readonly providerFiles: ProviderFiles ) { super(configService, eventEmitter, repository, chatwootCache); this.logger.verbose('BaileysStartupService initialized'); @@ -1100,7 +1100,9 @@ export class BaileysStartupService extends ChannelStartupService { received.messageTimestamp = received.messageTimestamp?.toNumber(); } - if (settings?.groups_ignore && received.key.remoteJid.includes('@g.us')) { + const isGroup = received.key.remoteJid.includes('@g.us') + + if (settings?.groups_ignore && isGroup) { this.logger.verbose('group ignored'); return; } @@ -1225,11 +1227,23 @@ export class BaileysStartupService extends ChannelStartupService { where: { owner: this.instance.name, id: received.key.remoteJid }, }); + const sender = received.pushName + + if (isGroup){ + const group = await waMonitor.waInstances[this.instance.name].findGroup({ groupJid: received.key.remoteJid }, 'inner') + received.pushName = group ? group.subject : null + } + + const lastMessage = {...messageRaw, sender: sender} + if ('base64' in lastMessage.message) + delete lastMessage.message.base64 + const contactRaw: ContactRaw = { id: received.key.remoteJid, pushName: received.pushName, profilePictureUrl: (await this.profilePicture(received.key.remoteJid)).profilePictureUrl, owner: this.instance.name, + lastMessage: lastMessage }; if (contactRaw.id === 'status@broadcast') { @@ -1241,13 +1255,14 @@ export class BaileysStartupService extends ChannelStartupService { this.logger.verbose('Contact found in database'); const contactRaw: ContactRaw = { id: received.key.remoteJid, - pushName: contact[0].pushName || received.pushName, + pushName: isGroup ? received.pushName : contact[0].pushName || received.pushName, profilePictureUrl: (await this.profilePicture(received.key.remoteJid)).profilePictureUrl, owner: this.instance.name, + lastMessage: lastMessage }; - if (received?.key?.fromMe === true){ - contactRaw.pushName = null + if (received?.key?.fromMe === true && !isGroup){ + contactRaw.pushName = contact[0].pushName } this.logger.verbose('Sending data to webhook in event CONTACTS_UPDATE'); @@ -1263,7 +1278,7 @@ export class BaileysStartupService extends ChannelStartupService { this.logger.verbose('Updating contact in database'); - if(contactRaw.pushName) + //if(contactRaw.pushName) await this.repository.contact.update([contactRaw], this.instance.name, database.SAVE_DATA.CONTACTS); return; } @@ -1275,7 +1290,7 @@ export class BaileysStartupService extends ChannelStartupService { this.logger.verbose('Inserting contact in database'); - if (received?.key?.fromMe === true) + if (received?.key?.fromMe === true && !isGroup) contactRaw.pushName = null; this.repository.contact.insert([contactRaw], this.instance.name, database.SAVE_DATA.CONTACTS);