Skip to content

Commit af4818b

Browse files
committed
mark message read on receipt
1 parent 4fc7939 commit af4818b

File tree

7 files changed

+40
-6
lines changed

7 files changed

+40
-6
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,7 @@ WEBHOOK_SEND_OUTGOING_MESSAGES=true, send outgoing messages to webhook, default
385385
IGNORE_GROUP_MESSAGES=false to send group messages received in socket to webhook, default true
386386
IGNORE_BROADCAST_STATUSES=false to send stories in socket to webhook, default true
387387
IGNORE_STATUS_MESSAGE=false to send stories in socket to webhook, default true
388+
READ_ON_RECEIPT=false mark message as read on receipt
388389
IGNORE_BROADCAST_MESSAGES=false to send broadcast messages in socket to webhook, default false
389390
IGNORE_HISTORY_MESSAGES=false to import messages when connect, default is true
390391
IGNORE_OWN_MESSAGES=false to send own messages in socket to webhook, default true

public/index.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,13 @@ <h5 class="modal-title" id="editModalLabel">Editar/Adicionar Sessão</h5>
287287
</label>
288288
<label for="ignoreHistoryMessages" class="form-label">Ignorar Histórico de Mensagens</label>
289289
</div>
290+
<div class="col-12 col-md-6 col-lg-6 col-xl-4 col-xxl-3">
291+
<label class="switch">
292+
<input type="checkbox" id="readOnReceipt" name="readOnReceipt" checked>
293+
<span class="slider round"></span>
294+
</label>
295+
<label for="readOnReceipt" class="form-label">Ler a mensagem ao receber</label>
296+
</div>
290297
<div class="col-12 col-md-6 col-lg-6 col-xl-4 col-xxl-3">
291298
<label class="switch">
292299
<input type="checkbox" id="sendProfilePicture" name="sendProfilePicture">
@@ -614,6 +621,7 @@ <h5 class="modal-title" id="connectModalLabel">Conectar Sessão</h5>
614621
$('#rejectCalls').val(session.rejectCalls);
615622
$('#ignoreGroupMessages').prop('checked', session.ignoreGroupMessages);
616623
$('#ignoreHistoryMessages').prop('checked', session.ignoreHistoryMessages);
624+
$('#readOnReceipt').prop('checked', session.readOnReceipt);
617625
$('#sendProfilePicture').prop('checked', session.sendProfilePicture);
618626
$('#ignoreOwnMessages').prop('checked', session.ignoreOwnMessages);
619627
$('#ignoreYourselfMessages').prop('checked', session.ignoreYourselfMessages);
@@ -672,6 +680,7 @@ <h5 class="modal-title" id="connectModalLabel">Conectar Sessão</h5>
672680
rejectCallsWebhook: $('#rejectCallsWebhook').val(),
673681
ignoreGroupMessages: $('#ignoreGroupMessages').is(':checked'),
674682
ignoreHistoryMessages: $('#ignoreHistoryMessages').is(':checked'),
683+
readOnReceipt: $('#readOnReceipt').is(':checked'),
675684
sendProfilePicture: $('#sendProfilePicture').is(':checked'),
676685
ignoreOwnMessages: $('#ignoreOwnMessages').is(':checked'),
677686
ignoreYourselfMessages: $('#ignoreYourselfMessages').is(':checked'),

src/defaults.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ export const COMPOSING_MESSAGE: boolean = process.env.COMPOSING_MESSAGE === _und
9696
export const IGNORE_GROUP_MESSAGES: boolean = process.env.IGNORE_GROUP_MESSAGES == _undefined ? true : process.env.IGNORE_GROUP_MESSAGES == 'true'
9797
export const IGNORE_BROADCAST_STATUSES: boolean =
9898
process.env.IGNORE_BROADCAST_STATUSES === _undefined ? true : process.env.IGNORE_BROADCAST_STATUSES == 'true'
99+
export const READ_ON_RECEIPT: boolean = process.env.READ_ON_RECEIPT === _undefined ? false : process.env.READ_ON_RECEIPT == 'true'
99100
export const IGNORE_BROADCAST_MESSAGES: boolean =
100101
process.env.IGNORE_BROADCAST_MESSAGES === _undefined ? false : process.env.IGNORE_OWN_MESSAGES == 'true'
101102
export const IGNORE_HISTORY_MESSAGES: boolean =

