From bf74d1cb4beacf3ce53badc63d702f9b8a7e3a4c Mon Sep 17 00:00:00 2001 From: Adi Aharoni Date: Mon, 6 Apr 2026 08:57:22 +0300 Subject: [PATCH] fix(revoke): use protocolMessageKey for original message ID read the original message key directly from protocolMessageKey instead of relying on the broken last_message cache that often failed to match. --- src/Client.js | 46 ++++++++++++++++++---------------------------- 1 file changed, 18 insertions(+), 28 deletions(-) diff --git a/src/Client.js b/src/Client.js index 145e110466..48aa1267c1 100644 --- a/src/Client.js +++ b/src/Client.js @@ -664,35 +664,28 @@ class Client extends EventEmitter { }, ); - let last_message; - await exposeFunctionIfAbsent( this.pupPage, 'onChangeMessageTypeEvent', (msg) => { - if (msg.type === 'revoked') { - const message = new Message(this, msg); - let revoked_msg; - if (last_message && msg.id.id === last_message.id.id) { - revoked_msg = new Message(this, last_message); - - if (message.protocolMessageKey) - revoked_msg.id = { ...message.protocolMessageKey }; - } + const originalKey = msg.protocolMessageKey; + const message = new Message(this, { ...msg, id: originalKey }); + const revoked_msg = originalKey + ? new Message(this, { id: originalKey }) + : undefined; - /** - * Emitted when a message is deleted for everyone in the chat. - * @event Client#message_revoke_everyone - * @param {Message} message The message that was revoked, in its current state. It will not contain the original message's data. - * @param {?Message} revoked_msg The message that was revoked, before it was revoked. It will contain the message's original data. - * Note that due to the way this data is captured, it may be possible that this param will be undefined. - */ - this.emit( - Events.MESSAGE_REVOKED_EVERYONE, - message, - revoked_msg, - ); - } + /** + * Emitted when a message is deleted for everyone in the chat. + * @event Client#message_revoke_everyone + * @param {Message} message The message that was revoked, in its current state. It will not contain the original message's data. + * @param {?Message} revoked_msg The message that was revoked, before it was revoked. It will contain the message's original data. + * Note that due to the way this data is captured, it may be possible that this param will be undefined. + */ + this.emit( + Events.MESSAGE_REVOKED_EVERYONE, + message, + revoked_msg, + ); }, ); @@ -700,10 +693,6 @@ class Client extends EventEmitter { this.pupPage, 'onChangeMessageEvent', (msg) => { - if (msg.type !== 'revoked') { - last_message = msg; - } - /** * The event notification that is received when one of * the group participants changes their phone number. @@ -1032,6 +1021,7 @@ class Client extends EventEmitter { window.onChangeMessageEvent(window.WWebJS.getMessageModel(msg)); }); Msg.on('change:type', (msg) => { + if (msg.type !== 'revoked') return; window.onChangeMessageTypeEvent( window.WWebJS.getMessageModel(msg), );