update WA version + presence update tracking

This commit is contained in:
Adhiraj
2020-09-19 16:56:29 +05:30
parent ac0eb6fc10
commit 5064ecc144
3 changed files with 20 additions and 5 deletions

View File

@@ -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)

View File

@@ -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. */

View File

@@ -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)