@@ -121,21 +121,24 @@ import { Events, MessageSubtype, TypeMediaMessage, wa } from '../../types/wa.typ
121121import { CacheService } from './../cache.service' ;
122122import { WAStartupService } from './../whatsapp.service' ;
123123
124- // const retryCache = {};
125-
126124export class BaileysStartupService extends WAStartupService {
127125 constructor (
128126 public readonly configService : ConfigService ,
129127 public readonly eventEmitter : EventEmitter2 ,
130128 public readonly repository : RepositoryBroker ,
131129 public readonly cache : RedisCache ,
132130 public readonly chatwootCache : CacheService ,
131+ public readonly messagesLostCache : CacheService ,
133132 ) {
134133 super ( configService , eventEmitter , repository , chatwootCache ) ;
135134 this . logger . verbose ( 'BaileysStartupService initialized' ) ;
136135 this . cleanStore ( ) ;
137136 this . instance . qrcode = { count : 0 } ;
138137 this . mobile = false ;
138+
139+ setTimeout ( ( ) => {
140+ this . recoveringMessages ( ) ;
141+ } , 30000 ) ;
139142 }
140143
141144 private readonly msgRetryCounterCache : CacheStore = new NodeCache ( ) ;
@@ -148,6 +151,18 @@ export class BaileysStartupService extends WAStartupService {
148151 public phoneNumber : string ;
149152 public mobile : boolean ;
150153
154+ private async recoveringMessages ( ) {
155+ this . logger . info ( 'Recovering messages' ) ;
156+ this . messagesLostCache . keys ( ) . then ( ( keys ) => {
157+ keys . forEach ( async ( key ) => {
158+ const message = await this . messagesLostCache . get ( key . split ( ':' ) [ 2 ] ) ;
159+
160+ if ( message . messageStubParameters && message . messageStubParameters [ 0 ] === 'Message absent from node' )
161+ await this . client . sendMessageAck ( JSON . parse ( message . messageStubParameters [ 1 ] , BufferJSON . reviver ) ) ;
162+ } ) ;
163+ } ) ;
164+ }
165+
151166 public get connectionStatus ( ) {
152167 this . logger . verbose ( 'Getting connection status' ) ;
153168 return this . stateConnection ;
@@ -378,10 +393,12 @@ export class BaileysStartupService extends WAStartupService {
378393 │ CONNECTED TO WHATSAPP │
379394 └──────────────────────────────┘` . replace ( / ^ + / gm, ' ' ) ,
380395 ) ;
381- this . logger . info ( `
396+ this . logger . info (
397+ `
382398 wuid: ${ formattedWuid }
383399 name: ${ formattedName }
384- ` ) ;
400+ ` ,
401+ ) ;
385402
386403 if ( this . localChatwoot . enabled ) {
387404 this . chatwootService . eventWhatsapp (
@@ -1044,12 +1061,22 @@ export class BaileysStartupService extends WAStartupService {
10441061 }
10451062 }
10461063
1064+ await this . messagesLostCache . set ( received . key . id , received ) ;
1065+
10471066 if ( received . messageStubParameters && received . messageStubParameters [ 0 ] === 'Message absent from node' ) {
10481067 this . logger . info ( 'Recovering message lost' ) ;
1049- await this . client . sendMessageAck ( JSON . parse ( received . messageStubParameters [ 1 ] , BufferJSON . reviver ) ) ;
1068+
1069+ await this . messagesLostCache . set ( received . key . id , received ) ;
10501070 continue ;
10511071 }
10521072
1073+ // const retryCache = (await this.messagesLostCache.get(received.key.id)) || null;
1074+
1075+ // if (retryCache) {
1076+ // this.logger.info('Recovered message lost');
1077+ // await this.messagesLostCache.delete(received.key.id);
1078+ // }
1079+
10531080 if (
10541081 ( type !== 'notify' && type !== 'append' ) ||
10551082 received . message ?. protocolMessage ||
@@ -1248,7 +1275,6 @@ export class BaileysStartupService extends WAStartupService {
12481275 }
12491276 }
12501277
1251- // if (key.remoteJid !== 'status@broadcast' && !key?.remoteJid?.match(/(:\d+)/)) {
12521278 if ( key . remoteJid !== 'status@broadcast' ) {
12531279 this . logger . verbose ( 'Message update is valid' ) ;
12541280
@@ -1479,27 +1505,12 @@ export class BaileysStartupService extends WAStartupService {
14791505 if ( events [ 'messages.upsert' ] ) {
14801506 this . logger . verbose ( 'Listening event: messages.upsert' ) ;
14811507 const payload = events [ 'messages.upsert' ] ;
1482- // if (payload.messages.find((a) => a?.messageStubType === 2)) {
1483- // const msg = payload.messages[0];
1484- // retryCache[msg.key.id] = msg;
1485- // return;
1486- // }
14871508 this . messageHandle [ 'messages.upsert' ] ( payload , database , settings ) ;
14881509 }
14891510
14901511 if ( events [ 'messages.update' ] ) {
14911512 this . logger . verbose ( 'Listening event: messages.update' ) ;
14921513 const payload = events [ 'messages.update' ] ;
1493- // payload.forEach((message) => {
1494- // if (retryCache[message.key.id]) {
1495- // this.client.ev.emit('messages.upsert', {
1496- // messages: [message],
1497- // type: 'notify',
1498- // });
1499- // delete retryCache[message.key.id];
1500- // return;
1501- // }
1502- // });
15031514 this . messageHandle [ 'messages.update' ] ( payload , database , settings ) ;
15041515 }
15051516
0 commit comments