File size: 1,929 Bytes
4327358
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import { isJidGroup, WAMessageKey } from '@adiwajshing/baileys';
import { parseMessageIdSerialized } from '@waha/core/utils/ids';
import { toJID } from '@waha/core/utils/jids';
import {
  GetChatMessagesFilter,
  GetChatMessagesQuery,
  ReadChatMessagesQuery,
} from '@waha/structures/chats.dto';
import { SendSeenRequest } from '@waha/structures/chatting.dto';
import { WAMessageAck } from '@waha/structures/enums.dto';

export function ExtractMessageKeysForRead(
  request: SendSeenRequest,
): WAMessageKey[] {
  const jid = toJID(request.chatId);
  const defaults = {
    remoteJid: jid,
    participant: request.participant,
  };
  const ids = request.messageIds || [];
  if (request.messageId) {
    ids.push(request.messageId);
  }
  const keys: WAMessageKey[] = [];
  for (const messageId of ids) {
    const parsed = parseMessageIdSerialized(messageId, false);
    if (parsed.fromMe) {
      continue;
    }
    const key: WAMessageKey = {
      id: parsed.id,
      remoteJid: parsed.remoteJid
        ? toJID(parsed.remoteJid)
        : defaults.remoteJid,
      participant: parsed.participant
        ? toJID(parsed.participant)
        : defaults.participant,
    };
    keys.push(key);
  }
  return keys;
}

function daysToMs(days: number) {
  return days * 24 * 60 * 60 * 1000;
}

export function MessagesForRead(
  chatId: string,
  request: ReadChatMessagesQuery,
): {
  query: GetChatMessagesQuery;
  filter: GetChatMessagesFilter;
} {
  const limit = request.messages || isJidGroup(chatId) ? 100 : 30;
  const query: GetChatMessagesQuery = {
    offset: 0,
    limit: limit,
    downloadMedia: false,
  };
  const afterMs = Date.now() - daysToMs(request.days);
  const after = Math.floor(afterMs / 1000);
  const filter: GetChatMessagesFilter = {
    'filter.ack': WAMessageAck.DEVICE,
    'filter.fromMe': false,
    'filter.timestamp.gte': after,
  };
  return {
    query: query,
    filter: filter,
  };
}