@dyyxyzz/baileys-mod 6.0.42 → 6.0.44

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.
@@ -17,6 +17,76 @@ const newsletter_1 = require("./newsletter");
17
17
  const WAUSync_1 = require("../WAUSync")
18
18
  const kikyy = require('./dugong');
19
19
  var ListType = WAProto_1.proto.Message.ListMessage.ListType;
20
+
21
+ // TAMBAHAN BARU: Helper functions untuk button di newsletter
22
+ const getAdditionalNode = (buttonType) => {
23
+ const nodes = []
24
+
25
+ switch(buttonType) {
26
+ case 'list':
27
+ nodes.push({
28
+ tag: 'biz',
29
+ attrs: {},
30
+ content: [{
31
+ tag: 'list_message',
32
+ attrs: { v: '2' }
33
+ }]
34
+ })
35
+ break
36
+
37
+ case 'buttons':
38
+ nodes.push({
39
+ tag: 'biz',
40
+ attrs: {},
41
+ content: [{
42
+ tag: 'buttons_message',
43
+ attrs: { v: '2' }
44
+ }]
45
+ })
46
+ break
47
+
48
+ case 'interactive':
49
+ case 'native_flow':
50
+ nodes.push({
51
+ tag: 'biz',
52
+ attrs: {},
53
+ content: [{
54
+ tag: 'native_flow',
55
+ attrs: { v: '3' }
56
+ }]
57
+ })
58
+ break
59
+
60
+ case 'review_and_pay':
61
+ case 'review_order':
62
+ case 'payment_info':
63
+ case 'payment_status':
64
+ case 'payment_method':
65
+ nodes.push({
66
+ tag: 'biz',
67
+ attrs: {},
68
+ content: [{
69
+ tag: 'payment',
70
+ attrs: { v: '2' }
71
+ }]
72
+ })
73
+ break
74
+ }
75
+
76
+ return nodes
77
+ }
78
+
79
+ const getBinaryNodeFilter = (nodes) => {
80
+ if (!nodes || !Array.isArray(nodes) || nodes.length === 0) return false
81
+
82
+ return nodes.some(node =>
83
+ node.tag === 'biz' ||
84
+ node.tag === 'bot' ||
85
+ node.tag === 'native_flow' ||
86
+ node.tag === 'payment'
87
+ )
88
+ }
89
+
20
90
  const makeMessagesSocket = (config) => {
21
91
  const {
22
92
  logger,
@@ -428,27 +498,65 @@ const makeMessagesSocket = (config) => {
428
498
  await authState.keys.set({ 'sender-key-memory': { [jid]: senderKeyMap } });
429
499
  }
430
500
  else if (isNewsletter) {
431
- // Message edit
432
- if (message.protocolMessage?.editedMessage) {
433
- msgId = message.protocolMessage.key?.id
434
- message = message.protocolMessage.editedMessage
435
- }
501
+ // Message edit
502
+ if (message.protocolMessage?.editedMessage) {
503
+ msgId = message.protocolMessage.key?.id
504
+ message = message.protocolMessage.editedMessage
505
+ }
436
506
 
437
- // Message delete
438
- if (message.protocolMessage?.type === WAProto_1.proto.Message.ProtocolMessage.Type.REVOKE) {
439
- msgId = message.protocolMessage.key?.id
440
- message = {}
441
- }
507
+ // Message delete
508
+ if (message.protocolMessage?.type === WAProto_1.proto.Message.ProtocolMessage.Type.REVOKE) {
509
+ msgId = message.protocolMessage.key?.id
510
+ message = {}
511
+ }
442
512
 
443
- const patched = await patchMessageBeforeSending(message, [])
444
- const bytes = Utils_1.encodeNewsletterMessage(patched)
513
+ const patched = await patchMessageBeforeSending(message, [])
514
+ const bytes = Utils_1.encodeNewsletterMessage(patched)
515
+
516
+ // Detect button type dan media type
517
+ const buttonType = getButtonType(patched)
518
+ const mediaType = getMediaType(patched)
519
+
520
+ // Set extraAttrs untuk newsletter
521
+ if (mediaType) {
522
+ extraAttrs['mediatype'] = mediaType
523
+ }
524
+
525
+ if (patched.pinInChatMessage || patched.keepInChatMessage ||
526
+ patched.reactionMessage || patched.protocolMessage?.editedMessage) {
527
+ extraAttrs['decrypt-fail'] = 'hide'
528
+ }
529
+
530
+ if (patched.interactiveResponseMessage?.nativeFlowResponseMessage) {
531
+ extraAttrs['native_flow_name'] = patched.interactiveResponseMessage?.nativeFlowResponseMessage.name
532
+ }
533
+
534
+ if (patched.interactiveMessage?.nativeFlowMessage) {
535
+ extraAttrs['native_flow_name'] = patched.interactiveMessage?.nativeFlowMessage?.name || 'flow'
536
+ }
445
537
 
446
- binaryNodeContent.push({
447
- tag: 'plaintext',
448
- attrs: extraAttrs ? extraAttrs : {},
449
- content: bytes
450
- })
451
- }
538
+ binaryNodeContent.push({
539
+ tag: 'plaintext',
540
+ attrs: extraAttrs,
541
+ content: bytes
542
+ })
543
+
544
+ // TAMBAHAN: Push button nodes untuk newsletter
545
+ if (buttonType && !didPushAdditional) {
546
+ const content = getAdditionalNode(buttonType)
547
+ const filteredNode = getBinaryNodeFilter(additionalNodes || [])
548
+
549
+ if (filteredNode && additionalNodes) {
550
+ binaryNodeContent.push(...additionalNodes)
551
+ didPushAdditional = true
552
+ } else if (content && content.length > 0) {
553
+ binaryNodeContent.push(...content)
554
+ didPushAdditional = true
555
+ }
556
+
557
+ logger.debug({ jid, buttonType }, 'adding button node to newsletter')
558
+ }
559
+ }
452
560
  else {
453
561
  const { user: meUser } = WABinary_1.jidDecode(meId);
454
562
  if (!participant) {
@@ -516,9 +624,24 @@ const makeMessagesSocket = (config) => {
516
624
  },
517
625
  content: binaryNodeContent
518
626
  }
519
- // if the participant to send to is explicitly specified (generally retry recp)
520
- // ensure the message is only sent to that person
521
- // if a retry receipt is sent to everyone -- it'll fail decryption for everyone else who received the msg
627
+ if (isNewsletter && !didPushAdditional) {
628
+ const buttonType = getButtonType(messages)
629
+
630
+ if (buttonType) {
631
+ const content = WABinary_1.getAdditionalNode(buttonType)
632
+ const filteredNode = WABinary_1.getBinaryNodeFilter(additionalNodes || [])
633
+
634
+ if (filteredNode && additionalNodes) {
635
+ stanza.content.push(...additionalNodes)
636
+ didPushAdditional = true
637
+ } else if (content && content.length > 0) {
638
+ stanza.content.push(...content)
639
+ didPushAdditional = true
640
+ }
641
+
642
+ logger.debug({ jid, buttonType }, 'adding button node to newsletter')
643
+ }
644
+ }
522
645
  if (participant) {
523
646
  if (WABinary_1.isJidGroup(destinationJid)) {
524
647
  stanza.attrs.to = destinationJid;
@@ -669,34 +792,40 @@ const makeMessagesSocket = (config) => {
669
792
  }
670
793
 
671
794
  const getButtonType = (message) => {
672
- if (message.listMessage) {
673
- return 'list'
674
- }
675
- else if (message.buttonsMessage) {
676
- return 'buttons'
677
- }
678
- else if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === 'review_and_pay') {
679
- return 'review_and_pay'
680
- }
681
- else if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === 'review_order') {
682
- return 'review_order'
683
- }
684
- else if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === 'payment_info') {
685
- return 'payment_info'
686
- }
687
- else if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === 'payment_status') {
688
- return 'payment_status'
689
- }
690
- else if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === 'payment_method') {
691
- return 'payment_method'
692
- }
693
- else if (message.interactiveMessage && message.interactiveMessage?.nativeFlowMessage) {
694
- return 'interactive'
695
- }
696
- else if (message.interactiveMessage?.nativeFlowMessage) {
697
- return 'native_flow'
698
- }
795
+ if (message.listMessage) {
796
+ return 'list'
797
+ }
798
+ else if (message.buttonsMessage) {
799
+ return 'buttons'
800
+ }
801
+ else if (message.viewOnceMessage?.message?.interactiveMessage) {
802
+ return 'interactive'
803
+ }
804
+ else if (message.viewOnceMessageV2?.message?.interactiveMessage) {
805
+ return 'interactive'
806
+ }
807
+ else if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === 'review_and_pay') {
808
+ return 'review_and_pay'
809
+ }
810
+ else if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === 'review_order') {
811
+ return 'review_order'
812
+ }
813
+ else if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === 'payment_info') {
814
+ return 'payment_info'
815
+ }
816
+ else if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === 'payment_status') {
817
+ return 'payment_status'
818
+ }
819
+ else if (message.interactiveMessage?.nativeFlowMessage?.buttons?.[0]?.name === 'payment_method') {
820
+ return 'payment_method'
821
+ }
822
+ else if (message.interactiveMessage?.nativeFlowMessage) {
823
+ return 'native_flow'
824
+ }
825
+ else if (message.interactiveMessage) {
826
+ return 'interactive'
699
827
  }
828
+ }
700
829
  const getPrivacyTokens = async (jids) => {
701
830
  const t = Utils_1.unixTimestampSeconds().toString();
702
831
  const result = await query({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dyyxyzz/baileys-mod",
3
- "version": "6.0.42",
3
+ "version": "6.0.44",
4
4
  "description": "WhatsApp API Modification",
5
5
  "keywords": [
6
6
  "whatsapp",