alwaysaqioo 1.1.3 → 1.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +110 -9
- package/WAProto/index.js +56886 -17506
- package/engine-requirements.js +10 -0
- package/lib/Defaults/baileys-version.json +1 -1
- package/lib/Defaults/index.js +19 -2
- package/lib/Socket/chats.d.ts +215 -32
- package/lib/Socket/chats.js +155 -75
- package/lib/Socket/groups.js +18 -18
- package/lib/Socket/index.js +1 -0
- package/lib/Socket/luxu.d.ts +268 -0
- package/lib/Socket/luxu.js +591 -0
- package/lib/Socket/messages-send.d.ts +2 -2
- package/lib/Socket/messages-send.js +327 -348
- package/lib/Socket/newsletter.js +111 -21
- package/lib/Socket/socket.js +65 -30
- package/lib/Types/Newsletter.d.ts +97 -86
- package/lib/Types/Newsletter.js +38 -32
- package/lib/Utils/generics.js +65 -33
- package/lib/Utils/messages-media.js +145 -57
- package/lib/Utils/messages.js +26 -14
- package/lib/Utils/signal.js +48 -46
- package/lib/Utils/use-multi-file-auth-state.js +45 -6
- package/lib/Utils/validate-connection.js +89 -65
- package/lib/WABinary/constants.d.ts +27 -24
- package/lib/WABinary/encode.js +160 -123
- package/lib/WABinary/generic-utils.d.ts +2 -1
- package/lib/WABinary/generic-utils.js +123 -43
- package/lib/index.d.ts +1 -0
- package/lib/index.js +11 -4
- package/package.json +100 -98
- package/WAProto/GenerateStatics.sh +0 -4
- package/WAProto/WAProto.proto +0 -3344
- package/WAProto/index.d.ts +0 -37016
- package/WASignalGroup/GroupProtocol.js +0 -1697
- package/WASignalGroup/ciphertext_message.js +0 -16
- package/WASignalGroup/group_cipher.js +0 -120
- package/WASignalGroup/group_session_builder.js +0 -46
- package/WASignalGroup/index.js +0 -5
- package/WASignalGroup/keyhelper.js +0 -21
- package/WASignalGroup/protobufs.js +0 -3
- package/WASignalGroup/queue_job.js +0 -69
- package/WASignalGroup/sender_chain_key.js +0 -50
- package/WASignalGroup/sender_key_distribution_message.js +0 -78
- package/WASignalGroup/sender_key_message.js +0 -92
- package/WASignalGroup/sender_key_name.js +0 -70
- package/WASignalGroup/sender_key_record.js +0 -56
- package/WASignalGroup/sender_key_state.js +0 -129
- package/WASignalGroup/sender_message_key.js +0 -39
- package/lib/Signal/Group/x +0 -1
- package/lib/WAUSync/index.d.ts +0 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
@@ -8,10 +8,14 @@ const boom_1 = require("@hapi/boom");
|
|
|
8
8
|
const node_cache_1 = __importDefault(require("node-cache"));
|
|
9
9
|
const WAProto_1 = require("../../WAProto");
|
|
10
10
|
const Defaults_1 = require("../Defaults");
|
|
11
|
+
const axios_1 = require("axios")
|
|
12
|
+
const Types_1 = require("../Types")
|
|
11
13
|
const Utils_1 = require("../Utils");
|
|
12
14
|
const link_preview_1 = require("../Utils/link-preview");
|
|
13
15
|
const WABinary_1 = require("../WABinary");
|
|
14
16
|
const newsletter_1 = require("./newsletter");
|
|
17
|
+
const WAUSync_1 = require("../WAUSync")
|
|
18
|
+
const imup = require('./luxu');
|
|
15
19
|
var ListType = WAProto_1.proto.Message.ListMessage.ListType;
|
|
16
20
|
const makeMessagesSocket = (config) => {
|
|
17
21
|
const {
|
|
@@ -33,7 +37,8 @@ const makeMessagesSocket = (config) => {
|
|
|
33
37
|
generateMessageTag,
|
|
34
38
|
sendNode,
|
|
35
39
|
groupMetadata,
|
|
36
|
-
groupToggleEphemeral
|
|
40
|
+
groupToggleEphemeral,
|
|
41
|
+
executeUSyncQuery
|
|
37
42
|
} = sock;
|
|
38
43
|
const userDevicesCache = config.userDevicesCache || new node_cache_1.default({
|
|
39
44
|
stdTTL: Defaults_1.DEFAULT_CACHE_TTLS.USER_DEVICES,
|
|
@@ -53,9 +58,9 @@ const makeMessagesSocket = (config) => {
|
|
|
53
58
|
},
|
|
54
59
|
content: [{ tag: 'media_conn', attrs: {} }]
|
|
55
60
|
});
|
|
56
|
-
const mediaConnNode =
|
|
61
|
+
const mediaConnNode = WABinary_1.getBinaryNodeChild(result, 'media_conn');
|
|
57
62
|
const node = {
|
|
58
|
-
hosts:
|
|
63
|
+
hosts: WABinary_1.getBinaryNodeChildren(mediaConnNode, 'host').map(({ attrs }) => ({
|
|
59
64
|
hostname: attrs.hostname,
|
|
60
65
|
maxContentLengthBytes: +attrs.maxContentLengthBytes,
|
|
61
66
|
})),
|
|
@@ -84,7 +89,7 @@ const makeMessagesSocket = (config) => {
|
|
|
84
89
|
if (isReadReceipt) {
|
|
85
90
|
node.attrs.t = (0, Utils_1.unixTimestampSeconds)().toString();
|
|
86
91
|
}
|
|
87
|
-
if (type === 'sender' &&
|
|
92
|
+
if (type === 'sender' && WABinary_1.isJidUser(jid)) {
|
|
88
93
|
node.attrs.recipient = jid;
|
|
89
94
|
node.attrs.to = participant;
|
|
90
95
|
}
|
|
@@ -95,7 +100,7 @@ const makeMessagesSocket = (config) => {
|
|
|
95
100
|
}
|
|
96
101
|
}
|
|
97
102
|
if (type) {
|
|
98
|
-
node.attrs.type =
|
|
103
|
+
node.attrs.type = WABinary_1.isJidNewsLetter(jid) ? 'read-self' : type;
|
|
99
104
|
}
|
|
100
105
|
const remainingMessageIds = messageIds.slice(1);
|
|
101
106
|
if (remainingMessageIds.length) {
|
|
@@ -129,74 +134,70 @@ const makeMessagesSocket = (config) => {
|
|
|
129
134
|
};
|
|
130
135
|
/** Fetch all the devices we've to send a message to */
|
|
131
136
|
const getUSyncDevices = async (jids, useCache, ignoreZeroDevices) => {
|
|
132
|
-
|
|
133
|
-
|
|
137
|
+
const deviceResults = []
|
|
138
|
+
|
|
134
139
|
if (!useCache) {
|
|
135
|
-
logger.debug('not using cache for devices')
|
|
140
|
+
logger.debug('not using cache for devices')
|
|
136
141
|
}
|
|
137
|
-
|
|
138
|
-
|
|
142
|
+
|
|
143
|
+
const toFetch = []
|
|
144
|
+
|
|
145
|
+
jids = Array.from(new Set(jids))
|
|
146
|
+
|
|
139
147
|
for (let jid of jids) {
|
|
140
|
-
const user =
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
148
|
+
const user = WABinary_1.jidDecode(jid)?.user
|
|
149
|
+
|
|
150
|
+
jid = WABinary_1.jidNormalizedUser(jid)
|
|
151
|
+
|
|
152
|
+
if (useCache) {
|
|
153
|
+
const devices = userDevicesCache.get(user)
|
|
154
|
+
|
|
155
|
+
if (devices) {
|
|
156
|
+
deviceResults.push(...devices)
|
|
157
|
+
logger.trace({ user }, 'using cache for devices')
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
else {
|
|
161
|
+
toFetch.push(jid)
|
|
162
|
+
}
|
|
146
163
|
}
|
|
164
|
+
|
|
147
165
|
else {
|
|
148
|
-
|
|
166
|
+
toFetch.push(jid)
|
|
149
167
|
}
|
|
150
168
|
}
|
|
151
|
-
|
|
152
|
-
|
|
169
|
+
|
|
170
|
+
if (!toFetch.length) {
|
|
171
|
+
return deviceResults
|
|
153
172
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
{ tag: 'list', attrs: {}, content: users }
|
|
183
|
-
]
|
|
184
|
-
},
|
|
185
|
-
],
|
|
186
|
-
};
|
|
187
|
-
const result = await query(iq);
|
|
188
|
-
const extracted = (0, Utils_1.extractDeviceJids)(result, authState.creds.me.id, ignoreZeroDevices);
|
|
189
|
-
const deviceMap = {};
|
|
190
|
-
for (const item of extracted) {
|
|
191
|
-
deviceMap[item.user] = deviceMap[item.user] || [];
|
|
192
|
-
deviceMap[item.user].push(item);
|
|
193
|
-
deviceResults.push(item);
|
|
194
|
-
}
|
|
195
|
-
for (const key in deviceMap) {
|
|
196
|
-
userDevicesCache.set(key, deviceMap[key]);
|
|
197
|
-
}
|
|
198
|
-
return deviceResults;
|
|
199
|
-
};
|
|
173
|
+
|
|
174
|
+
const query = new WAUSync_1.USyncQuery()
|
|
175
|
+
.withContext('message')
|
|
176
|
+
.withDeviceProtocol()
|
|
177
|
+
|
|
178
|
+
for (const jid of toFetch) {
|
|
179
|
+
query.withUser(new WAUSync_1.USyncUser().withId(jid))
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
const result = await executeUSyncQuery(query)
|
|
183
|
+
|
|
184
|
+
if (result) {
|
|
185
|
+
const extracted = Utils_1.extractDeviceJids(result?.list, authState.creds.me.id, ignoreZeroDevices)
|
|
186
|
+
const deviceMap = {}
|
|
187
|
+
|
|
188
|
+
for (const item of extracted) {
|
|
189
|
+
deviceMap[item.user] = deviceMap[item.user] || []
|
|
190
|
+
deviceMap[item.user].push(item)
|
|
191
|
+
deviceResults.push(item)
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
for (const key in deviceMap) {
|
|
195
|
+
userDevicesCache.set(key, deviceMap[key])
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
return deviceResults
|
|
200
|
+
}
|
|
200
201
|
const assertSessions = async (jids, force) => {
|
|
201
202
|
let didFetchNewSession = false;
|
|
202
203
|
let jidsRequiringFetch = [];
|
|
@@ -240,6 +241,29 @@ const makeMessagesSocket = (config) => {
|
|
|
240
241
|
}
|
|
241
242
|
return didFetchNewSession;
|
|
242
243
|
};
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
const sendPeerDataOperationMessage = async (pdoMessage) => {
|
|
247
|
+
if (!authState.creds.me?.id) {
|
|
248
|
+
throw new boom_1.Boom('Not authenticated')
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
const protocolMessage = {
|
|
252
|
+
protocolMessage: {
|
|
253
|
+
peerDataOperationRequestMessage: pdoMessage,
|
|
254
|
+
type: WAProto_1.proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_MESSAGE
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
const meJid = WABinary_1.jidNormalizedUser(authState.creds.me.id);
|
|
258
|
+
const msgId = await relayMessage(meJid, protocolMessage, {
|
|
259
|
+
additionalAttributes: {
|
|
260
|
+
category: 'peer',
|
|
261
|
+
// eslint-disable-next-line camelcase
|
|
262
|
+
push_priority: 'high_force',
|
|
263
|
+
},
|
|
264
|
+
});
|
|
265
|
+
return msgId;
|
|
266
|
+
};
|
|
243
267
|
const createParticipantNodes = async (jids, message, extraAttrs) => {
|
|
244
268
|
const patched = await patchMessageBeforeSending(message, jids);
|
|
245
269
|
const bytes = (0, Utils_1.encodeWAMessage)(patched);
|
|
@@ -267,11 +291,11 @@ const makeMessagesSocket = (config) => {
|
|
|
267
291
|
}));
|
|
268
292
|
return { nodes, shouldIncludeDeviceIdentity };
|
|
269
293
|
}; //apela
|
|
270
|
-
const relayMessage = async (jid, message, { messageId: msgId, participant, additionalAttributes, additionalNodes, useUserDevicesCache, cachedGroupMetadata, statusJidList, AI = true }) => {
|
|
294
|
+
const relayMessage = async (jid, message, { messageId: msgId, participant, additionalAttributes, additionalNodes, useUserDevicesCache, cachedGroupMetadata, useCachedGroupMetadata, statusJidList, AI = true }) => {
|
|
271
295
|
const meId = authState.creds.me.id;
|
|
272
296
|
let shouldIncludeDeviceIdentity = false;
|
|
273
297
|
let didPushAdditional = false
|
|
274
|
-
const { user, server } =
|
|
298
|
+
const { user, server } = WABinary_1.jidDecode(jid);
|
|
275
299
|
const statusJid = 'status@broadcast';
|
|
276
300
|
const isGroup = server === 'g.us';
|
|
277
301
|
const isStatus = jid === statusJid;
|
|
@@ -280,8 +304,9 @@ const makeMessagesSocket = (config) => {
|
|
|
280
304
|
const isNewsletter = server === 'newsletter';
|
|
281
305
|
msgId = msgId || (0, Utils_1.generateMessageID)();
|
|
282
306
|
useUserDevicesCache = useUserDevicesCache !== false;
|
|
307
|
+
useCachedGroupMetadata = useCachedGroupMetadata !== false && !isStatus
|
|
283
308
|
const participants = [];
|
|
284
|
-
const destinationJid = (!isStatus) ?
|
|
309
|
+
const destinationJid = (!isStatus) ? WABinary_1.jidEncode(user, isLid ? 'lid' : isGroup ? 'g.us' : isNewsletter ? 'newsletter' : 's.whatsapp.net') : statusJid;
|
|
285
310
|
const binaryNodeContent = [];
|
|
286
311
|
const devices = [];
|
|
287
312
|
const meMsg = {
|
|
@@ -290,6 +315,9 @@ const makeMessagesSocket = (config) => {
|
|
|
290
315
|
message
|
|
291
316
|
}
|
|
292
317
|
};
|
|
318
|
+
const extraAttrs = {}
|
|
319
|
+
const messages = Utils_1.normalizeMessageContent(message)
|
|
320
|
+
const buttonType = getButtonType(messages);
|
|
293
321
|
if (participant) {
|
|
294
322
|
// when the retry request is not for a group
|
|
295
323
|
// only send to the specific device that asked for a retry
|
|
@@ -297,51 +325,80 @@ const makeMessagesSocket = (config) => {
|
|
|
297
325
|
if (!isGroup && !isStatus) {
|
|
298
326
|
additionalAttributes = { ...additionalAttributes, 'device_fanout': 'false' };
|
|
299
327
|
}
|
|
300
|
-
const { user, device } =
|
|
328
|
+
const { user, device } = WABinary_1.jidDecode(participant.jid);
|
|
301
329
|
devices.push({ user, device });
|
|
302
330
|
}
|
|
303
331
|
await authState.keys.transaction(async () => {
|
|
304
|
-
|
|
305
|
-
|
|
332
|
+
const mediaType = getMediaType(messages);
|
|
333
|
+
|
|
334
|
+
if (mediaType) {
|
|
335
|
+
extraAttrs['mediatype'] = mediaType
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
if (messages.pinInChatMessage || messages.keepInChatMessage || message.reactionMessage || message.protocolMessage?.editedMessage) {
|
|
339
|
+
extraAttrs['decrypt-fail'] = 'hide'
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
if (messages.interactiveResponseMessage?.nativeFlowResponseMessage) {
|
|
343
|
+
extraAttrs['native_flow_name'] = messages.interactiveResponseMessage?.nativeFlowResponseMessage.name
|
|
344
|
+
}
|
|
345
|
+
|
|
306
346
|
if (isGroup || isStatus) {
|
|
307
347
|
const [groupData, senderKeyMap] = await Promise.all([
|
|
308
348
|
(async () => {
|
|
309
|
-
let groupData = cachedGroupMetadata ? await cachedGroupMetadata(jid) : undefined
|
|
349
|
+
let groupData = useCachedGroupMetadata && cachedGroupMetadata ? await cachedGroupMetadata(jid) : undefined
|
|
310
350
|
if (groupData) {
|
|
311
351
|
logger.trace({ jid, participants: groupData.participants.length }, 'using cached group metadata');
|
|
312
352
|
}
|
|
313
|
-
|
|
314
|
-
|
|
353
|
+
|
|
354
|
+
else if (!isStatus) {
|
|
355
|
+
groupData = await groupMetadata(jid)
|
|
315
356
|
}
|
|
357
|
+
|
|
316
358
|
return groupData;
|
|
317
359
|
})(),
|
|
318
360
|
(async () => {
|
|
319
361
|
if (!participant && !isStatus) {
|
|
320
|
-
const result = await authState.keys.get('sender-key-memory', [jid])
|
|
321
|
-
return result[jid] || {}
|
|
362
|
+
const result = await authState.keys.get('sender-key-memory', [jid])
|
|
363
|
+
return result[jid] || {}
|
|
322
364
|
}
|
|
323
|
-
|
|
324
|
-
|
|
365
|
+
|
|
366
|
+
return {}
|
|
367
|
+
|
|
368
|
+
})()
|
|
325
369
|
]);
|
|
326
370
|
if (!participant) {
|
|
327
|
-
const participantsList = (groupData && !isStatus) ? groupData.participants.map(p => p.id) : []
|
|
371
|
+
const participantsList = (groupData && !isStatus) ? groupData.participants.map(p => p.id) : []
|
|
372
|
+
|
|
328
373
|
if (isStatus && statusJidList) {
|
|
329
|
-
participantsList.push(...statusJidList)
|
|
374
|
+
participantsList.push(...statusJidList)
|
|
330
375
|
}
|
|
331
|
-
|
|
332
|
-
|
|
376
|
+
|
|
377
|
+
// if (!isStatus) {
|
|
378
|
+
// const expiration = await getEphemeralGroup(jid)
|
|
379
|
+
// additionalAttributes = {
|
|
380
|
+
// ...additionalAttributes,
|
|
381
|
+
// addressing_mode: 'pn',
|
|
382
|
+
// ...expiration ? { expiration: expiration.toString() } : null
|
|
383
|
+
// }
|
|
384
|
+
// }
|
|
385
|
+
|
|
386
|
+
const additionalDevices = await getUSyncDevices(participantsList, !!useUserDevicesCache, false)
|
|
387
|
+
devices.push(...additionalDevices)
|
|
333
388
|
}
|
|
334
|
-
|
|
335
|
-
const
|
|
389
|
+
|
|
390
|
+
const patched = await patchMessageBeforeSending(message, devices.map(d => WABinary_1.jidEncode(d.user, isLid ? 'lid' : 's.whatsapp.net', d.device)));
|
|
391
|
+
const bytes = Utils_1.encodeWAMessage(patched);
|
|
392
|
+
|
|
336
393
|
const { ciphertext, senderKeyDistributionMessage } = await signalRepository.encryptGroupMessage({
|
|
337
394
|
group: destinationJid,
|
|
338
395
|
data: bytes,
|
|
339
396
|
meId,
|
|
340
397
|
});
|
|
341
398
|
const senderKeyJids = [];
|
|
342
|
-
|
|
399
|
+
|
|
343
400
|
for (const { user, device } of devices) {
|
|
344
|
-
const jid =
|
|
401
|
+
const jid = WABinary_1.jidEncode(user, (groupData === null || groupData === void 0 ? void 0 : groupData.addressingMode) === 'lid' ? 'lid' : 's.whatsapp.net', device);
|
|
345
402
|
if (!senderKeyMap[jid] || !!participant) {
|
|
346
403
|
senderKeyJids.push(jid);
|
|
347
404
|
// store that this person has had the sender keys sent to them
|
|
@@ -359,95 +416,115 @@ const makeMessagesSocket = (config) => {
|
|
|
359
416
|
}
|
|
360
417
|
};
|
|
361
418
|
await assertSessions(senderKeyJids, false);
|
|
362
|
-
const result = await createParticipantNodes(senderKeyJids, senderKeyMsg,
|
|
419
|
+
const result = await createParticipantNodes(senderKeyJids, senderKeyMsg, extraAttrs)
|
|
363
420
|
shouldIncludeDeviceIdentity = shouldIncludeDeviceIdentity || result.shouldIncludeDeviceIdentity;
|
|
364
421
|
participants.push(...result.nodes);
|
|
365
422
|
}
|
|
366
423
|
binaryNodeContent.push({
|
|
367
424
|
tag: 'enc',
|
|
368
|
-
attrs: { v: '2', type: 'skmsg' },
|
|
425
|
+
attrs: { v: '2', type: 'skmsg', ...extraAttrs },
|
|
369
426
|
content: ciphertext
|
|
370
427
|
});
|
|
371
428
|
await authState.keys.set({ 'sender-key-memory': { [jid]: senderKeyMap } });
|
|
372
429
|
}
|
|
373
430
|
else if (isNewsletter) {
|
|
374
431
|
// Message edit
|
|
375
|
-
if (
|
|
376
|
-
msgId =
|
|
377
|
-
message = message.protocolMessage.editedMessage
|
|
432
|
+
if (message.protocolMessage?.editedMessage) {
|
|
433
|
+
msgId = message.protocolMessage.key?.id
|
|
434
|
+
message = message.protocolMessage.editedMessage
|
|
378
435
|
}
|
|
436
|
+
|
|
379
437
|
// Message delete
|
|
380
|
-
if (
|
|
381
|
-
msgId =
|
|
382
|
-
message = {}
|
|
438
|
+
if (message.protocolMessage?.type === WAProto_1.proto.Message.ProtocolMessage.Type.REVOKE) {
|
|
439
|
+
msgId = message.protocolMessage.key?.id
|
|
440
|
+
message = {}
|
|
383
441
|
}
|
|
384
|
-
|
|
385
|
-
const
|
|
442
|
+
|
|
443
|
+
const patched = await patchMessageBeforeSending(message, [])
|
|
444
|
+
const bytes = Utils_1.encodeNewsletterMessage(patched)
|
|
445
|
+
|
|
386
446
|
binaryNodeContent.push({
|
|
387
447
|
tag: 'plaintext',
|
|
388
|
-
attrs:
|
|
448
|
+
attrs: extraAttrs ? extraAttrs : {},
|
|
389
449
|
content: bytes
|
|
390
|
-
})
|
|
450
|
+
})
|
|
391
451
|
}
|
|
392
452
|
else {
|
|
393
|
-
const { user: meUser
|
|
453
|
+
const { user: meUser } = WABinary_1.jidDecode(meId);
|
|
394
454
|
if (!participant) {
|
|
395
|
-
devices.push({ user })
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
455
|
+
devices.push({ user })
|
|
456
|
+
if (user !== meUser) {
|
|
457
|
+
devices.push({ user: meUser })
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
if (additionalAttributes?.['category'] !== 'peer') {
|
|
461
|
+
const additionalDevices = await getUSyncDevices([meId, jid], !!useUserDevicesCache, true)
|
|
462
|
+
|
|
463
|
+
devices.push(...additionalDevices)
|
|
399
464
|
}
|
|
400
|
-
const additionalDevices = await getUSyncDevices([meId, jid], !!useUserDevicesCache, true);
|
|
401
|
-
devices.push(...additionalDevices);
|
|
402
465
|
}
|
|
403
466
|
const allJids = [];
|
|
404
467
|
const meJids = [];
|
|
405
468
|
const otherJids = [];
|
|
406
469
|
for (const { user, device } of devices) {
|
|
407
|
-
const isMe = user === meUser
|
|
408
|
-
const jid =
|
|
470
|
+
const isMe = user === meUser
|
|
471
|
+
const jid = WABinary_1.jidEncode(isMe && isLid ? authState.creds?.me?.lid?.split(':')[0] || user : user, isLid ? 'lid' : 's.whatsapp.net', device)
|
|
472
|
+
|
|
409
473
|
if (isMe) {
|
|
410
|
-
meJids.push(jid)
|
|
474
|
+
meJids.push(jid)
|
|
411
475
|
}
|
|
476
|
+
|
|
412
477
|
else {
|
|
413
|
-
otherJids.push(jid)
|
|
478
|
+
otherJids.push(jid)
|
|
414
479
|
}
|
|
415
|
-
|
|
480
|
+
|
|
481
|
+
allJids.push(jid)
|
|
416
482
|
}
|
|
417
483
|
await assertSessions(allJids, false);
|
|
418
484
|
const [{ nodes: meNodes, shouldIncludeDeviceIdentity: s1 }, { nodes: otherNodes, shouldIncludeDeviceIdentity: s2 }] = await Promise.all([
|
|
419
|
-
createParticipantNodes(meJids, meMsg,
|
|
420
|
-
createParticipantNodes(otherJids, message,
|
|
421
|
-
])
|
|
485
|
+
createParticipantNodes(meJids, meMsg, extraAttrs),
|
|
486
|
+
createParticipantNodes(otherJids, message, extraAttrs)
|
|
487
|
+
])
|
|
422
488
|
participants.push(...meNodes);
|
|
423
489
|
participants.push(...otherNodes);
|
|
424
490
|
shouldIncludeDeviceIdentity = shouldIncludeDeviceIdentity || s1 || s2;
|
|
425
491
|
}
|
|
426
492
|
if (participants.length) {
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
493
|
+
if (additionalAttributes?.['category'] === 'peer') {
|
|
494
|
+
const peerNode = participants[0]?.content?.[0]
|
|
495
|
+
|
|
496
|
+
if (peerNode) {
|
|
497
|
+
binaryNodeContent.push(peerNode) // push only enc
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
else {
|
|
502
|
+
binaryNodeContent.push({
|
|
503
|
+
tag: 'participants',
|
|
504
|
+
attrs: {},
|
|
505
|
+
content: participants
|
|
506
|
+
})
|
|
507
|
+
}
|
|
432
508
|
}
|
|
509
|
+
|
|
433
510
|
const stanza = {
|
|
434
511
|
tag: 'message',
|
|
435
512
|
attrs: {
|
|
436
513
|
id: msgId,
|
|
437
|
-
type:
|
|
514
|
+
type: getTypeMessage(messages),
|
|
438
515
|
...(additionalAttributes || {})
|
|
439
516
|
},
|
|
440
517
|
content: binaryNodeContent
|
|
441
|
-
}
|
|
518
|
+
}
|
|
442
519
|
// if the participant to send to is explicitly specified (generally retry recp)
|
|
443
520
|
// ensure the message is only sent to that person
|
|
444
521
|
// if a retry receipt is sent to everyone -- it'll fail decryption for everyone else who received the msg
|
|
445
522
|
if (participant) {
|
|
446
|
-
if (
|
|
523
|
+
if (WABinary_1.isJidGroup(destinationJid)) {
|
|
447
524
|
stanza.attrs.to = destinationJid;
|
|
448
525
|
stanza.attrs.participant = participant.jid;
|
|
449
526
|
}
|
|
450
|
-
else if (
|
|
527
|
+
else if (WABinary_1.areJidsSameUser(participant.jid, meId)) {
|
|
451
528
|
stanza.attrs.to = participant.jid;
|
|
452
529
|
stanza.attrs.recipient = destinationJid;
|
|
453
530
|
}
|
|
@@ -466,28 +543,6 @@ const makeMessagesSocket = (config) => {
|
|
|
466
543
|
});
|
|
467
544
|
logger.debug({ jid }, 'adding device identity');
|
|
468
545
|
}
|
|
469
|
-
if (additionalNodes && additionalNodes.length > 0) {
|
|
470
|
-
stanza.content.push(...additionalNodes);
|
|
471
|
-
}
|
|
472
|
-
else {
|
|
473
|
-
if (((0, WABinary_1.isJidGroup)(jid) || (0, WABinary_1.isJidUser)(jid)) && ((message === null || message === void 0 ? void 0 : message.viewOnceMessage) ? message === null || message === void 0 ? void 0 : message.viewOnceMessage : (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2) ? message === null || message === void 0 ? void 0 : message.viewOnceMessageV2 : (message === null || message === void 0 ? void 0 : message.viewOnceMessageV2Extension) ? message === null || message === void 0 ? void 0 : message.viewOnceMessageV2Extension : (message === null || message === void 0 ? void 0 : message.ephemeralMessage) ? message === null || message === void 0 ? void 0 : message.ephemeralMessage : (message === null || message === void 0 ? void 0 : message.templateMessage) ? message === null || message === void 0 ? void 0 : message.templateMessage : (message === null || message === void 0 ? void 0 : message.interactiveMessage) ? message === null || message === void 0 ? void 0 : message.interactiveMessage : message === null || message === void 0 ? void 0 : message.buttonsMessage)) {
|
|
474
|
-
stanza.content.push({
|
|
475
|
-
tag: 'biz',
|
|
476
|
-
attrs: {},
|
|
477
|
-
content: [{
|
|
478
|
-
tag: 'interactive',
|
|
479
|
-
attrs: {
|
|
480
|
-
type: 'native_flow',
|
|
481
|
-
v: '1'
|
|
482
|
-
},
|
|
483
|
-
content: [{
|
|
484
|
-
tag: 'native_flow',
|
|
485
|
-
attrs: { v: '9', name: 'mixed' }
|
|
486
|
-
}]
|
|
487
|
-
}]
|
|
488
|
-
});
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
546
|
|
|
492
547
|
if (AI && isPrivate) {
|
|
493
548
|
const botNode = {
|
|
@@ -497,7 +552,7 @@ const makeMessagesSocket = (config) => {
|
|
|
497
552
|
}
|
|
498
553
|
}
|
|
499
554
|
|
|
500
|
-
const filteredBizBot = WABinary_1.
|
|
555
|
+
const filteredBizBot = WABinary_1.getBinaryNodeFilter(additionalNodes ? additionalNodes : [])
|
|
501
556
|
|
|
502
557
|
if (filteredBizBot) {
|
|
503
558
|
stanza.content.push(...additionalNodes)
|
|
@@ -508,24 +563,46 @@ const makeMessagesSocket = (config) => {
|
|
|
508
563
|
stanza.content.push(botNode)
|
|
509
564
|
}
|
|
510
565
|
}
|
|
511
|
-
|
|
512
|
-
if
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
}
|
|
523
|
-
logger.debug({ jid }, 'adding business node')
|
|
566
|
+
|
|
567
|
+
if(!isNewsletter && buttonType && !isStatus) {
|
|
568
|
+
const content = WABinary_1.getAdditionalNode(buttonType)
|
|
569
|
+
const filteredNode = WABinary_1.getBinaryNodeFilter(additionalNodes)
|
|
570
|
+
|
|
571
|
+
if (filteredNode) {
|
|
572
|
+
didPushAdditional = true
|
|
573
|
+
stanza.content.push(...additionalNodes)
|
|
574
|
+
}
|
|
575
|
+
else {
|
|
576
|
+
stanza.content.push(...content)
|
|
577
|
+
}
|
|
578
|
+
logger.debug({ jid }, 'adding business node')
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
if (!didPushAdditional && additionalNodes && additionalNodes.length > 0) {
|
|
582
|
+
stanza.content.push(...additionalNodes);
|
|
524
583
|
}
|
|
584
|
+
|
|
525
585
|
logger.debug({ msgId }, `sending message to ${participants.length} devices`);
|
|
526
586
|
await sendNode(stanza);
|
|
527
587
|
});
|
|
528
|
-
|
|
588
|
+
|
|
589
|
+
message = Types_1.WAProto.Message.fromObject(message)
|
|
590
|
+
|
|
591
|
+
const messageJSON = {
|
|
592
|
+
key: {
|
|
593
|
+
remoteJid: jid,
|
|
594
|
+
fromMe: true,
|
|
595
|
+
id: msgId
|
|
596
|
+
},
|
|
597
|
+
message: message,
|
|
598
|
+
messageTimestamp: Utils_1.unixTimestampSeconds(new Date()),
|
|
599
|
+
messageStubParameters: [],
|
|
600
|
+
participant: WABinary_1.isJidGroup(jid) || WABinary_1.isJidStatusBroadcast(jid) ? meId : undefined,
|
|
601
|
+
status: Types_1.WAMessageStatus.PENDING
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
return Types_1.WAProto.WebMessageInfo.fromObject(messageJSON)
|
|
605
|
+
// return msgId;
|
|
529
606
|
};
|
|
530
607
|
const getTypeMessage = (msg) => {
|
|
531
608
|
const message = Utils_1.normalizeMessageContent(msg)
|
|
@@ -590,93 +667,38 @@ const makeMessagesSocket = (config) => {
|
|
|
590
667
|
return 'productlink'
|
|
591
668
|
}
|
|
592
669
|
}
|
|
670
|
+
|
|
593
671
|
const getButtonType = (message) => {
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
672
|
+
if (message.listMessage) {
|
|
673
|
+
return 'list'
|
|
674
|
+
}
|
|
597
675
|
else if (message.buttonsMessage) {
|
|
598
676
|
return 'buttons'
|
|
599
677
|
}
|
|
600
|
-
else if(message.interactiveMessage?.nativeFlowMessage) {
|
|
601
|
-
return '
|
|
678
|
+
else if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === 'review_and_pay') {
|
|
679
|
+
return 'review_and_pay'
|
|
602
680
|
}
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
['mpm', 'cta_catalog', 'send_location', 'call_permission_request', 'wa_payment_transaction_details', 'automated_greeting_message_view_catalog']
|
|
621
|
-
.includes(message.interactiveMessage.nativeFlowMessage.buttons[0].name)) {
|
|
622
|
-
return {
|
|
623
|
-
tag: 'biz',
|
|
624
|
-
attrs: {},
|
|
625
|
-
content: [{
|
|
626
|
-
tag: 'interactive',
|
|
627
|
-
attrs: {
|
|
628
|
-
type: 'native_flow',
|
|
629
|
-
v: '1'
|
|
630
|
-
},
|
|
631
|
-
content: [{
|
|
632
|
-
tag: 'native_flow',
|
|
633
|
-
attrs: {
|
|
634
|
-
v: '2',
|
|
635
|
-
name: message.interactiveMessage.nativeFlowMessage.buttons[0].name
|
|
636
|
-
}
|
|
637
|
-
}]
|
|
638
|
-
}]
|
|
639
|
-
}
|
|
640
|
-
} else if (message.interactiveMessage?.nativeFlowMessage || message.buttonsMessage) {
|
|
641
|
-
return {
|
|
642
|
-
tag: 'biz',
|
|
643
|
-
attrs: {},
|
|
644
|
-
content: [{
|
|
645
|
-
tag: 'interactive',
|
|
646
|
-
attrs: {
|
|
647
|
-
type: 'native_flow',
|
|
648
|
-
v: '1'
|
|
649
|
-
},
|
|
650
|
-
content: [{
|
|
651
|
-
tag: 'native_flow',
|
|
652
|
-
attrs: {
|
|
653
|
-
v: '9',
|
|
654
|
-
name: 'mixed'
|
|
655
|
-
}
|
|
656
|
-
}]
|
|
657
|
-
}]
|
|
658
|
-
}
|
|
659
|
-
} else if (message.listMessage) {
|
|
660
|
-
return {
|
|
661
|
-
tag: 'biz',
|
|
662
|
-
attrs: {},
|
|
663
|
-
content: [{
|
|
664
|
-
tag: 'list',
|
|
665
|
-
attrs: {
|
|
666
|
-
v: '2',
|
|
667
|
-
type: 'product_list'
|
|
668
|
-
}
|
|
669
|
-
}]
|
|
670
|
-
}
|
|
671
|
-
} else {
|
|
672
|
-
return {
|
|
673
|
-
tag: 'biz',
|
|
674
|
-
attrs: {}
|
|
675
|
-
}
|
|
681
|
+
else if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === 'review_order') {
|
|
682
|
+
return 'review_order'
|
|
683
|
+
}
|
|
684
|
+
else if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === 'payment_info') {
|
|
685
|
+
return 'payment_info'
|
|
686
|
+
}
|
|
687
|
+
else if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === 'payment_status') {
|
|
688
|
+
return 'payment_status'
|
|
689
|
+
}
|
|
690
|
+
else if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === 'payment_method') {
|
|
691
|
+
return 'payment_method'
|
|
692
|
+
}
|
|
693
|
+
else if (message.interactiveMessage && message.interactiveMessage?.nativeFlowMessage) {
|
|
694
|
+
return 'interactive'
|
|
695
|
+
}
|
|
696
|
+
else if (message.interactiveMessage?.nativeFlowMessage) {
|
|
697
|
+
return 'native_flow'
|
|
676
698
|
}
|
|
677
699
|
}
|
|
678
700
|
const getPrivacyTokens = async (jids) => {
|
|
679
|
-
const t =
|
|
701
|
+
const t = Utils_1.unixTimestampSeconds().toString();
|
|
680
702
|
const result = await query({
|
|
681
703
|
tag: 'iq',
|
|
682
704
|
attrs: {
|
|
@@ -691,7 +713,7 @@ const makeMessagesSocket = (config) => {
|
|
|
691
713
|
content: jids.map(jid => ({
|
|
692
714
|
tag: 'token',
|
|
693
715
|
attrs: {
|
|
694
|
-
jid:
|
|
716
|
+
jid: WABinary_1.jidNormalizedUser(jid),
|
|
695
717
|
t,
|
|
696
718
|
type: 'trusted_contact'
|
|
697
719
|
}
|
|
@@ -700,31 +722,9 @@ const makeMessagesSocket = (config) => {
|
|
|
700
722
|
]
|
|
701
723
|
});
|
|
702
724
|
return result;
|
|
703
|
-
}
|
|
704
|
-
|
|
705
|
-
const sendPeerDataOperationMessage = async (pdoMessage) => {
|
|
706
|
-
var _a;
|
|
707
|
-
//TODO: for later, abstract the logic to send a Peer Message instead of just PDO - useful for App State Key Resync with phone
|
|
708
|
-
if (!((_a = authState.creds.me) === null || _a === void 0 ? void 0 : _a.id)) {
|
|
709
|
-
throw new boom_1.Boom('Not authenticated');
|
|
710
|
-
}
|
|
711
|
-
const protocolMessage = {
|
|
712
|
-
protocolMessage: {
|
|
713
|
-
peerDataOperationRequestMessage: pdoMessage,
|
|
714
|
-
type: WAProto_1.proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_MESSAGE
|
|
715
|
-
}
|
|
716
|
-
};
|
|
717
|
-
const meJid = (0, WABinary_1.jidNormalizedUser)(authState.creds.me.id);
|
|
718
|
-
const msgId = await relayMessage(meJid, protocolMessage, {
|
|
719
|
-
additionalAttributes: {
|
|
720
|
-
category: 'peer',
|
|
721
|
-
// eslint-disable-next-line camelcase
|
|
722
|
-
push_priority: 'high_force',
|
|
723
|
-
},
|
|
724
|
-
});
|
|
725
|
-
return msgId;
|
|
726
|
-
};
|
|
725
|
+
}
|
|
727
726
|
const waUploadToServer = (0, Utils_1.getWAUploadToServer)(config, refreshMediaConn);
|
|
727
|
+
const luki = new imup(Utils_1, waUploadToServer, relayMessage);
|
|
728
728
|
const waitForMsgMediaUpdate = (0, Utils_1.bindWaitForEvent)(ev, 'messages.media-update');
|
|
729
729
|
return {
|
|
730
730
|
...sock,
|
|
@@ -733,7 +733,7 @@ const makeMessagesSocket = (config) => {
|
|
|
733
733
|
relayMessage,
|
|
734
734
|
sendReceipt,
|
|
735
735
|
sendReceipts,
|
|
736
|
-
|
|
736
|
+
luki,
|
|
737
737
|
readMessages,
|
|
738
738
|
refreshMediaConn,
|
|
739
739
|
getUSyncDevices,
|
|
@@ -778,96 +778,74 @@ const makeMessagesSocket = (config) => {
|
|
|
778
778
|
throw error;
|
|
779
779
|
}
|
|
780
780
|
ev.emit('messages.update', [
|
|
781
|
-
{
|
|
781
|
+
{
|
|
782
|
+
key: message.key,
|
|
783
|
+
update: {
|
|
784
|
+
message: message.message
|
|
785
|
+
}
|
|
786
|
+
}
|
|
782
787
|
]);
|
|
783
788
|
return message;
|
|
784
789
|
},
|
|
785
790
|
sendMessage: async (jid, content, options = {}) => {
|
|
786
791
|
const userJid = authState.creds.me.id;
|
|
792
|
+
delete options.ephemeralExpiration
|
|
787
793
|
const { filter = false, quoted } = options;
|
|
788
|
-
const getParticipantAttr = () => {
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
794
|
+
const getParticipantAttr = () => filter ? { participant: { jid } } : {};
|
|
795
|
+
const messageType = luki.detectType(content);
|
|
796
|
+
if (typeof content === 'object' && 'disappearingMessagesInChat' in content &&
|
|
797
|
+
typeof content['disappearingMessagesInChat'] !== 'undefined' && WABinary_1.isJidGroup(jid)) {
|
|
798
|
+
const { disappearingMessagesInChat } = content
|
|
793
799
|
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
const msg = await Utils_1.generateWAMessageFromContent(jid, {
|
|
801
|
-
viewOnceMessage: {
|
|
802
|
-
message: {
|
|
803
|
-
interactiveMessage: {
|
|
804
|
-
body: { text: body },
|
|
805
|
-
footer: { text: footer },
|
|
806
|
-
header: {
|
|
807
|
-
title,
|
|
808
|
-
hasMediaAttachment: true,
|
|
809
|
-
productMessage: {
|
|
810
|
-
product: {
|
|
811
|
-
productImage: imageMessage,
|
|
812
|
-
productId,
|
|
813
|
-
title,
|
|
814
|
-
description,
|
|
815
|
-
currencyCode: "IDR",
|
|
816
|
-
priceAmount1000: null,
|
|
817
|
-
retailerId,
|
|
818
|
-
url,
|
|
819
|
-
productImageCount: 1
|
|
820
|
-
},
|
|
821
|
-
businessOwnerJid: "0@s.whatsapp.net"
|
|
822
|
-
}
|
|
823
|
-
},
|
|
824
|
-
nativeFlowMessage: { buttons }
|
|
825
|
-
}
|
|
826
|
-
}
|
|
827
|
-
}
|
|
828
|
-
}, { quoted });
|
|
829
|
-
|
|
830
|
-
return await relayMessage(jid, msg.message, {
|
|
831
|
-
messageId: msg.key.id,
|
|
832
|
-
...getParticipantAttr()
|
|
833
|
-
});
|
|
800
|
+
const value = typeof disappearingMessagesInChat === 'boolean' ?
|
|
801
|
+
(disappearingMessagesInChat ? Defaults_1.WA_DEFAULT_EPHEMERAL : 0) :
|
|
802
|
+
disappearingMessagesInChat
|
|
803
|
+
|
|
804
|
+
await groupToggleEphemeral(jid, value)
|
|
834
805
|
}
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
const msg = await Utils_1.generateWAMessageFromContent(jid, {
|
|
849
|
-
viewOnceMessage: {
|
|
850
|
-
message: {
|
|
851
|
-
messageContextInfo: {
|
|
852
|
-
deviceListMetadata: {},
|
|
853
|
-
deviceListMetadataVersion: 2
|
|
854
|
-
},
|
|
855
|
-
interactiveMessage: WAProto_1.proto.Message.InteractiveMessage.create({
|
|
856
|
-
body: { text: title },
|
|
857
|
-
footer: { text: footer },
|
|
858
|
-
header,
|
|
859
|
-
nativeFlowMessage: { buttons }
|
|
860
|
-
})
|
|
861
|
-
}
|
|
862
|
-
}
|
|
863
|
-
}, { quoted });
|
|
806
|
+
|
|
807
|
+
else {
|
|
808
|
+
let mediaHandle
|
|
809
|
+
|
|
810
|
+
|
|
811
|
+
if (messageType) {
|
|
812
|
+
switch(messageType) {
|
|
813
|
+
case 'PAYMENT':
|
|
814
|
+
const paymentContent = await luki.handlePayment(content, quoted);
|
|
815
|
+
return await relayMessage(jid, paymentContent, {
|
|
816
|
+
messageId: Utils_1.generateMessageID(),
|
|
817
|
+
...getParticipantAttr()
|
|
818
|
+
});
|
|
864
819
|
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
820
|
+
case 'PRODUCT':
|
|
821
|
+
const productContent = await luki.handleProduct(content, jid, quoted);
|
|
822
|
+
const productMsg = await Utils_1.generateWAMessageFromContent(jid, productContent, { quoted });
|
|
823
|
+
return await relayMessage(jid, productMsg.message, {
|
|
824
|
+
messageId: productMsg.key.id,
|
|
825
|
+
...getParticipantAttr()
|
|
826
|
+
});
|
|
827
|
+
|
|
828
|
+
case 'INTERACTIVE':
|
|
829
|
+
const interactiveContent = await luki.handleInteractive(content, jid, quoted);
|
|
830
|
+
const interactiveMsg = await Utils_1.generateWAMessageFromContent(jid, interactiveContent, { quoted });
|
|
831
|
+
return await relayMessage(jid, interactiveMsg.message, {
|
|
832
|
+
messageId: interactiveMsg.key.id,
|
|
833
|
+
...getParticipantAttr()
|
|
834
|
+
});
|
|
835
|
+
case 'ALBUM':
|
|
836
|
+
return await luki.handleAlbum(content, jid, quoted)
|
|
837
|
+
case 'EVENT':
|
|
838
|
+
return await luki.handleEvent(content, jid, quoted)
|
|
839
|
+
case 'POLL_RESULT':
|
|
840
|
+
return await luki.handlePollResult(content, jid, quoted)
|
|
841
|
+
case 'STATUS_MENTION':
|
|
842
|
+
return await luki.handleStMention(content, jid, quoted)
|
|
843
|
+
case 'ORDER':
|
|
844
|
+
return await luki.handleOrderMessage(content, jid, quoted)
|
|
845
|
+
case 'GROUP_STATUS':
|
|
846
|
+
return await luki.handleGroupStory(content, jid, quoted)
|
|
847
|
+
}
|
|
869
848
|
}
|
|
870
|
-
|
|
871
849
|
const fullMsg = await Utils_1.generateWAMessage(jid, content, {
|
|
872
850
|
logger,
|
|
873
851
|
userJid,
|
|
@@ -892,14 +870,14 @@ const makeMessagesSocket = (config) => {
|
|
|
892
870
|
options: config.options,
|
|
893
871
|
...options
|
|
894
872
|
});
|
|
895
|
-
|
|
873
|
+
|
|
896
874
|
const isDeleteMsg = 'delete' in content && !!content.delete;
|
|
897
875
|
const isEditMsg = 'edit' in content && !!content.edit;
|
|
898
876
|
const isAiMsg = 'ai' in content && !!content.ai;
|
|
899
877
|
|
|
900
878
|
const additionalAttributes = {};
|
|
901
879
|
const additionalNodes = [];
|
|
902
|
-
|
|
880
|
+
|
|
903
881
|
if (isDeleteMsg) {
|
|
904
882
|
const fromMe = content.delete?.fromMe;
|
|
905
883
|
const isGroup = WABinary_1.isJidGroup(content.delete?.remoteJid);
|
|
@@ -913,7 +891,7 @@ const makeMessagesSocket = (config) => {
|
|
|
913
891
|
}, tag: "bot"
|
|
914
892
|
});
|
|
915
893
|
}
|
|
916
|
-
|
|
894
|
+
|
|
917
895
|
await relayMessage(jid, fullMsg.message, {
|
|
918
896
|
messageId: fullMsg.key.id,
|
|
919
897
|
cachedGroupMetadata: options.cachedGroupMetadata,
|
|
@@ -928,6 +906,7 @@ const makeMessagesSocket = (config) => {
|
|
|
928
906
|
});
|
|
929
907
|
}
|
|
930
908
|
return fullMsg;
|
|
909
|
+
}
|
|
931
910
|
}
|
|
932
911
|
}
|
|
933
912
|
};
|