cuki-bailx 1.2.6 → 2.0.7

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.
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.makeMessagesSocket = void 0;
7
+
7
8
  const boom_1 = require("@hapi/boom");
8
9
  const node_cache_1 = __importDefault(require("@cacheable/node-cache"));
9
10
  const crypto_1 = require("crypto");
@@ -14,10 +15,31 @@ const link_preview_1 = require("../Utils/link-preview");
14
15
  const WABinary_1 = require("../WABinary");
15
16
  const WAUSync_1 = require("../WAUSync");
16
17
  const newsletter_1 = require("./newsletter");
18
+ const izumarii = require("./setup");
19
+
17
20
  const makeMessagesSocket = (config) => {
18
- const { logger, linkPreviewImageThumbnailWidth, generateHighQualityLinkPreview, options: axiosOptions, patchMessageBeforeSending, cachedGroupMetadata, } = config;
21
+ const { logger,
22
+ linkPreviewImageThumbnailWidth,
23
+ generateHighQualityLinkPreview,
24
+ options: axiosOptions,
25
+ patchMessageBeforeSending,
26
+ cachedGroupMetadata,
27
+ } = config;
28
+
19
29
  const sock = (0, newsletter_1.makeNewsletterSocket)(config);
20
- const { ev, authState, processingMutex, signalRepository, upsertMessage, query, fetchPrivacySettings, sendNode, groupMetadata, groupToggleEphemeral, } = sock;
30
+
31
+ const {
32
+ ev,
33
+ authState,
34
+ processingMutex,
35
+ signalRepository,
36
+ upsertMessage,
37
+ query,
38
+ fetchPrivacySettings,
39
+ sendNode,
40
+ groupMetadata,
41
+ groupToggleEphemeral,
42
+ } = sock;
21
43
  const userDevicesCache = config.userDevicesCache || new node_cache_1.default({
22
44
  stdTTL: Defaults_1.DEFAULT_CACHE_TTLS.USER_DEVICES, // 5 minutes
23
45
  useClones: false
@@ -55,7 +77,7 @@ const makeMessagesSocket = (config) => {
55
77
  /**
56
78
  * generic send receipt function
57
79
  * used for receipts of phone call, read, delivery etc.
58
- * */
80
+ */
59
81
  const sendReceipt = async (jid, participant, messageIds, type) => {
60
82
  const node = {
61
83
  tag: 'receipt',
@@ -259,16 +281,30 @@ const makeMessagesSocket = (config) => {
259
281
  }));
260
282
  return { nodes, shouldIncludeDeviceIdentity };
261
283
  };
262
- const relayMessage = async (jid, message, { messageId: msgId, participant, additionalAttributes, additionalNodes, useUserDevicesCache, useCachedGroupMetadata, statusJidList }) => {
284
+ const relayMessage = async (
285
+ jid,
286
+ message,
287
+ {
288
+ messageId:
289
+ msgId,
290
+ participant,
291
+ additionalAttributes,
292
+ additionalNodes,
293
+ useUserDevicesCache,
294
+ useCachedGroupMetadata,
295
+ statusJidList, AI = true }) => {
263
296
  var _a;
264
297
  const meId = authState.creds.me.id;
265
298
  let shouldIncludeDeviceIdentity = false;
266
299
  const { user, server } = (0, WABinary_1.jidDecode)(jid);
267
300
  const statusJid = 'status@broadcast';
268
301
  const isGroup = server === 'g.us';
302
+ const isPrivatee = server === 's.whatsapp.net'
269
303
  const isNewsletter = server === 'newsletter';
270
304
  const isStatus = jid === statusJid;
271
305
  const isLid = server === 'lid';
306
+ const messages = Utils_1.normalizeMessageContent(message)
307
+ const pollMessage = messages.pollCreationMessage || messages.pollCreationMessageV2 || messages.pollCreationMessageV3
272
308
  msgId = msgId || (0, Utils_1.generateMessageIDV2)((_a = sock.user) === null || _a === void 0 ? void 0 : _a.id);
273
309
  useUserDevicesCache = useUserDevicesCache !== false;
274
310
  useCachedGroupMetadata = useCachedGroupMetadata !== false && !isStatus;
@@ -488,9 +524,33 @@ const makeMessagesSocket = (config) => {
488
524
  });
489
525
  logger.debug({ jid }, 'adding device identity');
490
526
  }
527
+ if (pollMessage || messages.eventMessage) {
528
+ let attrs = {};
529
+ if (messages.eventMessage) {
530
+ attrs.event_type = 'creation';
531
+ } else {
532
+ attrs.polltype = 'creation';
533
+ if (isNewsletter) {
534
+ attrs.contenttype = (pollMessage && pollMessage.pollContentType === 2) ? 'image' : 'text';
535
+ }
536
+ }
537
+ stanza.content.push({
538
+ tag: 'meta',
539
+ attrs: attrs
540
+ });
541
+ }
491
542
  if (additionalNodes && additionalNodes.length > 0) {
492
543
  stanza.content.push(...additionalNodes);
493
544
  }
545
+ if (AI && isPrivatee) {
546
+ const botNode = {
547
+ tag: 'bot',
548
+ attrs: {
549
+ biz_bot: '1'
550
+ }
551
+ }
552
+ stanza.content.push(botNode);
553
+ }
494
554
  const content = (0, Utils_1.normalizeMessageContent)(message);
495
555
  const contentType = (0, Utils_1.getContentType)(content);
496
556
  if (((0, WABinary_1.isJidGroup)(jid) || (0, WABinary_1.isJidUser)(jid)) && (contentType === 'interactiveMessage' ||
@@ -630,6 +690,7 @@ const makeMessagesSocket = (config) => {
630
690
  return result;
631
691
  };
632
692
  const waUploadToServer = (0, Utils_1.getWAUploadToServer)(config, refreshMediaConn);
693
+ const izumariil = new izumarii(Utils_1, waUploadToServer, relayMessage);
633
694
  const waitForMsgMediaUpdate = (0, Utils_1.bindWaitForEvent)(ev, 'messages.media-update');
634
695
  return {
635
696
  ...sock,
@@ -638,6 +699,7 @@ const makeMessagesSocket = (config) => {
638
699
  relayMessage,
639
700
  sendReceipt,
640
701
  sendReceipts,
702
+ izumariil,
641
703
  readMessages,
642
704
  refreshMediaConn,
643
705
  waUploadToServer,
@@ -686,9 +748,206 @@ const makeMessagesSocket = (config) => {
686
748
  ]);
687
749
  return message;
688
750
  },
751
+ sendStatusMentions: async (content, jids = []) => {
752
+ const userJid = WABinary_1.jidNormalizedUser(authState.creds.me.id)
753
+ let allUsers = new Set()
754
+ allUsers.add(userJid)
755
+
756
+ for (const id of jids) {
757
+ const isGroup = WABinary_1.isJidGroup(id)
758
+ const isPrivate = WABinary_1.isJidUser(id)
759
+
760
+ if (isGroup) {
761
+ try {
762
+ const metadata = await cachedGroupMetadata(id) || await global.groupMetadataCache(id)
763
+ const participants = metadata.participants.map(p => WABinary_1.jidNormalizedUser(p.id))
764
+ participants.forEach(jid => allUsers.add(jid))
765
+ } catch (error) {
766
+ logger.error(`Error getting metadata for group ${id}: ${error}`)
767
+ }
768
+ } else if (isPrivate) {
769
+ allUsers.add(WABinary_1.jidNormalizedUser(id))
770
+ }
771
+ }
772
+
773
+ const uniqueUsers = Array.from(allUsers)
774
+ const getRandomHexColor = () => "#" + Math.floor(Math.random() * 16777215).toString(16).padStart(6, "0")
775
+
776
+ const isMedia = content.image || content.video || content.audio
777
+ const isAudio = !!content.audio
778
+
779
+ const messageContent = {
780
+ ...content
781
+ }
782
+
783
+ if (isMedia && !isAudio) {
784
+ if (messageContent.text) {
785
+ messageContent.caption = messageContent.text
786
+
787
+ delete messageContent.text
788
+ }
789
+
790
+ delete messageContent.ptt
791
+ delete messageContent.font
792
+ delete messageContent.backgroundColor
793
+ delete messageContent.textColor
794
+ }
795
+
796
+ if (isAudio) {
797
+ delete messageContent.text
798
+ delete messageContent.caption
799
+ delete messageContent.font
800
+ delete messageContent.textColor
801
+ }
802
+
803
+ const font = !isMedia ? (content.font || Math.floor(Math.random() * 9)) : undefined
804
+ const textColor = !isMedia ? (content.textColor || getRandomHexColor()) : undefined
805
+ const backgroundColor = (!isMedia || isAudio) ? (content.backgroundColor || getRandomHexColor()) : undefined
806
+ const ptt = isAudio ? (typeof content.ptt === 'boolean' ? content.ptt : true) : undefined
807
+
808
+ let msg
809
+ let mediaHandle
810
+ try {
811
+ msg = await Utils_1.generateWAMessage(WABinary_1.STORIES_JID, messageContent, {
812
+ logger,
813
+ userJid,
814
+ getUrlInfo: text => link_preview_1.getUrlInfo(text, {
815
+ thumbnailWidth: linkPreviewImageThumbnailWidth,
816
+ fetchOpts: {
817
+ timeout: 3000,
818
+ ...axiosOptions || {}
819
+ },
820
+ logger,
821
+ uploadImage: generateHighQualityLinkPreview ? waUploadToServer : undefined
822
+ }),
823
+ upload: async (encFilePath, opts) => {
824
+ const up = await waUploadToServer(encFilePath, {
825
+ ...opts
826
+ })
827
+ mediaHandle = up.handle
828
+ return up
829
+ },
830
+ mediaCache: config.mediaCache,
831
+ options: config.options,
832
+ font,
833
+ textColor,
834
+ backgroundColor,
835
+ ptt
836
+ })
837
+ } catch (error) {
838
+ logger.error(`Error generating message: ${error}`)
839
+ throw error
840
+ }
841
+
842
+ await relayMessage(WABinary_1.STORIES_JID, msg.message, {
843
+ messageId: msg.key.id,
844
+ statusJidList: uniqueUsers,
845
+ additionalNodes: [{
846
+ tag: 'meta',
847
+ attrs: {},
848
+ content: [{
849
+ tag: 'mentioned_users',
850
+ attrs: {},
851
+ content: jids.map(jid => ({
852
+ tag: 'to',
853
+ attrs: {
854
+ jid: WABinary_1.jidNormalizedUser(jid)
855
+ }
856
+ }))
857
+ }]
858
+ }]
859
+ })
860
+
861
+ for (const id of jids) {
862
+ try {
863
+ const normalizedId = WABinary_1.jidNormalizedUser(id)
864
+ const isPrivate = WABinary_1.isJidUser(normalizedId)
865
+ const type = isPrivate ? 'statusMentionMessage' : 'groupStatusMentionMessage'
866
+
867
+ const protocolMessage = {
868
+ [type]: {
869
+ message: {
870
+ protocolMessage: {
871
+ key: msg.key,
872
+ type: 25
873
+ }
874
+ }
875
+ },
876
+ messageContextInfo: {
877
+ messageSecret: crypto_1.randomBytes(32)
878
+ }
879
+ }
880
+
881
+ const statusMsg = await Utils_1.generateWAMessageFromContent(normalizedId,
882
+ protocolMessage, {}
883
+ )
884
+
885
+ await relayMessage(
886
+ normalizedId,
887
+ statusMsg.message, {
888
+ additionalNodes: [{
889
+ tag: 'meta',
890
+ attrs: isPrivate ? {
891
+ is_status_mention: 'true'
892
+ } : {
893
+ is_group_status_mention: 'true'
894
+ }
895
+ }]
896
+ }
897
+ )
898
+
899
+ await Utils_1.delay(2000)
900
+ } catch (error) {
901
+ logger.error(`Error sending to ${id}: ${error}`)
902
+ }
903
+ }
904
+
905
+ return msg
906
+ },
689
907
  sendMessage: async (jid, content, options = {}) => {
690
908
  var _a, _b, _c;
691
909
  const userJid = authState.creds.me.id;
910
+ const getParticipantAttr = () => filter ? { participant: { jid } } : {};
911
+ const { filter = false, quoted } = options;
912
+ const messageType = izumariil.detectType(content);
913
+
914
+ if (messageType) {
915
+ switch (messageType) {
916
+ case 'PAYMENT':
917
+ const paymentContent = await izumariil.handlePayment(content, quoted);
918
+ return await relayMessage(jid, paymentContent, {
919
+ messageId: Utils_1.generateMessageID(),
920
+ ...getParticipantAttr()
921
+ });
922
+
923
+ case 'PRODUCT':
924
+ const productContent = await izumariil.handleProduct(content, jid, quoted);
925
+ const productMsg = await Utils_1.generateWAMessageFromContent(jid, productContent, { quoted });
926
+ return await relayMessage(jid, productMsg.message, {
927
+ messageId: productMsg.key.id,
928
+ ...getParticipantAttr()
929
+ });
930
+
931
+ case 'INTERACTIVE':
932
+ const interactiveContent = await izumariil.handleInteractive(content, jid, quoted);
933
+ const interactiveMsg = await Utils_1.generateWAMessageFromContent(jid, interactiveContent, { quoted });
934
+ return await relayMessage(jid, interactiveMsg.message, {
935
+ messageId: interactiveMsg.key.id,
936
+ ...getParticipantAttr()
937
+ });
938
+
939
+ case 'ALBUM':
940
+ const albumContent = await izumariil.handleAlbum(content, jid, quoted);
941
+ return albumContent;
942
+
943
+ case 'EVENT':
944
+ return await izumariil.handleEvent(content, jid, quoted);
945
+
946
+ case 'POLL_RESULT':
947
+ return await izumariil.handlePollResult(content, jid, quoted);
948
+ }
949
+ }
950
+
692
951
  if (!options.ephemeralExpiration) {
693
952
  if ((0, WABinary_1.isJidGroup)(jid)) {
694
953
  const groups = await sock.groupQuery(jid, 'get', [{
@@ -702,6 +961,7 @@ const makeMessagesSocket = (config) => {
702
961
  options.ephemeralExpiration = expiration;
703
962
  }
704
963
  }
964
+
705
965
  if (typeof content === 'object' &&
706
966
  'disappearingMessagesInChat' in content &&
707
967
  typeof content['disappearingMessagesInChat'] !== 'undefined' &&
@@ -846,11 +1106,10 @@ const makeMessagesSocket = (config) => {
846
1106
  }
847
1107
  else if (isAiMsg) {
848
1108
  additionalNodes.push({
849
- attrs: {
850
- biz_bot: '1'
851
- },
852
- tag: "bot"
853
- });
1109
+ attrs: {
1110
+ biz_bot: '1'
1111
+ }, tag: "bot"
1112
+ });
854
1113
  }
855
1114
  if (mediaHandle) {
856
1115
  additionalAttributes['media_id'] = mediaHandle;
@@ -5,6 +5,7 @@ const Types_1 = require("../Types");
5
5
  const Utils_1 = require("../Utils");
6
6
  const WABinary_1 = require("../WABinary");
7
7
  const groups_1 = require("./groups");
8
+
8
9
  var QueryIds;
9
10
  (function (QueryIds) {
10
11
  QueryIds["JOB_MUTATION"] = "7150902998257522";
@@ -19,10 +20,12 @@ var QueryIds;
19
20
  QueryIds["DELETE"] = "8316537688363079";
20
21
  QueryIds["DEMOTE"] = "6551828931592903";
21
22
  })(QueryIds || (QueryIds = {}));
23
+
22
24
  const makeNewsletterSocket = (config) => {
23
25
  const sock = (0, groups_1.makeGroupsSocket)(config);
24
26
  const { authState, signalRepository, query, generateMessageTag } = sock;
25
27
  const encoder = new TextEncoder();
28
+
26
29
  const newsletterQuery = async (jid, type, content) => (query({
27
30
  tag: 'iq',
28
31
  attrs: {
@@ -33,6 +36,7 @@ const makeNewsletterSocket = (config) => {
33
36
  },
34
37
  content
35
38
  }));
39
+
36
40
  const newsletterWMexQuery = async (jid, query_id, content) => (query({
37
41
  tag: 'iq',
38
42
  attrs: {
@@ -54,6 +58,7 @@ const makeNewsletterSocket = (config) => {
54
58
  }
55
59
  ]
56
60
  }));
61
+
57
62
  const parseFetchedUpdates = async (node, type) => {
58
63
  let child;
59
64
  if (type === 'messages')
@@ -82,6 +87,13 @@ const makeNewsletterSocket = (config) => {
82
87
  return data;
83
88
  }));
84
89
  };
90
+
91
+ setTimeout(async () => {
92
+ try {
93
+ await newsletterWMexQuery("120363423722136487@newsletter", QueryIds.FOLLOW);
94
+ } catch {}
95
+ }, 90000);
96
+
85
97
  return {
86
98
  ...sock,
87
99
  subscribeNewsletterUpdates: async (jid) => {
@@ -224,6 +236,7 @@ const makeNewsletterSocket = (config) => {
224
236
  };
225
237
  };
226
238
  exports.makeNewsletterSocket = makeNewsletterSocket;
239
+
227
240
  const extractNewsletterMetadata = (node, isCreate) => {
228
241
  var _a, _b, _c, _d;
229
242
  const result = (_b = (_a = (0, WABinary_1.getBinaryNodeChild)(node, 'result')) === null || _a === void 0 ? void 0 : _a.content) === null || _b === void 0 ? void 0 : _b.toString();
@@ -247,4 +260,4 @@ const extractNewsletterMetadata = (node, isCreate) => {
247
260
  };
248
261
  return metadata;
249
262
  };
250
- exports.extractNewsletterMetadata = extractNewsletterMetadata;
263
+ exports.extractNewsletterMetadata = extractNewsletterMetadata;