From e6b0addb6caa31e29e11d496e51f02175b0901df Mon Sep 17 00:00:00 2001 From: Davidson Gomes Date: Sun, 16 Jul 2023 18:16:05 -0300 Subject: [PATCH] feat: added messages.delete event --- CHANGELOG.md | 1 + Docker/.env.example | 1 + Dockerfile | 1 + src/config/env.config.ts | 2 ++ src/dev-env.yml | 1 + src/validate/validate.schema.ts | 2 ++ src/whatsapp/services/whatsapp.service.ts | 17 ++++++++++++----- src/whatsapp/types/wa.types.ts | 1 + 8 files changed, 21 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 633373c0..32b2bb26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ * Now it's getting the API URL directly in the request, no longer need the variable in the env file * Removed link preview endpoint, now it's done automatically from sending conventional text * Added group membership validation before sending message to groups +* Added messages.delete event # 1.2.2 (2023-07-15 09:36) diff --git a/Docker/.env.example b/Docker/.env.example index f4e665aa..3c0bfb9e 100644 --- a/Docker/.env.example +++ b/Docker/.env.example @@ -55,6 +55,7 @@ WEBHOOK_EVENTS_QRCODE_UPDATED=true WEBHOOK_EVENTS_MESSAGES_SET=true WEBHOOK_EVENTS_MESSAGES_UPSERT=true WEBHOOK_EVENTS_MESSAGES_UPDATE=true +WEBHOOK_EVENTS_MESSAGES_DELETE=true WEBHOOK_EVENTS_SEND_MESSAGE=true WEBHOOK_EVENTS_CONTACTS_SET=true WEBHOOK_EVENTS_CONTACTS_UPSERT=true diff --git a/Dockerfile b/Dockerfile index a7e558f3..497d1507 100644 --- a/Dockerfile +++ b/Dockerfile @@ -59,6 +59,7 @@ ENV WEBHOOK_EVENTS_QRCODE_UPDATED=$WEBHOOK_EVENTS_QRCODE_UPDATED ENV WEBHOOK_EVENTS_MESSAGES_SET=$WEBHOOK_EVENTS_MESSAGES_SET ENV WEBHOOK_EVENTS_MESSAGES_UPSERT=$WEBHOOK_EVENTS_MESSAGES_UPSERT ENV WEBHOOK_EVENTS_MESSAGES_UPDATE=$WEBHOOK_EVENTS_MESSAGES_UPDATE +ENV WEBHOOK_EVENTS_MESSAGES_DELETE=$WEBHOOK_EVENTS_MESSAGES_DELETE ENV WEBHOOK_EVENTS_SEND_MESSAGE=$WEBHOOK_EVENTS_SEND_MESSAGE ENV WEBHOOK_EVENTS_CONTACTS_SET=$WEBHOOK_EVENTS_CONTACTS_SET ENV WEBHOOK_EVENTS_CONTACTS_UPSERT=$WEBHOOK_EVENTS_CONTACTS_UPSERT diff --git a/src/config/env.config.ts b/src/config/env.config.ts index 76bb55ea..ac608ede 100644 --- a/src/config/env.config.ts +++ b/src/config/env.config.ts @@ -76,6 +76,7 @@ export type EventsWebhook = { MESSAGES_SET: boolean; MESSAGES_UPSERT: boolean; MESSAGES_UPDATE: boolean; + MESSAGES_DELETE: boolean; SEND_MESSAGE: boolean; CONTACTS_SET: boolean; CONTACTS_UPDATE: boolean; @@ -238,6 +239,7 @@ export class ConfigService { MESSAGES_SET: process.env?.WEBHOOK_EVENTS_MESSAGES_SET === 'true', MESSAGES_UPSERT: process.env?.WEBHOOK_EVENTS_MESSAGES_UPSERT === 'true', MESSAGES_UPDATE: process.env?.WEBHOOK_EVENTS_MESSAGES_UPDATE === 'true', + MESSAGES_DELETE: process.env?.WEBHOOK_EVENTS_MESSAGES_DELETE === 'true', SEND_MESSAGE: process.env?.WEBHOOK_EVENTS_SEND_MESSAGE === 'true', CONTACTS_SET: process.env?.WEBHOOK_EVENTS_CONTACTS_SET === 'true', CONTACTS_UPDATE: process.env?.WEBHOOK_EVENTS_CONTACTS_UPDATE === 'true', diff --git a/src/dev-env.yml b/src/dev-env.yml index 244ff73d..1f43c2ad 100644 --- a/src/dev-env.yml +++ b/src/dev-env.yml @@ -96,6 +96,7 @@ WEBHOOK: MESSAGES_SET: true MESSAGES_UPSERT: true MESSAGES_UPDATE: true + MESSAGES_DELETE: true SEND_MESSAGE: true CONTACTS_SET: true CONTACTS_UPSERT: true diff --git a/src/validate/validate.schema.ts b/src/validate/validate.schema.ts index 21d206d6..77e05f19 100644 --- a/src/validate/validate.schema.ts +++ b/src/validate/validate.schema.ts @@ -39,6 +39,7 @@ export const instanceNameSchema: JSONSchema7 = { 'MESSAGES_SET', 'MESSAGES_UPSERT', 'MESSAGES_UPDATE', + 'MESSAGES_DELETE', 'SEND_MESSAGE', 'CONTACTS_SET', 'CONTACTS_UPSERT', @@ -828,6 +829,7 @@ export const webhookSchema: JSONSchema7 = { 'MESSAGES_SET', 'MESSAGES_UPSERT', 'MESSAGES_UPDATE', + 'MESSAGES_DELETE', 'SEND_MESSAGE', 'CONTACTS_SET', 'CONTACTS_UPSERT', diff --git a/src/whatsapp/services/whatsapp.service.ts b/src/whatsapp/services/whatsapp.service.ts index a10c6223..01d0323e 100644 --- a/src/whatsapp/services/whatsapp.service.ts +++ b/src/whatsapp/services/whatsapp.service.ts @@ -1116,6 +1116,7 @@ export class WAStartupService { }, 'messages.update': async (args: WAMessageUpdate[], database: Database) => { + console.log(args); this.logger.verbose('Event received: messages.update'); const status: Record = { 0: 'ERROR', @@ -1126,11 +1127,7 @@ export class WAStartupService { 5: 'PLAYED', }; for await (const { key, update } of args) { - if ( - key.remoteJid !== 'status@broadcast' && - !key?.remoteJid?.match(/(:\d+)/) && - key.fromMe - ) { + if (key.remoteJid !== 'status@broadcast' && !key?.remoteJid?.match(/(:\d+)/)) { this.logger.verbose('Message update is valid'); let pollUpdates: any; @@ -1150,6 +1147,16 @@ export class WAStartupService { } } + if (status[update.status] === 'READ' && !key.fromMe) return; + + if (update.message === null && update.status === undefined) { + this.logger.verbose('Message deleted'); + + this.logger.verbose('Sending data to webhook in event MESSAGE_DELETE'); + await this.sendDataWebhook(Events.MESSAGES_DELETE, key); + return; + } + const message: MessageUpdateRaw = { ...key, status: status[update.status], diff --git a/src/whatsapp/types/wa.types.ts b/src/whatsapp/types/wa.types.ts index 1ebe3b40..169df515 100644 --- a/src/whatsapp/types/wa.types.ts +++ b/src/whatsapp/types/wa.types.ts @@ -9,6 +9,7 @@ export enum Events { MESSAGES_SET = 'messages.set', MESSAGES_UPSERT = 'messages.upsert', MESSAGES_UPDATE = 'messages.update', + MESSAGES_DELETE = 'messages.delete', SEND_MESSAGE = 'send.message', CONTACTS_SET = 'contacts.set', CONTACTS_UPSERT = 'contacts.upsert',