[core] Separate group ACK events from message.ack to group.ack (#29)

This commit is contained in:
Berg authored and devlikepro committed 2025-12-17 16:15:37 +07:00
1 parent 7a54b6b599
commit 1a91e7d722
6 files changed
+34 -10

No files matched your search

+11 -2
View File
@@ -548,11 +548,20 @@ export class WhatsappSessionGoWSCore extends WhatsappSession {
onlyEvent(WhatsMeowEvent.RECEIPT),
filter((r: any) => this.jids.include(r?.Chat)),
);
const messageAck$ = receipt$.pipe(
const [receiptGroups$, receiptContacts$] = partition(
receipt$,
(r: any) => isJidGroup(r?.Chat || r?.Info?.Chat),
);
const messageAckGroups$ = receiptGroups$.pipe(
mergeMap(this.receiptToMessageAck.bind(this)),
DistinctAck(),
);
this.events2.get(WAHAEvents.MESSAGE_ACK).switch(messageAck$);
const messageAckContacts$ = receiptContacts$.pipe(
mergeMap(this.receiptToMessageAck.bind(this)),
DistinctAck(),
);
this.events2.get(WAHAEvents.GROUP_ACK).switch(messageAckGroups$);
this.events2.get(WAHAEvents.MESSAGE_ACK).switch(messageAckContacts$);
const messageReactions$ = messages$.pipe(
filter((msg) => !!msg?.Message?.reactionMessage),
+5 -4
View File
@@ -2074,10 +2074,11 @@ export class WhatsappSessionNoWebCore extends WhatsappSession {
filter(isMine), // ack comes only for MY messages
map(this.convertMessageReceiptUpdateToMessageAck.bind(this)),
);
const messageAck$ = merge(messageAckDirect$, messageAckGroups$).pipe(
DistinctAck(),
);
this.events2.get(WAHAEvents.MESSAGE_ACK).switch(messageAck$);
const messageAckDirectFinal$ = messageAckDirect$.pipe(DistinctAck());
const messageAckGroupsFinal$ = messageAckGroups$.pipe(DistinctAck());
this.events2.get(WAHAEvents.MESSAGE_ACK).switch(messageAckDirectFinal$);
this.events2.get(WAHAEvents.GROUP_ACK).switch(messageAckGroupsFinal$);
//
// Other
+4 -3
View File
@@ -1699,10 +1699,11 @@ export class WhatsappSessionWebJSCore extends WhatsappSession {
filter((ack) => this.jids.include(ack.to)),
);
const messageAckAll$ = merge(messagesAckDM$, messageAckGroups$);
const messageAckDMFinal$ = messagesAckDM$.pipe(DistinctAck());
const messageAckGroupsFinal$ = messageAckGroups$.pipe(DistinctAck());
const messageAck$ = messageAckAll$.pipe(DistinctAck());
this.events2.get(WAHAEvents.MESSAGE_ACK).switch(messageAck$);
this.events2.get(WAHAEvents.MESSAGE_ACK).switch(messageAckDMFinal$);
this.events2.get(WAHAEvents.GROUP_ACK).switch(messageAckGroupsFinal$);
//
// Others
+1
View File
@@ -16,6 +16,7 @@ export enum WAHAEvents {
GROUP_V2_LEAVE = 'group.v2.leave',
GROUP_V2_UPDATE = 'group.v2.update',
GROUP_V2_PARTICIPANTS = 'group.v2.participants',
GROUP_ACK = 'group.ack',
PRESENCE_UPDATE = 'presence.update',
POLL_VOTE = 'poll.vote',
POLL_VOTE_FAILED = 'poll.vote.failed',
+11 -1
View File
@@ -207,13 +207,23 @@ export class WAHAWebhookMessageAny extends WAHAWebhook {
export class WAHAWebhookMessageAck extends WAHAWebhook {
@ApiProperty({
description:
'Receive events when server or recipient gets the message, read or played it.',
'Receive events when server or recipient gets the message, read or played it (contacts only).',
})
event = WAHAEvents.MESSAGE_ACK;
payload: WAMessageAckBody;
}
export class WAHAWebhookGroupAck extends WAHAWebhook {
@ApiProperty({
description:
'Receive events when participants in a group read or play messages.',
})
event = WAHAEvents.GROUP_ACK;
payload: WAMessageAckBody;
}
export class WAHAWebhookMessageRevoked extends WAHAWebhook {
@ApiProperty({
description:
+2
View File
@@ -21,6 +21,7 @@ import {
WAHAWebhookMessage,
WAHAWebhookMessageAck,
WAHAWebhookMessageAny,
WAHAWebhookGroupAck,
WAHAWebhookMessageEdited,
WAHAWebhookMessageReaction,
WAHAWebhookMessageRevoked,
@@ -37,6 +38,7 @@ const WAHA_WEBHOOKS = [
WAHAWebhookMessageReaction,
WAHAWebhookMessageAny,
WAHAWebhookMessageAck,
WAHAWebhookGroupAck,
WAHAWebhookMessageRevoked,
WAHAWebhookMessageEdited,
WebhookGroupV2Join,