More robust read receipt

This commit is contained in:
Adhiraj
2020-09-11 16:36:11 +05:30
parent d9d494ce2a
commit 8173864bcd
2 changed files with 7 additions and 26 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "@adiwajshing/baileys", "name": "@adiwajshing/baileys",
"version": "3.0.1", "version": "3.1.0",
"description": "WhatsApp Web API", "description": "WhatsApp Web API",
"homepage": "https://github.com/adiwajshing/Baileys", "homepage": "https://github.com/adiwajshing/Baileys",
"main": "lib/WAConnection/WAConnection.js", "main": "lib/WAConnection/WAConnection.js",

View File

@@ -54,28 +54,9 @@ export class WAConnection extends Base {
if (type === 'unread') await this.sendReadReceipt (jid, null, -2) if (type === 'unread') await this.sendReadReceipt (jid, null, -2)
else if (chat.count !== 0) { else if (chat.count !== 0) {
let messageID: string const {messages} = await this.loadMessages (jid, 1)
await this.sendReadReceipt (jid, messages[0].key, Math.abs(chat.count))
let messages: WAMessage[]
let cursor: any
messages = chat.messages
cursor = messages[messages.length-1]?.key
do {
const m = messages.reverse().find (m => !m.key.fromMe)
if (m) messageID = m.key.id
const obj = await this.loadMessages (jid, 10, cursor)
messages = obj.messages
cursor = obj.cursor
if (messages.length === 0) throw new BaileysError ('no valid message found to read', { status: 404 })
} while (!messageID)
await this.sendReadReceipt (jid, messageID, Math.abs(chat.count))
} }
chat.count = type === 'unread' ? -1 : 0 chat.count = type === 'unread' ? -1 : 0
this.emit ('chat-update', {jid, count: chat.count}) this.emit ('chat-update', {jid, count: chat.count})
} }
@@ -83,15 +64,15 @@ export class WAConnection extends Base {
* Sends a read receipt for a given message; * Sends a read receipt for a given message;
* does not update the chat do @see chatRead * does not update the chat do @see chatRead
* @param jid the ID of the person/group whose message you want to mark read * @param jid the ID of the person/group whose message you want to mark read
* @param messageID optionally, the message ID * @param messageKey the key of the message
* @param count number of messages to read, set to < 0 to unread a message * @param count number of messages to read, set to < 0 to unread a message
*/ */
async sendReadReceipt(jid: string, messageID: string, count: number) { async sendReadReceipt(jid: string, messageKey: { id?: string, fromMe?: boolean }, count: number) {
const attributes = { const attributes = {
jid: jid, jid: jid,
count: count.toString(), count: count.toString(),
index: messageID, index: messageKey?.id,
owner: messageID ? 'false' : null owner: messageKey?.fromMe?.toString()
} }
const read = await this.setQuery ([['read', attributes, null]]) const read = await this.setQuery ([['read', attributes, null]])
return read return read