diff --git a/example.js b/example.js index e2a615f..a7dfae1 100644 --- a/example.js +++ b/example.js @@ -127,6 +127,19 @@ client.on('message_create', (msg) => { } }); +client.on('message_revoke_everyone', async (after, before) => { + // Fired whenever a message is deleted by anyone (including you) + console.log(after); // message after it was deleted. + if (before) { + console.log(before); // message before it was deleted. + } +}); + +client.on('message_revoke_me', async (msg) => { + // Fired whenever a message is only deleted in your own view. + console.log(msg.body); // message before it was deleted. +}); + client.on('disconnected', () => { console.log('Client was logged out'); }); diff --git a/src/Client.js b/src/Client.js index 7a7c214..fe07da8 100644 --- a/src/Client.js +++ b/src/Client.js @@ -115,6 +115,38 @@ class Client extends EventEmitter { this.emit(Events.MESSAGE_RECEIVED, message); }); + let last_message; + + await page.exposeFunction('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); + } + this.emit(Events.MESSAGE_REVOKED_EVERYONE, message, revoked_msg); + } + + }); + + await page.exposeFunction('onChangeMessageEvent', (msg) => { + + if (msg.type !== 'revoked') { + last_message = msg; + } + + }); + + await page.exposeFunction('onRemoveMessageEvent', (msg) => { + + if (!msg.isNewMsg) return; + + const message = new Message(this, msg); + this.emit(Events.MESSAGE_REVOKED_ME, message); + + }); + await page.exposeFunction('onAppStateChangedEvent', (AppState, state) => { const ACCEPTED_STATES = [WAState.CONNECTED, WAState.OPENING, WAState.PAIRING]; if (!ACCEPTED_STATES.includes(state)) { @@ -125,6 +157,9 @@ class Client extends EventEmitter { await page.evaluate(() => { window.Store.Msg.on('add', window.onAddMessageEvent); + window.Store.Msg.on('change', window.onChangeMessageEvent); + window.Store.Msg.on('change:type', window.onChangeMessageTypeEvent); + window.Store.Msg.on('remove', window.onRemoveMessageEvent); window.Store.AppState.on('change:state', window.onAppStateChangedEvent); }); diff --git a/src/util/Constants.js b/src/util/Constants.js index f77b34b..0a08d43 100644 --- a/src/util/Constants.js +++ b/src/util/Constants.js @@ -23,6 +23,8 @@ exports.Events = { READY: 'ready', MESSAGE_RECEIVED: 'message', MESSAGE_CREATE: 'message_create', + MESSAGE_REVOKED_EVERYONE: 'message_revoke_everyone', + MESSAGE_REVOKED_ME: 'message_revoke_me', QR_RECEIVED: 'qr', DISCONNECTED: 'disconnected' };