src/services/client_baileys.ts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import {
2020
} from './socket'
2121
import { Client, getClient, clients, Contact } from './client'
2222
import { Config, configs, defaultConfig, getConfig, getMessageMetadataDefault } from './config'
23-
import { toBaileysMessageContent, phoneNumberToJid, jidToPhoneNumber } from './transformer'
23+
import { toBaileysMessageContent, phoneNumberToJid, jidToPhoneNumber, getMessageType, TYPE_MESSAGES_TO_READ } from './transformer'
2424
import { v1 as uuid } from 'uuid'
2525
import { Response } from './response'
2626
import QRCode from 'qrcode'
@@ -304,11 +304,27 @@ export class ClientBaileys implements Client {
304304
async subscribe() {
305305
this.event('messages.upsert', async (payload: { messages: []; type }) => {
306306
logger.debug('messages.upsert %s', this.phone, JSON.stringify(payload))
307-
this.listener.process(this.phone, payload.messages, payload.type)
307+
await this.listener.process(this.phone, payload.messages, payload.type)
308+
console.log('>>>>>>>>>> readOnReceipt 1')
309+
if (this.config.readOnReceipt) {
310+
console.log('>>>>>>>>>> readOnReceipt 2')
311+
await Promise.all(
312+
payload.messages
313+
.filter((message: any) => {
314+
console.log('>>>>>>>>>> readOnReceipt 3')
315+
const messageType = getMessageType(message)
316+
return !message?.key?.fromMe && messageType && TYPE_MESSAGES_TO_READ.includes(messageType)
317+
})
318+
.map(async (message: any) => {
319+
console.log('>>>>>>>>>> readOnReceipt 2')
320+
return this.readMessages([message.key!])
321+
})
322+
)
323+
}
308324
})
309-
this.event('messages.update', (messages: object[]) => {
325+
this.event('messages.update', async (messages: object[]) => {
310326
logger.debug('messages.update %s %s', this.phone, JSON.stringify(messages))
311-
this.listener.process(this.phone, messages, 'update')
327+
return this.listener.process(this.phone, messages, 'update')
312328
})
313329
this.event('message-receipt.update', (updates: object[]) => {
314330
logger.debug('message-receipt.update %s %s', this.phone, JSON.stringify(updates))

src/services/config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export type Config = {
3030
ignoreGroupMessages: boolean
3131
ignoreBroadcastMessages: boolean
3232
ignoreBroadcastStatuses: boolean
33+
readOnReceipt: boolean
3334
ignoreHistoryMessages: boolean
3435
ignoreYourselfMessages: boolean
3536
ignoreOwnMessages: boolean
@@ -70,6 +71,7 @@ export const defaultConfig: Config = {
7071
ignoreGroupMessages: true,
7172
ignoreBroadcastStatuses: true,
7273
ignoreBroadcastMessages: false,
74+
readOnReceipt: false,
7375
ignoreHistoryMessages: true,
7476
ignoreOwnMessages: true,
7577
ignoreYourselfMessages: true,

src/services/config_by_env.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,15 @@ import {
4040
WAVOIP_TOKEN,
4141
CONNECTION_TYPE,
4242
QR_TIMEOUT_MS,
43+
READ_ON_RECEIPT,
4344
} from '../defaults'
4445

4546
export const getConfigByEnv: getConfig = async (phone: string): Promise<Config> => {
4647
if (!configs.has(phone)) {
4748
const config: Config = { ...defaultConfig }
4849
config.logLevel = LOG_LEVEL as Level
4950
config.ignoreGroupMessages = IGNORE_GROUP_MESSAGES
51+
config.readOnReceipt = READ_ON_RECEIPT
5052
config.ignoreBroadcastStatuses = IGNORE_BROADCAST_STATUSES
5153
config.ignoreBroadcastMessages = IGNORE_BROADCAST_MESSAGES
5254
config.ignoreHistoryMessages = IGNORE_HISTORY_MESSAGES

src/services/transformer.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export class DecryptError extends Error {
3838
}
3939
}
4040

41-
const TYPE_MESSAGES_TO_PROCESS = [
41+
export const TYPE_MESSAGES_TO_READ = [
4242
'viewOnceMessage',
4343
'editedMessage',
4444
'ephemeralMessage',
@@ -59,11 +59,14 @@ const TYPE_MESSAGES_TO_PROCESS = [
5959
'listResponseMessage',
6060
'conversation',
6161
'ptvMessage',
62+
]
63+
64+
const TYPE_MESSAGES_TO_PROCESS = TYPE_MESSAGES_TO_READ.concat([
6265
'protocolMessage',
6366
'senderKeyDistributionMessage',
6467
'messageContextInfo',
6568
'messageStubType',
66-
]
69+
])
6770

6871
export const getMimetype = (payload: any) => {
6972
const { type } = payload

0 commit comments

Comments
 (0)