From 5064ecc14463853e57a0398d622caef168e8fcaa Mon Sep 17 00:00:00 2001 From: Adhiraj Date: Sat, 19 Sep 2020 16:56:29 +0530 Subject: [PATCH] update WA version + presence update tracking --- src/BrowserMessageDecoding.ts | 3 +++ src/WAConnection/0.Base.ts | 2 +- src/WAConnection/4.Events.ts | 20 ++++++++++++++++---- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/BrowserMessageDecoding.ts b/src/BrowserMessageDecoding.ts index 3dd50d4..200b73e 100644 --- a/src/BrowserMessageDecoding.ts +++ b/src/BrowserMessageDecoding.ts @@ -32,10 +32,13 @@ const list = wsMessages.map ((item, i) => { const buffer = item.data.includes(',') ? item.data : Buffer.from (item.data, 'base64') try { const [tag, json, binaryTags] = decrypt (buffer, item.type === 'send') + + if (json && json[1] && json[1].add) return return {tag, json: json && JSON.stringify(json), binaryTags} } catch (error) { return { error: error.message, data: buffer.toString('utf-8') } } }) +.filter (Boolean) const str = JSON.stringify (list, null, '\t') fs.writeFileSync ('decoded-ws.json', str) \ No newline at end of file diff --git a/src/WAConnection/0.Base.ts b/src/WAConnection/0.Base.ts index c956ec5..7e39a50 100644 --- a/src/WAConnection/0.Base.ts +++ b/src/WAConnection/0.Base.ts @@ -30,7 +30,7 @@ import { STATUS_CODES } from 'http' export class WAConnection extends EventEmitter { /** The version of WhatsApp Web we're telling the servers we are */ - version: [number, number, number] = [2, 2035, 14] + version: [number, number, number] = [2, 2037, 6] /** The Browser we're telling the WhatsApp Web servers we are */ browserDescription: [string, string, string] = Utils.Browsers.baileys ('Chrome') /** Metadata like WhatsApp id, name set on WhatsApp etc. */ diff --git a/src/WAConnection/4.Events.ts b/src/WAConnection/4.Events.ts index fc21e18..8398844 100644 --- a/src/WAConnection/4.Events.ts +++ b/src/WAConnection/4.Events.ts @@ -1,6 +1,6 @@ import * as QR from 'qrcode-terminal' import { WAConnection as Base } from './3.Connect' -import { WAMessageStatusUpdate, WAMessage, WAContact, WAChat, WAMessageProto, WA_MESSAGE_STUB_TYPE, WA_MESSAGE_STATUS_TYPE, MessageLogLevel, PresenceUpdate, BaileysEvent, DisconnectReason, WANode, WAOpenResult } from './Constants' +import { WAMessageStatusUpdate, WAMessage, WAContact, WAChat, WAMessageProto, WA_MESSAGE_STUB_TYPE, WA_MESSAGE_STATUS_TYPE, MessageLogLevel, PresenceUpdate, BaileysEvent, DisconnectReason, WANode, WAOpenResult, Presence } from './Constants' import { whatsappID, unixTimestampSeconds, isGroupID, toNumber } from './Utils' export class WAConnection extends Base { @@ -10,17 +10,29 @@ export class WAConnection extends Base { // new messages this.registerCallback(['action', 'add:relay', 'message'], json => { const message = json[2][0][2] as WAMessage + const jid = whatsappID( message.key.remoteJid ) + if (jid.endsWith('@s.whatsapp.net')) { + const contact = this.contacts[jid] + if (contact && contact?.lastKnownPresence === Presence.composing) { + contact.lastKnownPresence = Presence.available + } + } this.chatAddMessageAppropriate (message) }) // presence updates this.registerCallback('Presence', json => { const update = json[1] as PresenceUpdate - const jid = whatsappID(update.participant || update.id) + + const jid = whatsappID(update.id) const contact = this.contacts[jid] - if (!isGroupID(jid) && contact) { - contact.lastKnownPresence = update.type + if (jid.endsWith('@s.whatsapp.net')) { // if its a single chat if (update.t) contact.lastSeen = +update.t + else if (update.type === Presence.unavailable && contact.lastKnownPresence !== Presence.unavailable) { + contact.lastSeen = unixTimestampSeconds() + } + contact.lastKnownPresence = update.type } + this.emit('user-presence-update', update) }) // If a message has been updated (usually called when a video message gets its upload url)