From d7d0e5ec82416d6aa40212fa8aa9c3fff046ed65 Mon Sep 17 00:00:00 2001 From: Davidson Gomes Date: Sun, 2 Jul 2023 19:58:05 -0300 Subject: [PATCH] Correction in decryption of poll votes --- CHANGELOG.md | 2 + src/whatsapp/models/message.model.ts | 1 + src/whatsapp/services/whatsapp.service.ts | 47 ++++++++++++----------- 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c92386f0..397a3ada 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ ### Fixed * Added timestamp internally in urls to avoid caching +* Correction in decryption of poll votes +* Change in the way the api sent and saved the sent messages, now it goes in the messages.upsert event # 1.1.2 (2023-06-28 13:43) diff --git a/src/whatsapp/models/message.model.ts b/src/whatsapp/models/message.model.ts index f880ebcc..4a684e53 100644 --- a/src/whatsapp/models/message.model.ts +++ b/src/whatsapp/models/message.model.ts @@ -50,6 +50,7 @@ export class MessageUpdateRaw { datetime?: number; status?: wa.StatusMessage; owner: string; + pollUpdates?: any; } const messageUpdateSchema = new Schema({ diff --git a/src/whatsapp/services/whatsapp.service.ts b/src/whatsapp/services/whatsapp.service.ts index e8267147..ca38cbeb 100644 --- a/src/whatsapp/services/whatsapp.service.ts +++ b/src/whatsapp/services/whatsapp.service.ts @@ -135,6 +135,7 @@ export class WAStartupService { private readonly msgRetryCounterCache: CacheStore = new NodeCache(); private readonly userDevicesCache: CacheStore = new NodeCache(); private endSession = false; + private store = makeInMemoryStore({ logger: P({ level: 'error' }) }); public set instanceName(name: string) { if (!name) { @@ -440,6 +441,15 @@ export class WAStartupService { } } + private async getMessageStore(key: proto.IMessageKey) { + if (this.store) { + const msg = await this.store.loadMessage(key.remoteJid!, key.id!); + return msg?.message || undefined; + } + + return proto.Message.fromObject({}); + } + private cleanStore() { const cleanStore = this.configService.get('CLEAN_STORE'); const database = this.configService.get('DATABASE'); @@ -455,6 +465,7 @@ export class WAStartupService { this.instance.wuid, )}/*.json`, ); + this.store?.writeToFile(`${this.storePath}/baileys_store_multi.json`); } } } catch (error) {} @@ -487,7 +498,7 @@ export class WAStartupService { const session = this.configService.get('CONFIG_SESSION_PHONE'); const browser: WABrowserDescription = [session.CLIENT, session.NAME, release()]; - const store = makeInMemoryStore({ logger: P({ level: 'error' }) }); + this.store?.readFromFile(`${this.storePath}/baileys_store_multi.json`); const socketConfig: UserFacingSocketConfig = { auth: { @@ -505,7 +516,8 @@ export class WAStartupService { qrTimeout: 40_000, emitOwnEvents: false, msgRetryCounterCache: this.msgRetryCounterCache, - getMessage: this.getMessage as any, + getMessage: async (key) => + (await this.getMessageStore(key)) as Promise, generateHighQualityLinkPreview: true, syncFullHistory: true, userDevicesCache: this.userDevicesCache, @@ -538,6 +550,8 @@ export class WAStartupService { this.client = makeWASocket(socketConfig); + this.store?.bind(this.client.ev); + this.eventHandler(); return this.client; @@ -693,10 +707,6 @@ export class WAStartupService { this.sendDataWebhook(Events.MESSAGES_SET, [...messagesRaw]); - // await this.repository.message.insert( - // [...messagesRaw], - // database.SAVE_DATA.OLD_MESSAGE, - // ); messages = undefined; }, @@ -747,15 +757,14 @@ export class WAStartupService { }; for await (const { key, update } of args) { if (key.remoteJid !== 'status@broadcast' && !key?.remoteJid?.match(/(:\d+)/)) { + let pollUpdates: any; if (update.pollUpdates) { - const pollCreation = await this.getMessage(key); - console.log('pollCreation: ', pollCreation); + const pollCreation = await this.getMessageStore(key); if (pollCreation) { - const pollMessage = getAggregateVotesInPollMessage({ + pollUpdates = getAggregateVotesInPollMessage({ message: pollCreation as proto.IMessage, pollUpdates: update.pollUpdates, }); - console.log('pollMessage: ', pollMessage); } } @@ -764,6 +773,7 @@ export class WAStartupService { status: status[update.status], datetime: Date.now(), owner: this.instance.wuid, + pollUpdates, }; await this.sendDataWebhook(Events.MESSAGES_UPDATE, message); @@ -1043,17 +1053,10 @@ export class WAStartupService { messageSent['messageType'] = getContentType(messageSent.message); - this.logger.log(messageSent); - - this.sendDataWebhook(Events.SEND_MESSAGE, messageSent).catch((error) => - this.logger.error(error), - ); - this.repository.message - .insert( - [{ ...messageSent, owner: this.instance.wuid }], - this.configService.get('DATABASE').SAVE_DATA.NEW_MESSAGE, - ) - .catch((error) => this.logger.error(error)); + this.client.ev.emit('messages.upsert', { + messages: [messageSent], + type: 'notify', + }); return messageSent; } catch (error) { @@ -1465,8 +1468,6 @@ export class WAStartupService { ? m : ((await this.getMessage(m.key, true)) as proto.IWebMessageInfo); - console.log(msg); - for (const subtype of MessageSubtype) { if (msg.message[subtype]) { msg.message = msg.message[subtype].message;