@nuiisweety/baileys 0.1.5 → 0.1.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.
package/README.md.bak CHANGED
@@ -1,70 +1,128 @@
1
- <h1 align="center">✨@nuiisweety/baileys</h1>
2
-
3
- <div align="center">
4
- <img src="https://raw.githubusercontent.com/NuiiS4TORU/-nuisockets/refs/heads/main/nuiisweety.png" width="100%"/>
5
- </div>
6
-
7
- <div align="center">
8
- <i>✨ Fork manis dari <code>@whiskeysockets/baileys</code> v7.0.0-rc11 &mdash; dikembangkan dengan sepenuh hati oleh <b>NuiiS4TORU</b> 💖</i>
9
- </div>
10
-
11
- <br/>
12
-
13
- <div align="center">
14
- <blockquote>
15
- 🌷 <b>@nuiisweety/baileys hanya pernah bercabang dari satu sumber yang ia percaya, yaitu <a href="https://github.com/WhiskeySockets/Baileys">@whiskeysockets/baileys</a>.</b><br/>
16
- Setiap modifikasi adalah buah dari pengembangan mandiri yang penuh dedikasi~ 🍀
17
- </blockquote>
18
- </div>
19
-
20
- ---
21
-
22
- ## 🗺️ Navigasi Sayang
23
-
24
1
  <div align="center">
25
2
 
26
- **🔌 Koneksi**
27
- [QR Code](#-koneksi-qr-code) &nbsp;·&nbsp; [Pairing Code](#-koneksi-pairing-code) &nbsp;·&nbsp; [Browser Identity](#️-browser-identity) &nbsp;·&nbsp; [Opsi Koneksi](#️-opsi-koneksi)
28
-
29
- **📨 Handle Pesan**
30
- [Terima Pesan](#-terima-pesan) &nbsp;·&nbsp; [Handle Grup](#-handle-grup)
3
+ <img src="https://raw.githubusercontent.com/NuiiS4TORU/-nuisockets/refs/heads/main/nuiisweety.png" width="100%"/>
31
4
 
32
- **💌 Kirim Pesan**
33
- [Teks](#-teks) &nbsp;·&nbsp; [Gambar](#️-gambar) &nbsp;·&nbsp; [Video](#-video) &nbsp;·&nbsp; [Audio & Voice Note](#-audio--voice-note) &nbsp;·&nbsp; [Dokumen](#-dokumen) &nbsp;·&nbsp; [Sticker](#-sticker) &nbsp;·&nbsp; [Lokasi](#-lokasi) &nbsp;·&nbsp; [Kontak](#-kontak)
5
+ # @nuiisweety/baileys
34
6
 
35
- **💞 Interaksi**
36
- [Reaksi](#-reaksi) &nbsp;·&nbsp; [Poll](#️-poll) &nbsp;·&nbsp; [Poll Result](#-poll-result) &nbsp;·&nbsp; [Poll Update](#️-poll-update) &nbsp;·&nbsp; [Forward](#️-forward) &nbsp;·&nbsp; [Hapus](#️-hapus-pesan) &nbsp;·&nbsp; [Edit](#️-edit-pesan) &nbsp;·&nbsp; [Pin](#-pin-pesan)
7
+ *Fork dari [`@whiskeysockets/baileys`](https://github.com/WhiskeySockets/Baileys) v7.0.0-rc11*
8
+ *dikembangkan dengan sepenuh hati oleh **NuiiS4TORU***
37
9
 
38
- **🌺 Tambahan**
39
- [Album](#️-album) &nbsp;·&nbsp; [Event](#-event) &nbsp;·&nbsp; [Group Status](#-group-status--group-story) &nbsp;·&nbsp; [Status Mention](#️-status-mention) &nbsp;·&nbsp; [Flow Reply](#-flow-reply) &nbsp;·&nbsp; [Button Reply](#-button-reply) &nbsp;·&nbsp; [Keep In Chat](#-keep-in-chat) &nbsp;·&nbsp; [Scheduled Call](#-scheduled-call) &nbsp;·&nbsp; [Group Invite](#-group-invite) &nbsp;·&nbsp; [Product](#️-product)
10
+ [![npm version](https://img.shields.io/badge/npm-0.1.4-pink?style=flat-square&logo=npm)](https://www.npmjs.com/package/@nuiisweety/baileys)
11
+ [![license](https://img.shields.io/badge/license-MIT-lavender?style=flat-square)](LICENSE)
12
+ [![based on](https://img.shields.io/badge/based%20on-@whiskeysockets%2Fbaileys-orchid?style=flat-square)](https://github.com/WhiskeySockets/Baileys)
40
13
 
41
- **🎀 Wrapper**
42
- [View Once](#️-view-once) &nbsp;·&nbsp; [View Once V2](#️-view-once-v2) &nbsp;·&nbsp; [Ephemeral](#️-ephemeral) &nbsp;·&nbsp; [Spoiler](#-spoiler) &nbsp;·&nbsp; [Group Status Wrap](#-group-status-wrap) &nbsp;·&nbsp; [Lottie Sticker](#-lottie-sticker) &nbsp;·&nbsp; [AI Icon](#-ai-icon) &nbsp;·&nbsp; [Secure Meta Label](#️-secure-meta-service-label)
43
-
44
- **✨ Interactive**
45
- [Buttons](#-buttons) &nbsp;·&nbsp; [List Message](#-list-message) &nbsp;·&nbsp; [Template Buttons](#️-template-buttons) &nbsp;·&nbsp; [Native Flow](#-native-flow) &nbsp;·&nbsp; [Carousel](#-carousel)
46
-
47
- **🌟 Rich Message (AI)**
48
- [Code Block](#-code-block) &nbsp;·&nbsp; [Links](#-links-rich) &nbsp;·&nbsp; [Table](#-table-rich) &nbsp;·&nbsp; [Rich Response (Gabungan)](#-rich-response-gabungan)
14
+ </div>
49
15
 
50
- **🍃 Lainnya**
51
- [List Reply](#-list-reply) &nbsp;·&nbsp; [Sticker Pack](#-sticker-pack) &nbsp;·&nbsp; [External Ad Reply](#-external-ad-reply) &nbsp;·&nbsp; [Request Payment](#-request-payment) &nbsp;·&nbsp; [Invoice](#-invoice) &nbsp;·&nbsp; [Order](#-order) &nbsp;·&nbsp; [Disappearing Messages](#-disappearing-messages) &nbsp;·&nbsp; [Raw Message](#-raw-message)
16
+ ---
52
17
 
53
- </div>
18
+ ## 🗺️ Navigasi
19
+
20
+ 🔌 **Koneksi & Setup** —
21
+ [Instalasi](#instalasi) ·
22
+ [QR Code](#koneksi-qr-code) ·
23
+ [Pairing Code](#koneksi-pairing-code) ·
24
+ [Browser Identity](#browser-identity) ·
25
+ [Opsi Koneksi](#opsi-koneksi)
26
+
27
+ 📨 **Handle Pesan** —
28
+ [Terima Pesan](#terima-pesan) ·
29
+ [Handle Grup](#handle-grup)
30
+
31
+ 📤 **Kirim Pesan** —
32
+ [Teks](#teks) ·
33
+ [Gambar](#gambar) ·
34
+ [Video](#video) ·
35
+ [Audio & Voice Note](#audio--voice-note) ·
36
+ [Dokumen](#dokumen) ·
37
+ [Sticker](#sticker) ·
38
+ [Lokasi](#lokasi) ·
39
+ [Kontak](#kontak)
40
+
41
+ 💬 **Interaksi** —
42
+ [Reaksi](#reaksi) ·
43
+ [Poll](#poll) ·
44
+ [Poll Result](#poll-result) ·
45
+ [Poll Update](#poll-update) ·
46
+ [Forward](#forward) ·
47
+ [Hapus](#hapus-pesan) ·
48
+ [Edit](#edit-pesan) ·
49
+ [Pin](#pin-pesan)
50
+
51
+ ✨ **Fitur Tambahan** —
52
+ [Album](#album) ·
53
+ [Event](#event) ·
54
+ [Group Status / Story](#group-status--group-story) ·
55
+ [Status Mention](#status-mention) ·
56
+ [Flow Reply](#flow-reply) ·
57
+ [Button Reply](#button-reply) ·
58
+ [Keep In Chat](#keep-in-chat) ·
59
+ [Scheduled Call](#scheduled-call) ·
60
+ [Group Invite](#group-invite) ·
61
+ [Product](#product)
62
+
63
+ 🎁 **Wrapper** —
64
+ [View Once](#view-once) ·
65
+ [View Once V2](#view-once-v2) ·
66
+ [Ephemeral](#ephemeral) ·
67
+ [Spoiler](#spoiler) ·
68
+ [Group Status Wrap](#group-status-wrap) ·
69
+ [Lottie Sticker](#lottie-sticker) ·
70
+ [AI Icon](#ai-icon) ·
71
+ [Secure Meta Label](#secure-meta-service-label)
72
+
73
+ 🎛️ **Interactive** —
74
+ [Buttons](#buttons) ·
75
+ [List Message](#list-message) ·
76
+ [Template Buttons](#template-buttons) ·
77
+ [Native Flow](#native-flow) ·
78
+ [Carousel](#carousel)
79
+
80
+ 🤖 **Rich Message (AI)** —
81
+ [Text](#addtext) ·
82
+ [Code Block](#addcode) ·
83
+ [Table](#addtable) ·
84
+ [Image](#addimage) ·
85
+ [Video](#addvideo) ·
86
+ [Source](#addsource) ·
87
+ [Reels](#addreels) ·
88
+ [Product Card](#addproduct) ·
89
+ [Post](#addpost) ·
90
+ [Tip](#addtip) ·
91
+ [Suggest](#addsuggest) ·
92
+ [Map](#map-rich) ·
93
+ [LaTeX](#latex-rich) ·
94
+ [Grid Image](#grid-image-rich) ·
95
+ [Inline Image](#inline-image-rich) ·
96
+ [Dynamic/GIF](#dynamic--gif-rich) ·
97
+ [Content Items](#content-items-rich) ·
98
+ [Gabungan (richResponse)](#rich-response-gabungan) ·
99
+ [Terima & Decode](#terima--decode-rich-message)
100
+
101
+ 🔧 **Lainnya** —
102
+ [List Reply](#list-reply) ·
103
+ [Sticker Pack](#sticker-pack) ·
104
+ [External Ad Reply](#external-ad-reply) ·
105
+ [Request Payment](#request-payment) ·
106
+ [Invoice](#invoice) ·
107
+ [Order](#order) ·
108
+ [Disappearing Messages](#disappearing-messages) ·
109
+ [Raw Message](#raw-message)
54
110
 
55
111
  ---
56
112
 
57
- ## 🌸 Instalasi
113
+ ## 📦 Instalasi
58
114
 
59
115
  ```js
116
+ // CommonJS
60
117
  const { default: makeWASocket } = require('@nuiisweety/baileys')
61
- // atau ESM 🌿
118
+
119
+ // ESM
62
120
  import makeWASocket from '@nuiisweety/baileys'
63
121
  ```
64
122
 
65
123
  ---
66
124
 
67
- ## 🔌 Koneksi QR Code
125
+ ## 📱 Koneksi QR Code
68
126
 
69
127
  ```js
70
128
  const {
@@ -90,7 +148,7 @@ async function start() {
90
148
  const code = lastDisconnect?.error?.output?.statusCode
91
149
  if (code !== DisconnectReason.loggedOut) start()
92
150
  } else if (connection === 'open') {
93
- console.log('💖 Terhubung dengan indah!')
151
+ console.log('Connected!')
94
152
  }
95
153
  })
96
154
  }
@@ -101,14 +159,10 @@ start()
101
159
 
102
160
  ## 🔑 Koneksi Pairing Code
103
161
 
104
- > 🌷 Cocok untuk server/VPS tanpa tampilan terminal — tetap bisa terhubung dengan elegan~
162
+ > Cocok untuk server/VPS tanpa tampilan terminal.
105
163
 
106
164
  ```js
107
- const sock = makeWASocket({
108
- version,
109
- auth: state,
110
- printQRInTerminal: false
111
- })
165
+ const sock = makeWASocket({ version, auth: state, printQRInTerminal: false })
112
166
 
113
167
  sock.ev.on('creds.update', saveCreds)
114
168
  sock.ev.on('connection.update', ({ connection, lastDisconnect }) => {
@@ -117,35 +171,30 @@ sock.ev.on('connection.update', ({ connection, lastDisconnect }) => {
117
171
  }
118
172
  })
119
173
 
120
- // 💌 Nomor HP format internasional tanpa +
174
+ // Nomor HP format internasional tanpa +
121
175
  if (!sock.authState.creds.registered) {
122
176
  const code = await sock.requestPairingCode('628123456789')
123
- console.log('🌸 Pairing code:', code)
124
- // Masukkan di WA → Perangkat Tertaut → Tautkan Perangkat
177
+ console.log('Pairing code:', code)
125
178
  }
126
- ```
127
-
128
- > 🍀 Pairing code kadaluarsa dalam beberapa menit. Jalankan ulang jika gagal ya~
129
179
 
130
- **🎀 Custom pairing code (8 karakter):**
131
- ```js
180
+ // Custom pairing code (8 karakter)
132
181
  const code = await sock.requestPairingCode('628123456789', 'NUYY2822')
133
182
  ```
134
183
 
135
184
  ---
136
185
 
137
- ## 🖥️ Browser Identity
186
+ ## 🌐 Browser Identity
138
187
 
139
188
  ```js
140
189
  const { Browsers } = require('@nuiisweety/baileys')
141
190
 
142
191
  makeWASocket({
143
- browser: Browsers.macOS('Chrome'), // 🍎 Mac OS — Chrome
144
- browser: Browsers.macOS('Firefox'), // 🦊 Mac OS — Firefox
145
- browser: Browsers.windows('Chrome'), // 🪟 Windows — Chrome
146
- browser: Browsers.ubuntu('Chrome'), // 🐧 Ubuntu — Chrome
147
- browser: Browsers.baileys('Chrome'), // 🌸 Baileys — Chrome
148
- browser: ['MyBot', 'Chrome', '1.0.0'] // custom
192
+ browser: Browsers.macOS('Chrome'), // Mac OS — Chrome
193
+ browser: Browsers.macOS('Firefox'), // Mac OS — Firefox
194
+ browser: Browsers.windows('Chrome'), // Windows — Chrome
195
+ browser: Browsers.ubuntu('Chrome'), // Ubuntu — Chrome
196
+ browser: Browsers.baileys('Chrome'), // Baileys — Chrome
197
+ browser: ['MyBot', 'Chrome', '1.0.0'] // custom
149
198
  })
150
199
  ```
151
200
 
@@ -171,7 +220,7 @@ makeWASocket({
171
220
 
172
221
  ---
173
222
 
174
- ## 📥 Terima Pesan
223
+ ## 📬 Terima Pesan
175
224
 
176
225
  ```js
177
226
  sock.ev.on('messages.upsert', async ({ messages, type }) => {
@@ -185,17 +234,13 @@ sock.ev.on('messages.upsert', async ({ messages, type }) => {
185
234
  const isGroup = jid.endsWith('@g.us')
186
235
  const sender = isGroup ? m.key.participant : jid
187
236
 
188
- // 💬 Ambil teks
189
237
  const text =
190
238
  m.message.conversation ||
191
239
  m.message.extendedTextMessage?.text ||
192
240
  m.message.imageMessage?.caption ||
193
241
  m.message.videoMessage?.caption || ''
194
242
 
195
- // 👀 Tandai dibaca
196
243
  await sock.readMessages([m.key])
197
-
198
- // 🌸 Typing indicator
199
244
  await sock.sendPresenceUpdate('composing', jid)
200
245
  }
201
246
  })
@@ -206,36 +251,36 @@ sock.ev.on('messages.upsert', async ({ messages, type }) => {
206
251
  ## 👥 Handle Grup
207
252
 
208
253
  ```js
209
- // 🌷 Anggota masuk/keluar
254
+ // Anggota masuk/keluar
210
255
  sock.ev.on('group-participants.update', ({ id, participants, action }) => {
211
256
  // action: 'add' | 'remove' | 'promote' | 'demote'
212
257
  })
213
258
 
214
- // 📝 Info grup diupdate
259
+ // Info grup diupdate
215
260
  sock.ev.on('groups.update', updates => {})
216
261
 
217
- // 🔍 Metadata grup
262
+ // Metadata grup
218
263
  const meta = await sock.groupMetadata(groupJid)
219
264
  console.log(meta.subject, meta.participants)
220
265
 
221
- // 🌸 Semua grup
266
+ // Semua grup
222
267
  const groups = await sock.groupFetchAllParticipating()
223
268
 
224
- // 💞 Tambah / keluarkan / promote / demote
269
+ // Tambah / keluarkan / promote / demote
225
270
  await sock.groupParticipantsUpdate(groupJid, ['628xxx@s.whatsapp.net'], 'add')
226
271
  await sock.groupParticipantsUpdate(groupJid, ['628xxx@s.whatsapp.net'], 'remove')
227
272
  await sock.groupParticipantsUpdate(groupJid, ['628xxx@s.whatsapp.net'], 'promote')
228
273
  await sock.groupParticipantsUpdate(groupJid, ['628xxx@s.whatsapp.net'], 'demote')
229
274
 
230
- // ✏️ Ubah nama / deskripsi
275
+ // Ubah nama / deskripsi
231
276
  await sock.groupUpdateSubject(groupJid, 'Nama Baru')
232
277
  await sock.groupUpdateDescription(groupJid, 'Deskripsi baru')
233
278
 
234
- // 🔒 Kunci / buka grup
279
+ // Kunci / buka grup
235
280
  await sock.groupSettingUpdate(groupJid, 'announcement')
236
281
  await sock.groupSettingUpdate(groupJid, 'not_announcement')
237
282
 
238
- // 📣 Mention semua anggota
283
+ // Mention semua anggota
239
284
  const meta2 = await sock.groupMetadata(groupJid)
240
285
  const members = meta2.participants.map(p => p.id)
241
286
  await sock.sendMessage(groupJid, {
@@ -249,9 +294,9 @@ await sock.sendMessage(groupJid, {
249
294
  ## 💬 Teks
250
295
 
251
296
  ```js
252
- await sock.sendMessage(jid, { text: 'Halo sayang~ 🌸' })
297
+ await sock.sendMessage(jid, { text: 'Halo!' })
253
298
 
254
- // 💌 Dengan mention
299
+ // Dengan mention
255
300
  await sock.sendMessage(jid, {
256
301
  text: '@628xxx halo!',
257
302
  mentions: ['628xxx@s.whatsapp.net']
@@ -263,31 +308,31 @@ await sock.sendMessage(jid, {
263
308
  ## 🖼️ Gambar
264
309
 
265
310
  ```js
266
- // 🌐 URL
311
+ // URL
267
312
  await sock.sendMessage(jid, {
268
313
  image: { url: 'https://example.com/image.jpg' },
269
- caption: 'Keterangan 🌷'
314
+ caption: 'Keterangan'
270
315
  })
271
316
 
272
- // 📁 Buffer / file
317
+ // Buffer
273
318
  await sock.sendMessage(jid, {
274
319
  image: fs.readFileSync('image.jpg'),
275
- caption: 'Keterangan 💖'
320
+ caption: 'Keterangan'
276
321
  })
277
322
  ```
278
323
 
279
324
  ---
280
325
 
281
- ## 🎥 Video
326
+ ## 🎬 Video
282
327
 
283
328
  ```js
284
329
  await sock.sendMessage(jid, {
285
330
  video: { url: 'https://example.com/video.mp4' },
286
- caption: 'Keterangan 🌸',
287
- gifPlayback: false // true = GIF looping 🔁
331
+ caption: 'Keterangan',
332
+ gifPlayback: false // true = GIF looping
288
333
  })
289
334
 
290
- // 🎞️ Video note (bubble)
335
+ // Video note (bubble)
291
336
  await sock.sendMessage(jid, {
292
337
  video: fs.readFileSync('video.mp4'),
293
338
  ptv: true
@@ -296,16 +341,16 @@ await sock.sendMessage(jid, {
296
341
 
297
342
  ---
298
343
 
299
- ## 🎵 Audio & Voice Note
344
+ ## 🎙️ Audio & Voice Note
300
345
 
301
346
  ```js
302
- // 🎶 Audio biasa
347
+ // Audio biasa
303
348
  await sock.sendMessage(jid, {
304
349
  audio: { url: 'https://example.com/audio.mp3' },
305
350
  mimetype: 'audio/mpeg'
306
351
  })
307
352
 
308
- // 🎙️ Voice note (PTT)
353
+ // Voice note (PTT)
309
354
  await sock.sendMessage(jid, {
310
355
  audio: fs.readFileSync('voice.ogg'),
311
356
  mimetype: 'audio/ogg; codecs=opus',
@@ -322,18 +367,16 @@ await sock.sendMessage(jid, {
322
367
  document: fs.readFileSync('file.pdf'),
323
368
  mimetype: 'application/pdf',
324
369
  fileName: 'dokumen.pdf',
325
- caption: 'File ini 🍃'
370
+ caption: 'File ini'
326
371
  })
327
372
  ```
328
373
 
329
374
  ---
330
375
 
331
- ## 🎭 Sticker
376
+ ## 🎴 Sticker
332
377
 
333
378
  ```js
334
- await sock.sendMessage(jid, {
335
- sticker: fs.readFileSync('sticker.webp')
336
- })
379
+ await sock.sendMessage(jid, { sticker: fs.readFileSync('sticker.webp') })
337
380
  ```
338
381
 
339
382
  ---
@@ -345,7 +388,7 @@ await sock.sendMessage(jid, {
345
388
  location: {
346
389
  degreesLatitude: -6.2088,
347
390
  degreesLongitude: 106.8456,
348
- name: 'Monas 🌟',
391
+ name: 'Monas',
349
392
  address: 'Jakarta Pusat'
350
393
  }
351
394
  })
@@ -358,7 +401,7 @@ await sock.sendMessage(jid, {
358
401
  ```js
359
402
  await sock.sendMessage(jid, {
360
403
  contacts: {
361
- displayName: 'Nama 💕',
404
+ displayName: 'Nama',
362
405
  contacts: [{
363
406
  vcard: 'BEGIN:VCARD\nVERSION:3.0\nFN:Nama\nTEL:+62812345678\nEND:VCARD'
364
407
  }]
@@ -368,51 +411,48 @@ await sock.sendMessage(jid, {
368
411
 
369
412
  ---
370
413
 
371
- ## 😍 Reaksi
414
+ ## ❤️ Reaksi
372
415
 
373
416
  ```js
374
- await sock.sendMessage(jid, { react: { text: '💖', key: m.key } })
375
- // 🌸 Hapus reaksi
417
+ await sock.sendMessage(jid, { react: { text: '❤️', key: m.key } })
418
+
419
+ // Hapus reaksi
376
420
  await sock.sendMessage(jid, { react: { text: '', key: m.key } })
377
421
  ```
378
422
 
379
423
  ---
380
424
 
381
- ## 🗳️ Poll
425
+ ## 📊 Poll
382
426
 
383
427
  ```js
384
428
  await sock.sendMessage(jid, {
385
429
  poll: {
386
- name: 'Pilih salah satu~ 🌷',
387
- values: ['Opsi A 🌸', 'Opsi B 🌺', 'Opsi C 🌼'],
388
- selectableCount: 1 // 0 = boleh pilih banyak 💞
430
+ name: 'Pilih salah satu',
431
+ values: ['Opsi A', 'Opsi B', 'Opsi C'],
432
+ selectableCount: 1 // 0 = boleh pilih banyak
389
433
  }
390
434
  })
391
- ```
392
435
 
393
- **🌟 Poll dengan fitur tambahan:**
394
- ```js
436
+ // Poll dengan fitur tambahan
395
437
  await sock.sendMessage(jid, {
396
438
  poll: {
397
- name: 'Nama Poll 💌',
439
+ name: 'Nama Poll',
398
440
  values: ['Opsi A', 'Opsi B'],
399
441
  selectableCount: 1,
400
- endDate: new Date('2025-12-31'), // 📅 tanggal berakhir
401
- hideVoter: true, // 🙈 sembunyikan nama pemilih
402
- canAddOption: false, // 🔒 larang tambah opsi
403
- toAnnouncementGroup: false // true = community announcement group (pollV2)
442
+ endDate: new Date('2025-12-31'),
443
+ hideVoter: true,
444
+ canAddOption: false,
445
+ toAnnouncementGroup: false
404
446
  }
405
447
  })
406
- ```
407
448
 
408
- **🧠 Quiz (Poll dengan jawaban benar):**
409
- ```js
449
+ // Quiz (Poll dengan jawaban benar)
410
450
  await sock.sendMessage(jid, {
411
451
  poll: {
412
- name: 'Ibu kota Indonesia? 🌏',
452
+ name: 'Ibu kota Indonesia?',
413
453
  values: ['Jakarta', 'Surabaya', 'Bandung'],
414
454
  selectableCount: 1,
415
- pollType: 1, // 1 = QUIZ 🎓
455
+ pollType: 1, // 1 = QUIZ
416
456
  correctAnswer: 'Jakarta'
417
457
  }
418
458
  })
@@ -420,29 +460,29 @@ await sock.sendMessage(jid, {
420
460
 
421
461
  ---
422
462
 
423
- ## 📊 Poll Result
463
+ ## 📈 Poll Result
424
464
 
425
465
  ```js
426
466
  await sock.sendMessage(jid, {
427
467
  pollResult: {
428
- name: 'Nama Poll 🌸',
468
+ name: 'Nama Poll',
429
469
  votes: [
430
- { name: 'Opsi A 💖', voteCount: 10 },
431
- { name: 'Opsi B 🌷', voteCount: 5 }
470
+ { name: 'Opsi A', voteCount: 10 },
471
+ { name: 'Opsi B', voteCount: 5 }
432
472
  ],
433
- pollType: 0 // 0 = POLL, 1 = QUIZ 🎓
473
+ pollType: 0 // 0 = POLL, 1 = QUIZ
434
474
  }
435
475
  })
436
476
  ```
437
477
 
438
478
  ---
439
479
 
440
- ## 🗳️ Poll Update
480
+ ## 🔄 Poll Update
441
481
 
442
482
  ```js
443
483
  await sock.sendMessage(jid, {
444
484
  pollUpdate: {
445
- key: pollMessage.key, // 🗝️ key dari pesan poll yang mau di-vote
485
+ key: pollMessage.key,
446
486
  vote: encryptedVotePayload,
447
487
  metadata: optionalMetadata
448
488
  }
@@ -451,12 +491,12 @@ await sock.sendMessage(jid, {
451
491
 
452
492
  ---
453
493
 
454
- ## ↩️ Forward
494
+ ## ↗️ Forward
455
495
 
456
496
  ```js
457
497
  await sock.sendMessage(jid, {
458
498
  forward: targetMessage,
459
- force: true // 💌 paksa tampil sebagai forwarded
499
+ force: true // paksa tampil sebagai forwarded
460
500
  })
461
501
  ```
462
502
 
@@ -474,7 +514,7 @@ await sock.sendMessage(jid, { delete: m.key })
474
514
 
475
515
  ```js
476
516
  await sock.sendMessage(jid, {
477
- text: 'Teks yang sudah diedit dengan penuh kasih~ 🌸',
517
+ text: 'Teks yang sudah diedit',
478
518
  edit: m.key
479
519
  })
480
520
  ```
@@ -484,29 +524,30 @@ await sock.sendMessage(jid, {
484
524
  ## 📌 Pin Pesan
485
525
 
486
526
  ```js
487
- // 📍 Pin
527
+ // Pin
488
528
  await sock.sendMessage(jid, {
489
529
  pin: m.key,
490
530
  type: 1,
491
- time: 86400 // 86400=1hr 🕐 | 604800=7hr 🕰️ | 2592000=30hr 📆
531
+ time: 86400 // 86400=1hr | 604800=7hr | 2592000=30hr
492
532
  })
493
- // 🪄 Unpin
533
+
534
+ // Unpin
494
535
  await sock.sendMessage(jid, { pin: m.key, type: 2 })
495
536
  ```
496
537
 
497
538
  ---
498
539
 
499
- ## 🖼️ Album
540
+ ## 🗂️ Album
500
541
 
501
542
  ```js
502
543
  await sock.sendMessage(jid, {
503
544
  album: [
504
- { image: { url: 'https://example.com/1.jpg' }, caption: 'Foto 1 🌸' },
505
- { image: { url: 'https://example.com/2.jpg' }, caption: 'Foto 2 🌷' },
506
- { video: { url: 'https://example.com/vid.mp4' }, caption: 'Video 💕' }
545
+ { image: { url: 'https://example.com/1.jpg' }, caption: 'Foto 1' },
546
+ { image: { url: 'https://example.com/2.jpg' }, caption: 'Foto 2' },
547
+ { video: { url: 'https://example.com/vid.mp4' }, caption: 'Video' }
507
548
  ]
508
549
  })
509
- // 🌺 minimal 2 media ya~
550
+ // minimal 2 media
510
551
  ```
511
552
 
512
553
  ---
@@ -516,27 +557,25 @@ await sock.sendMessage(jid, {
516
557
  ```js
517
558
  await sock.sendMessage(jid, {
518
559
  event: {
519
- name: 'Nama Acara 🌟',
520
- description: 'Deskripsi indah 🌸',
560
+ name: 'Nama Acara',
561
+ description: 'Deskripsi',
521
562
  startDate: new Date('2025-12-01T10:00:00'),
522
563
  endDate: new Date('2025-12-01T12:00:00'),
523
564
  location: {
524
565
  degreesLatitude: -6.2088,
525
566
  degreesLongitude: 106.8456,
526
- name: 'Monas, Jakarta 🌆'
567
+ name: 'Monas, Jakarta'
527
568
  },
528
569
  extraGuestsAllowed: true
529
570
  }
530
571
  })
531
- ```
532
572
 
533
- **📞 Event dengan scheduled call (audio/video):**
534
- ```js
573
+ // Event dengan scheduled call
535
574
  await sock.sendMessage(jid, {
536
575
  event: {
537
- name: 'Meeting Online 💻',
576
+ name: 'Meeting Online',
538
577
  startDate: new Date('2025-12-01T10:00:00'),
539
- call: 'audio', // 🎙️ 'audio' | 📹 'video'
578
+ call: 'audio', // 'audio' | 'video'
540
579
  isScheduleCall: true
541
580
  }
542
581
  })
@@ -544,43 +583,41 @@ await sock.sendMessage(jid, {
544
583
 
545
584
  ---
546
585
 
547
- ## 📸 Group Status / Group Story
586
+ ## 📖 Group Status / Group Story
548
587
 
549
588
  ```js
550
- // 💬 Teks
589
+ // Teks
551
590
  await sock.sendMessage(groupJid, {
552
- groupStatusMessage: { text: 'Status teks yang manis~ 🌸' }
591
+ groupStatusMessage: { text: 'Status teks' }
553
592
  })
554
593
 
555
- // 🖼️ Gambar
594
+ // Gambar
556
595
  await sock.sendMessage(groupJid, {
557
596
  groupStatusMessage: {
558
597
  image: { url: 'https://example.com/image.jpg' },
559
- caption: 'Keterangan 💖'
598
+ caption: 'Keterangan'
560
599
  }
561
600
  })
562
601
 
563
- // 🎥 Video
602
+ // Video
564
603
  await sock.sendMessage(groupJid, {
565
604
  groupStatusMessage: {
566
605
  video: { url: 'https://example.com/video.mp4' },
567
- caption: 'Keterangan 🌷'
606
+ caption: 'Keterangan'
568
607
  }
569
608
  })
570
609
  ```
571
610
 
572
611
  ---
573
612
 
574
- ## Flow Reply
575
-
576
- > 💫 Balas pesan interaktif native flow dengan anggun~
613
+ ## 🔁 Flow Reply
577
614
 
578
615
  ```js
579
616
  await sock.sendMessage(jid, {
580
617
  flowReply: {
581
- name: 'quick_reply', // 🔘 nama button yang ditekan
618
+ name: 'quick_reply',
582
619
  paramsJson: '{"id":"btn1"}',
583
- text: 'Teks balasan 🌸',
620
+ text: 'Teks balasan',
584
621
  format: 1,
585
622
  version: 1
586
623
  }
@@ -592,35 +629,27 @@ await sock.sendMessage(jid, {
592
629
  ## 🔘 Button Reply
593
630
 
594
631
  ```js
595
- // 🗂️ Template button
632
+ // Template button
596
633
  await sock.sendMessage(jid, {
597
- buttonReply: {
598
- displayText: 'Opsi yang dipilih 💕',
599
- id: 'btn_id',
600
- index: 0
601
- },
634
+ buttonReply: { displayText: 'Opsi yang dipilih', id: 'btn_id', index: 0 },
602
635
  type: 'template'
603
636
  })
604
637
 
605
- // 🔵 Plain button
638
+ // Plain button
606
639
  await sock.sendMessage(jid, {
607
- buttonReply: {
608
- displayText: 'Opsi yang dipilih 🌸',
609
- id: 'btn_id'
610
- },
640
+ buttonReply: { displayText: 'Opsi yang dipilih', id: 'btn_id' },
611
641
  type: 'plain'
612
642
  })
613
643
  ```
614
644
 
615
645
  ---
616
646
 
617
- ## 📌 Keep In Chat
647
+ ## 📎 Keep In Chat
618
648
 
619
649
  ```js
620
- // 💾 Simpan
621
650
  await sock.sendMessage(jid, {
622
651
  keep: m.key,
623
- keepType: 1 // 1 = keep 💖, 2 = unkeep 🍃
652
+ keepType: 1 // 1 = keep, 2 = unkeep
624
653
  })
625
654
  ```
626
655
 
@@ -632,8 +661,8 @@ await sock.sendMessage(jid, {
632
661
  await sock.sendMessage(jid, {
633
662
  call: {
634
663
  time: Date.now() + 3600000,
635
- type: 1, // 1 = voice 🎙️, 2 = video 📹
636
- title: 'Meeting 🌸'
664
+ type: 1, // 1 = voice, 2 = video
665
+ title: 'Meeting'
637
666
  }
638
667
  })
639
668
  ```
@@ -648,8 +677,8 @@ await sock.sendMessage(jid, {
648
677
  jid: 'xxx@g.us',
649
678
  inviteCode: 'kode',
650
679
  inviteExpiration: Date.now() + 86400000,
651
- subject: 'Nama Grup 🌷',
652
- text: 'Bergabunglah bersama kami~ 💕'
680
+ subject: 'Nama Grup',
681
+ text: 'Bergabunglah bersama kami'
653
682
  }
654
683
  })
655
684
  ```
@@ -663,14 +692,14 @@ await sock.sendMessage(jid, {
663
692
  product: {
664
693
  productImage: fs.readFileSync('produk.jpg'),
665
694
  productId: 'prod_123',
666
- title: 'Nama Produk 🌸',
667
- description: 'Deskripsi cantik 💖',
695
+ title: 'Nama Produk',
696
+ description: 'Deskripsi produk',
668
697
  currencyCode: 'IDR',
669
698
  priceAmount1000: 50000000,
670
699
  retailerId: 'sku_001',
671
700
  url: 'https://toko.example.com/produk'
672
701
  },
673
- businessOwnerJid: '628xxx@s.whatsapp.net' // 🌟 wajib diisi ya~
702
+ businessOwnerJid: '628xxx@s.whatsapp.net' // wajib diisi
674
703
  })
675
704
  ```
676
705
 
@@ -681,7 +710,7 @@ await sock.sendMessage(jid, {
681
710
  ```js
682
711
  await sock.sendMessage(jid, {
683
712
  image: { url: 'https://example.com/image.jpg' },
684
- viewOnce: true // 🌸 sekali lihat, hilang bagai mimpi~
713
+ viewOnce: true
685
714
  })
686
715
  ```
687
716
 
@@ -692,10 +721,10 @@ await sock.sendMessage(jid, {
692
721
  ```js
693
722
  await sock.sendMessage(jid, {
694
723
  image: { url: 'https://example.com/image.jpg' },
695
- viewOnceV2: true // 💫 wrap ke viewOnceMessageV2
724
+ viewOnceV2: true
696
725
  })
697
726
 
698
- // 🌟 viewOnceV2Extension
727
+ // viewOnceV2Extension
699
728
  await sock.sendMessage(jid, {
700
729
  image: { url: 'https://example.com/image.jpg' },
701
730
  viewOnceV2Extension: true
@@ -704,49 +733,41 @@ await sock.sendMessage(jid, {
704
733
 
705
734
  ---
706
735
 
707
- ## ⏱️ Ephemeral
708
-
709
- > 🍃 Wrap pesan ke dalam `ephemeralMessage` — pesan yang menghilang seperti embun pagi~
736
+ ## Ephemeral
710
737
 
711
738
  ```js
712
739
  await sock.sendMessage(jid, {
713
- text: 'Pesan ini ephemeral 🌸',
740
+ text: 'Pesan ini ephemeral',
714
741
  ephemeral: true
715
742
  })
716
743
  ```
717
744
 
718
745
  ---
719
746
 
720
- ## 🫣 Spoiler
721
-
722
- > 🎀 Wrap pesan ke dalam `spoilerMessage` — untuk kejutan yang manis~
747
+ ## 🙈 Spoiler
723
748
 
724
749
  ```js
725
750
  await sock.sendMessage(jid, {
726
751
  image: { url: 'https://example.com/image.jpg' },
727
- caption: 'Spoiler! 🌷',
752
+ caption: 'Spoiler!',
728
753
  spoiler: true
729
754
  })
730
755
  ```
731
756
 
732
757
  ---
733
758
 
734
- ## 📢 Group Status Wrap
735
-
736
- > 💕 Wrap pesan biasa menjadi `groupStatusMessageV2`~
759
+ ## 🎭 Group Status Wrap
737
760
 
738
761
  ```js
739
762
  await sock.sendMessage(jid, {
740
- text: 'Status di grup ini 🌸',
763
+ text: 'Status di grup ini',
741
764
  groupStatus: true
742
765
  })
743
766
  ```
744
767
 
745
768
  ---
746
769
 
747
- ## 🌀 Lottie Sticker
748
-
749
- > ✨ Wrap sticker ke dalam `lottieStickerMessage` — animasi yang memukau~
770
+ ## 🎞️ Lottie Sticker
750
771
 
751
772
  ```js
752
773
  await sock.sendMessage(jid, {
@@ -757,58 +778,70 @@ await sock.sendMessage(jid, {
757
778
 
758
779
  ---
759
780
 
760
- ## 🔲 Buttons
781
+ ## 🤖 AI Icon
782
+
783
+ ```js
784
+ // Hanya untuk private chat (bukan grup)
785
+ await sock.sendMessage(jid, { text: 'Respons dari AI', ai: true })
786
+
787
+ await sock.sendMessage(jid, {
788
+ image: { url: 'https://example.com/image.jpg' },
789
+ caption: 'Dihasilkan oleh AI',
790
+ ai: true
791
+ })
792
+ ```
793
+
794
+ ---
761
795
 
762
- > 💖 Kirim pesan dengan tombol interaktif yang menggemaskan~
796
+ ## 🔒 Secure Meta Service Label
763
797
 
764
798
  ```js
765
- // 💬 Dengan teks biasa
766
799
  await sock.sendMessage(jid, {
767
- text: 'Pilih salah satu ya sayang~ 🌸',
768
- footer: 'Footer pesan 🍃',
769
- buttons: [
770
- { id: 'btn1', text: 'Tombol 1 💕' },
771
- { id: 'btn2', text: 'Tombol 2 🌷' },
772
- { id: 'btn3', text: 'Tombol 3 🌺' }
773
- ]
800
+ text: 'Pesan layanan resmi',
801
+ secureMetaServiceLabel: true
774
802
  })
803
+ ```
775
804
 
776
- // 🖼️ Dengan gambar sebagai header
805
+ ---
806
+
807
+ ## 🎛️ Buttons
808
+
809
+ ```js
810
+ // Teks dengan tombol
777
811
  await sock.sendMessage(jid, {
778
- image: { url: 'https://example.com/image.jpg' },
779
- caption: 'Isi pesan 💖',
780
- footer: 'Footer 🌸',
812
+ text: 'Pilih salah satu',
813
+ footer: 'Footer pesan',
781
814
  buttons: [
782
- { id: 'btn1', text: 'Pilih A 🌷' },
783
- { id: 'btn2', text: 'Pilih B 🌺' }
815
+ { id: 'btn1', text: 'Tombol 1' },
816
+ { id: 'btn2', text: 'Tombol 2' },
817
+ { id: 'btn3', text: 'Tombol 3' }
784
818
  ]
785
819
  })
786
820
 
787
- // 🌊 Native flow button (single select dengan sections)
821
+ // Gambar sebagai header
788
822
  await sock.sendMessage(jid, {
789
- text: 'Pilih menu~ 🌸',
823
+ image: { url: 'https://example.com/image.jpg' },
824
+ caption: 'Isi pesan',
825
+ footer: 'Footer',
790
826
  buttons: [
791
- {
792
- text: 'Buka Menu 💕',
793
- sections: [
794
- {
795
- title: 'Kategori A 🌷',
796
- rows: [
797
- { id: 'row1', title: 'Item 1 🌸', description: 'Deskripsi manis' },
798
- { id: 'row2', title: 'Item 2 🌺' }
799
- ]
800
- }
801
- ]
802
- }
827
+ { id: 'btn1', text: 'Pilih A' },
828
+ { id: 'btn2', text: 'Pilih B' }
803
829
  ]
804
830
  })
805
831
 
806
- // Native flow button dengan name kustom
832
+ // Native flow button
807
833
  await sock.sendMessage(jid, {
808
- text: 'Pilih~ 💖',
809
- buttons: [
810
- { name: 'quick_reply', paramsJson: '{"id":"1"}', text: 'Quick Reply 🌸' }
811
- ]
834
+ text: 'Pilih menu',
835
+ buttons: [{
836
+ text: 'Buka Menu',
837
+ sections: [{
838
+ title: 'Kategori A',
839
+ rows: [
840
+ { id: 'row1', title: 'Item 1', description: 'Deskripsi' },
841
+ { id: 'row2', title: 'Item 2' }
842
+ ]
843
+ }]
844
+ }]
812
845
  })
813
846
  ```
814
847
 
@@ -816,26 +849,24 @@ await sock.sendMessage(jid, {
816
849
 
817
850
  ## 📋 List Message
818
851
 
819
- > 🌷 Kirim pesan daftar pilihan yang teratur dan elegan~
820
-
821
852
  ```js
822
853
  await sock.sendMessage(jid, {
823
- text: 'Silakan pilih~ 🌸',
824
- title: 'Judul List 💕',
825
- buttonText: 'Buka Daftar 🌷',
826
- footer: 'Footer pesan 🍃',
854
+ text: 'Silakan pilih',
855
+ title: 'Judul List',
856
+ buttonText: 'Buka Daftar',
857
+ footer: 'Footer pesan',
827
858
  sections: [
828
859
  {
829
- title: 'Bagian 1 🌺',
860
+ title: 'Bagian 1',
830
861
  rows: [
831
- { id: 'row1', title: 'Pilihan A 💖', description: 'Deskripsi A yang manis' },
832
- { id: 'row2', title: 'Pilihan B 🌸', description: 'Deskripsi B yang lembut' }
862
+ { id: 'row1', title: 'Pilihan A', description: 'Deskripsi A' },
863
+ { id: 'row2', title: 'Pilihan B', description: 'Deskripsi B' }
833
864
  ]
834
865
  },
835
866
  {
836
- title: 'Bagian 2 🌼',
867
+ title: 'Bagian 2',
837
868
  rows: [
838
- { id: 'row3', title: 'Pilihan C 🌷' }
869
+ { id: 'row3', title: 'Pilihan C' }
839
870
  ]
840
871
  }
841
872
  ]
@@ -844,32 +875,30 @@ await sock.sendMessage(jid, {
844
875
 
845
876
  ---
846
877
 
847
- ## 🗂️ Template Buttons
848
-
849
- > 💌 Tombol template (quick reply, URL, call) — tampil di WhatsApp Web/Desktop & iOS~
878
+ ## 🗃️ Template Buttons
850
879
 
851
880
  ```js
852
- // 💬 Dengan teks
881
+ // Teks
853
882
  await sock.sendMessage(jid, {
854
- text: 'Pesan template 🌸',
855
- footer: 'Footer 🍃',
883
+ text: 'Pesan template',
884
+ footer: 'Footer',
856
885
  id: 'template-unik',
857
886
  templateButtons: [
858
- { id: 'btn1', text: 'Quick Reply 💕' },
859
- { url: 'https://example.com', text: 'Kunjungi Website 🌐' },
860
- { call: '+62812345678', text: 'Hubungi Kami 📞' }
887
+ { id: 'btn1', text: 'Quick Reply' },
888
+ { url: 'https://example.com', text: 'Kunjungi Website' },
889
+ { call: '+62812345678', text: 'Hubungi Kami' }
861
890
  ]
862
891
  })
863
892
 
864
- // 🖼️ Dengan gambar sebagai header
893
+ // Gambar sebagai header
865
894
  await sock.sendMessage(jid, {
866
895
  image: { url: 'https://example.com/img.jpg' },
867
- caption: 'Isi pesan 💖',
868
- title: 'Judul 🌸',
869
- footer: 'Footer 🌷',
896
+ caption: 'Isi pesan',
897
+ title: 'Judul',
898
+ footer: 'Footer',
870
899
  templateButtons: [
871
- { id: 'btn1', text: 'Klik Sini 💕' },
872
- { url: 'https://example.com', text: 'Buka Link 🌐' }
900
+ { id: 'btn1', text: 'Klik Sini' },
901
+ { url: 'https://example.com', text: 'Buka Link' }
873
902
  ]
874
903
  })
875
904
  ```
@@ -878,45 +907,43 @@ await sock.sendMessage(jid, {
878
907
 
879
908
  ## 🌊 Native Flow
880
909
 
881
- > ✨ Pesan interaktif dengan native flow buttons yang indah — mendukung media header & audio footer~
882
-
883
910
  ```js
884
- // 💬 Teks dengan native flow buttons
911
+ // Teks dengan native flow buttons
885
912
  await sock.sendMessage(jid, {
886
- text: 'Pilih aksi~ 🌸',
887
- footer: 'Footer pesan 🍃',
913
+ text: 'Pilih aksi',
914
+ footer: 'Footer pesan',
888
915
  nativeFlow: [
889
- { name: 'quick_reply', paramsJson: '{"id":"1"}', text: 'Opsi 1 💕' },
890
- { name: 'quick_reply', paramsJson: '{"id":"2"}', text: 'Opsi 2 🌷' }
916
+ { name: 'quick_reply', paramsJson: '{"id":"1"}', text: 'Opsi 1' },
917
+ { name: 'quick_reply', paramsJson: '{"id":"2"}', text: 'Opsi 2' }
891
918
  ]
892
919
  })
893
920
 
894
- // 🖼️ Dengan gambar sebagai header
921
+ // Gambar sebagai header
895
922
  await sock.sendMessage(jid, {
896
923
  image: { url: 'https://example.com/img.jpg' },
897
- caption: 'Isi pesan 💖',
898
- title: 'Judul 🌸',
899
- subtitle: 'Subjudul 🌷',
900
- footer: 'Footer 🍃',
924
+ caption: 'Isi pesan',
925
+ title: 'Judul',
926
+ subtitle: 'Subjudul',
927
+ footer: 'Footer',
901
928
  nativeFlow: [
902
- { name: 'quick_reply', paramsJson: '{"id":"1"}', text: 'Tombol 1 💕' }
929
+ { name: 'quick_reply', paramsJson: '{"id":"1"}', text: 'Tombol 1' }
903
930
  ]
904
931
  })
905
932
 
906
- // 🎵 Dengan audio footer
933
+ // Dengan audio footer
907
934
  await sock.sendMessage(jid, {
908
- text: 'Pesan dengan audio footer 🎶',
935
+ text: 'Pesan dengan audio footer',
909
936
  audioFooter: fs.readFileSync('audio.ogg'),
910
937
  nativeFlow: [
911
- { name: 'quick_reply', paramsJson: '{"id":"1"}', text: 'OK 💖' }
938
+ { name: 'quick_reply', paramsJson: '{"id":"1"}', text: 'OK' }
912
939
  ]
913
940
  })
914
941
 
915
- // 🎀 Wrap sebagai templateMessage
942
+ // Wrap sebagai templateMessage
916
943
  await sock.sendMessage(jid, {
917
- text: 'Template interaktif 🌸',
944
+ text: 'Template interaktif',
918
945
  nativeFlow: [
919
- { name: 'quick_reply', paramsJson: '{"id":"1"}', text: 'Tombol 💕' }
946
+ { name: 'quick_reply', paramsJson: '{"id":"1"}', text: 'Tombol' }
920
947
  ],
921
948
  interactiveAsTemplate: true,
922
949
  id: 'template-id-unik'
@@ -927,28 +954,26 @@ await sock.sendMessage(jid, {
927
954
 
928
955
  ## 🎠 Carousel
929
956
 
930
- > 🌺 Pesan carousel dengan kartu-kartu yang cantik (image/video/product per kartu)~
931
-
932
957
  ```js
933
958
  await sock.sendMessage(jid, {
934
- text: 'Carousel utama 🌸',
935
- footer: 'Footer utama 🍃',
959
+ text: 'Carousel utama',
960
+ footer: 'Footer utama',
936
961
  cards: [
937
962
  {
938
963
  image: { url: 'https://example.com/1.jpg' },
939
- title: 'Kartu 1 💕',
940
- caption: 'Deskripsi kartu 1 yang manis 🌷',
941
- footer: 'Footer kartu 1 🌸',
964
+ title: 'Kartu 1',
965
+ caption: 'Deskripsi kartu 1',
966
+ footer: 'Footer kartu 1',
942
967
  nativeFlow: [
943
- { name: 'quick_reply', paramsJson: '{"id":"c1"}', text: 'Pilih Ini 💖' }
968
+ { name: 'quick_reply', paramsJson: '{"id":"c1"}', text: 'Pilih Ini' }
944
969
  ]
945
970
  },
946
971
  {
947
972
  image: { url: 'https://example.com/2.jpg' },
948
- title: 'Kartu 2 🌺',
949
- caption: 'Deskripsi kartu 2 yang indah 🌼',
973
+ title: 'Kartu 2',
974
+ caption: 'Deskripsi kartu 2',
950
975
  nativeFlow: [
951
- { name: 'quick_reply', paramsJson: '{"id":"c2"}', text: 'Pilih Itu 🌸' }
976
+ { name: 'quick_reply', paramsJson: '{"id":"c2"}', text: 'Pilih Itu' }
952
977
  ]
953
978
  }
954
979
  ]
@@ -957,92 +982,700 @@ await sock.sendMessage(jid, {
957
982
 
958
983
  ---
959
984
 
960
- ## 🗨️ Status Mention
961
-
962
- > 💫 Mention seseorang di status/story dengan mengirim pesan ke array JID — otomatis mengirim `statusMentionMessage` atau `groupStatusMentionMessage` ke JID yang dituju~
985
+ ## 🏷️ Status Mention
963
986
 
964
987
  ```js
965
- // 💬 Status teks dengan mention ke user/group
988
+ // Kirim ke array JID untuk trigger status mention
966
989
  await sock.sendMessage(['628xxx@s.whatsapp.net', 'yyy@g.us'], {
967
- text: 'Hei kamu~ 🌸',
990
+ text: 'Hei kamu!',
968
991
  backgroundColor: '#ff6b9d'
969
992
  })
970
993
 
971
- // 🖼️ Status gambar dengan mention
994
+ // Gambar dengan mention
972
995
  await sock.sendMessage(['628xxx@s.whatsapp.net'], {
973
996
  image: { url: 'https://example.com/image.jpg' },
974
- caption: 'Buat kamu~ 💕'
997
+ caption: 'Untuk kamu'
975
998
  })
976
999
  ```
977
1000
 
978
- > 🍀 Kirim ke array JID untuk trigger status mention. Untuk grup, otomatis pakai `groupStatusMentionMessage`~
1001
+ > Untuk grup, otomatis pakai `groupStatusMentionMessage`.
979
1002
 
980
1003
  ---
981
1004
 
982
- ## 🤖 AI Icon
1005
+ ## 🤖 Rich Message (AI)
1006
+
1007
+ > Rich message menggunakan format `AIRichResponseMessage` yang tampil seperti respons AI di WhatsApp. Semua tipe di bawah bisa dipakai secara flat (field langsung) atau dikombinasikan via `richResponse: [...]`.
1008
+
1009
+ ### ✍️ addText
983
1010
 
984
- > Tambahkan AI icon pada pesan di private chat hanya bisa digunakan untuk percakapan personal (bukan grup)~
1011
+ Kirim teks markdown sebagai AI Rich Response. Mendukung hyperlink, citation, dan LaTeX inline.
985
1012
 
986
1013
  ```js
987
- // 💬 Teks dengan AI icon
988
1014
  await sock.sendMessage(jid, {
989
- text: 'Halo! Aku asisten AI-mu~ 🌸',
990
- ai: true
1015
+ contentText: 'Ini teks dari AI dengan *markdown* dan **bold**.',
1016
+ headerText: 'Judul',
1017
+ footerText: 'Footer',
1018
+ disclaimerText: 'Generated by AI'
991
1019
  })
1020
+ ```
1021
+
1022
+ ---
1023
+
1024
+ ### 💻 addCode
992
1025
 
993
- // 🖼️ Gambar dengan AI icon
1026
+ Kirim blok kode dengan syntax highlighting.
1027
+
1028
+ ```js
994
1029
  await sock.sendMessage(jid, {
995
- image: { url: 'https://example.com/image.jpg' },
996
- caption: 'Dihasilkan oleh AI 💖',
997
- ai: true
1030
+ code: 'console.log("Hello World!")',
1031
+ language: 'javascript', // default: 'javascript'
1032
+ headerText: 'Contoh kode:',
1033
+ footerText: 'Semoga membantu',
1034
+ disclaimerText: 'Generated by AI'
998
1035
  })
999
1036
  ```
1000
1037
 
1001
- > 🌷 `ai: true` hanya berlaku di private chat (JID `@s.whatsapp.net` atau LID). Akan error jika dikirim ke grup~
1038
+ **Bahasa yang didukung:**
1039
+
1040
+ | Bahasa | Key |
1041
+ |--------|-----|
1042
+ | JavaScript | `javascript`, `js` |
1043
+ | TypeScript | `typescript`, `ts` |
1044
+ | Python | `python`, `py` |
1045
+ | Go | `go`, `golang` |
1046
+ | C++ | `cpp`, `c++` |
1047
+ | Rust | `rust`, `rs` |
1048
+ | Java | `java` |
1049
+ | PHP | `php` |
1050
+ | Ruby | `ruby`, `rb` |
1051
+ | Kotlin | `kotlin`, `kt` |
1052
+ | Swift | `swift` |
1053
+ | C | `c` |
1054
+ | SQL/MySQL/PostgreSQL | `sql`, `mysql`, `postgresql`, `sqlite` |
1055
+ | Bash/Shell | `bash`, `sh`, `shell` |
1056
+ | HTML | `html` |
1057
+ | CSS | `css` |
1058
+ | JSON | `json` |
1059
+ | YAML | `yaml`, `yml` |
1002
1060
 
1003
1061
  ---
1004
1062
 
1005
- ## 🏷️ Secure Meta Service Label
1063
+ ### 📊 addTable
1006
1064
 
1007
- > 🌿 Tambahkan label layanan bisnis pada pesan memunculkan atribut biz pada relay~
1065
+ Kirim tabel dari array 2D. Baris pertama otomatis menjadi header.
1008
1066
 
1009
1067
  ```js
1010
1068
  await sock.sendMessage(jid, {
1011
- text: 'Pesan layanan resmi kami~ 🌸',
1012
- secureMetaServiceLabel: true
1069
+ table: [
1070
+ ['Nama', 'Usia', 'Kota'], // baris pertama = header
1071
+ ['Hana', '20', 'Jakarta'],
1072
+ ['Risa', '22', 'Bandung'],
1073
+ ['Yuki', '21', 'Surabaya']
1074
+ ],
1075
+ title: 'Data Anggota',
1076
+ headerText: 'Berikut datanya',
1077
+ footerText: 'Data per Juni 2025'
1013
1078
  })
1014
1079
 
1015
- // 💌 Bisa dikombinasikan dengan pesan media
1080
+ // Tanpa baris header
1016
1081
  await sock.sendMessage(jid, {
1017
- image: { url: 'https://example.com/banner.jpg' },
1018
- caption: 'Promo spesial dari kami 💕',
1019
- secureMetaServiceLabel: true
1082
+ table: [
1083
+ ['Item A', 'Rp 10.000'],
1084
+ ['Item B', 'Rp 20.000']
1085
+ ],
1086
+ noHeading: true,
1087
+ title: 'Daftar Harga'
1020
1088
  })
1021
1089
  ```
1022
1090
 
1023
1091
  ---
1024
1092
 
1025
- ## 💻 Code Block
1093
+ ### 🖼️ addImage
1026
1094
 
1027
- > 🌟 Kirim pesan kode dengan syntax highlighting tampil sebagai AI Rich Response~
1095
+ Kirim satu atau beberapa gambar sebagai grid image di AI Rich Response.
1028
1096
 
1029
1097
  ```js
1098
+ // Satu gambar
1030
1099
  await sock.sendMessage(jid, {
1031
- code: 'console.log("Hello World!")',
1032
- language: 'javascript', // 🌸 default: 'javascript'
1033
- headerText: 'Contoh kode:',
1034
- footerText: 'Semoga membantu~ 💖',
1035
- disclaimerText: 'Generated by AI'
1100
+ richImage: 'https://example.com/photo.jpg',
1101
+ headerText: 'Gambar untuk kamu'
1102
+ })
1103
+
1104
+ // Beberapa gambar (grid)
1105
+ await sock.sendMessage(jid, {
1106
+ richImage: [
1107
+ 'https://example.com/photo1.jpg',
1108
+ 'https://example.com/photo2.jpg',
1109
+ 'https://example.com/photo3.jpg'
1110
+ ],
1111
+ headerText: 'Koleksi gambar',
1112
+ footerText: 'Semoga suka'
1113
+ })
1114
+ ```
1115
+
1116
+ > `image` menerima string URL atau array string URL. Berbeda dengan `gridImage` (format verbose), `image` adalah shorthand yang lebih praktis.
1117
+
1118
+ ---
1119
+
1120
+ ### 🎬 addVideo
1121
+
1122
+ Kirim satu atau beberapa video di AI Rich Response.
1123
+
1124
+ ```js
1125
+ // Satu video
1126
+ await sock.sendMessage(jid, {
1127
+ richVideo: 'https://example.com/video.mp4',
1128
+ headerText: 'Video untuk kamu'
1129
+ })
1130
+
1131
+ // Dengan durasi (format: 'url|durasi_detik')
1132
+ await sock.sendMessage(jid, {
1133
+ richVideo: 'https://example.com/video.mp4|120',
1134
+ headerText: 'Video berdurasi 2 menit'
1135
+ })
1136
+
1137
+ // Beberapa video
1138
+ await sock.sendMessage(jid, {
1139
+ richVideo: [
1140
+ 'https://example.com/video1.mp4|60',
1141
+ 'https://example.com/video2.mp4|90'
1142
+ ],
1143
+ headerText: 'Playlist video'
1144
+ })
1145
+ ```
1146
+
1147
+ > Format URL video: `'url'` atau `'url|durasi_detik'`. Durasi dalam satuan detik, default 0.
1148
+
1149
+ ---
1150
+
1151
+ ### 🔗 addSource
1152
+
1153
+ Kirim daftar sumber referensi/link sebagai search result card.
1154
+
1155
+ ```js
1156
+ await sock.sendMessage(jid, {
1157
+ source: [
1158
+ {
1159
+ url: 'https://example.com/artikel',
1160
+ title: 'Judul Artikel',
1161
+ display_name: 'Example.com',
1162
+ subtitle: 'Sumber terpercaya',
1163
+ favicon: 'https://example.com/favicon.ico'
1164
+ },
1165
+ {
1166
+ url: 'https://docs.example.com/api',
1167
+ title: 'Dokumentasi API',
1168
+ display_name: 'Docs',
1169
+ subtitle: 'Referensi lengkap'
1170
+ }
1171
+ ],
1172
+ headerText: 'Sumber referensi'
1173
+ })
1174
+ ```
1175
+
1176
+ **Field tiap sumber:**
1177
+
1178
+ | Field | Tipe | Keterangan |
1179
+ |-------|------|------------|
1180
+ | `url` | string | URL tujuan (wajib) |
1181
+ | `title` | string | Judul sumber |
1182
+ | `display_name` | string | Nama tampilan |
1183
+ | `subtitle` | string | Subjudul/deskripsi singkat |
1184
+ | `favicon` | string | URL favicon (opsional) |
1185
+ | `source_type` | string | Default `'THIRD_PARTY'` |
1186
+
1187
+ ---
1188
+
1189
+ ### 🎥 addReels
1190
+
1191
+ Kirim daftar reel/video carousel (horizontal scroll) seperti hasil rekomendasi konten.
1192
+
1193
+ ```js
1194
+ await sock.sendMessage(jid, {
1195
+ reels: [
1196
+ {
1197
+ username: 'creator1',
1198
+ videoUrl: 'https://example.com/reel1.mp4',
1199
+ thumbnailUrl: 'https://example.com/thumb1.jpg',
1200
+ profileIconUrl: 'https://example.com/avatar1.jpg',
1201
+ reels_title: 'Judul Reel 1',
1202
+ likes_count: 1200,
1203
+ view_count: 50000,
1204
+ shares_count: 300,
1205
+ reel_source: 'IG',
1206
+ is_verified: true
1207
+ },
1208
+ {
1209
+ username: 'creator2',
1210
+ videoUrl: 'https://example.com/reel2.mp4',
1211
+ thumbnailUrl: 'https://example.com/thumb2.jpg',
1212
+ profileIconUrl: 'https://example.com/avatar2.jpg',
1213
+ reels_title: 'Judul Reel 2',
1214
+ likes_count: 800,
1215
+ view_count: 20000,
1216
+ reel_source: 'TT' // TikTok
1217
+ }
1218
+ ],
1219
+ headerText: 'Rekomendasi video'
1220
+ })
1221
+ ```
1222
+
1223
+ **Field tiap reel:**
1224
+
1225
+ | Field | Tipe | Keterangan |
1226
+ |-------|------|------------|
1227
+ | `username` / `title` | string | Nama kreator |
1228
+ | `videoUrl` / `url` | string | URL video |
1229
+ | `thumbnailUrl` / `thumbnail` | string | URL thumbnail |
1230
+ | `profileIconUrl` / `profile_url` | string | URL foto profil |
1231
+ | `reels_title` | string | Judul reel |
1232
+ | `likes_count` / `like` | number | Jumlah like |
1233
+ | `view_count` / `view` | number | Jumlah views |
1234
+ | `shares_count` / `share` | number | Jumlah share |
1235
+ | `reel_source` / `source` | string | `'IG'`, `'TT'`, dll |
1236
+ | `is_verified` / `verified` | boolean | Akun terverifikasi |
1237
+
1238
+ ---
1239
+
1240
+ ### 🛍️ addProduct
1241
+
1242
+ Kirim kartu produk (single atau horizontal scroll untuk banyak produk).
1243
+
1244
+ ```js
1245
+ // Satu produk (Single layout)
1246
+ await sock.sendMessage(jid, {
1247
+ richProduct: {
1248
+ title: 'Nama Produk',
1249
+ brand: 'Nama Brand',
1250
+ price: 'Rp 150.000',
1251
+ sale_price: 'Rp 120.000',
1252
+ product_url: 'https://toko.example.com/produk',
1253
+ image_url: 'https://example.com/produk.jpg',
1254
+ icon_url: 'https://example.com/icon.jpg'
1255
+ },
1256
+ headerText: 'Rekomendasi produk untukmu'
1257
+ })
1258
+
1259
+ // Beberapa produk (HScroll layout)
1260
+ await sock.sendMessage(jid, {
1261
+ richProduct: [
1262
+ {
1263
+ title: 'Produk A',
1264
+ brand: 'Brand X',
1265
+ price: 'Rp 50.000',
1266
+ product_url: 'https://toko.example.com/a',
1267
+ image_url: 'https://example.com/a.jpg'
1268
+ },
1269
+ {
1270
+ title: 'Produk B',
1271
+ brand: 'Brand Y',
1272
+ price: 'Rp 75.000',
1273
+ sale_price: 'Rp 60.000',
1274
+ product_url: 'https://toko.example.com/b',
1275
+ image_url: 'https://example.com/b.jpg'
1276
+ }
1277
+ ],
1278
+ headerText: 'Produk pilihan hari ini'
1279
+ })
1280
+ ```
1281
+
1282
+ **Field tiap produk:**
1283
+
1284
+ | Field | Tipe | Keterangan |
1285
+ |-------|------|------------|
1286
+ | `title` | string | Nama produk |
1287
+ | `brand` | string | Nama brand |
1288
+ | `price` | string | Harga normal (teks bebas, mis. `'Rp 50.000'`) |
1289
+ | `sale_price` / `salePrice` | string | Harga diskon |
1290
+ | `product_url` / `url` | string | Link produk |
1291
+ | `image_url` / `image` | string | URL gambar utama |
1292
+ | `icon_url` / `icon` | string | URL gambar tambahan |
1293
+
1294
+ > Kirim object tunggal → **Single layout**. Kirim array → **HScroll layout**.
1295
+
1296
+ ---
1297
+
1298
+ ### 📝 addPost
1299
+
1300
+ Kirim kartu post sosial media (Instagram, TikTok, dll) dalam horizontal scroll.
1301
+
1302
+ ```js
1303
+ // Satu post
1304
+ await sock.sendMessage(jid, {
1305
+ richPost: {
1306
+ title: 'Judul Post',
1307
+ subtitle: 'Subjudul',
1308
+ username: 'namauser',
1309
+ profile_picture_url: 'https://example.com/avatar.jpg',
1310
+ is_verified: true,
1311
+ thumbnail_url: 'https://example.com/thumb.jpg',
1312
+ post_caption: 'Caption post ini',
1313
+ likes_count: 5000,
1314
+ comments_count: 200,
1315
+ shares_count: 100,
1316
+ post_url: 'https://instagram.com/p/xxx',
1317
+ post_deeplink: 'instagram://post/xxx',
1318
+ source_app: 'INSTAGRAM',
1319
+ footer_label: 'Lihat di Instagram',
1320
+ orientation: 'LANDSCAPE', // 'LANDSCAPE' | 'PORTRAIT'
1321
+ post_type: 'VIDEO' // 'VIDEO' | 'IMAGE'
1322
+ },
1323
+ headerText: 'Post terpopuler'
1324
+ })
1325
+
1326
+ // Beberapa post (carousel horizontal)
1327
+ await sock.sendMessage(jid, {
1328
+ richPost: [
1329
+ {
1330
+ username: 'user1',
1331
+ thumbnail_url: 'https://example.com/thumb1.jpg',
1332
+ post_caption: 'Caption post pertama',
1333
+ likes_count: 3000,
1334
+ post_url: 'https://instagram.com/p/aaa',
1335
+ source_app: 'INSTAGRAM'
1336
+ },
1337
+ {
1338
+ username: 'user2',
1339
+ thumbnail_url: 'https://example.com/thumb2.jpg',
1340
+ post_caption: 'Caption post kedua',
1341
+ likes_count: 1500,
1342
+ post_url: 'https://tiktok.com/@user2/video/yyy',
1343
+ source_app: 'TIKTOK'
1344
+ }
1345
+ ],
1346
+ headerText: 'Post trending hari ini'
1347
+ })
1348
+ ```
1349
+
1350
+ **Field tiap post:**
1351
+
1352
+ | Field | Tipe | Keterangan |
1353
+ |-------|------|------------|
1354
+ | `title` | string | Judul post |
1355
+ | `subtitle` | string | Subjudul |
1356
+ | `username` | string | Nama pengguna |
1357
+ | `profile_picture_url` / `profile_url` | string | URL foto profil |
1358
+ | `is_verified` / `verified` | boolean | Akun terverifikasi |
1359
+ | `thumbnail_url` / `thumbnail` | string | URL thumbnail post |
1360
+ | `post_caption` / `caption` | string | Caption/teks post |
1361
+ | `likes_count` / `like` | number | Jumlah like |
1362
+ | `comments_count` / `comment` | number | Jumlah komentar |
1363
+ | `shares_count` / `share` | number | Jumlah share |
1364
+ | `post_url` / `url` | string | URL post |
1365
+ | `post_deeplink` / `deeplink` | string | Deeplink aplikasi |
1366
+ | `source_app` / `source` | string | `'INSTAGRAM'`, `'TIKTOK'`, dll |
1367
+ | `footer_label` / `footer` | string | Teks footer |
1368
+ | `footer_icon` / `icon` | string | URL ikon footer |
1369
+ | `orientation` | string | `'LANDSCAPE'` atau `'PORTRAIT'` |
1370
+ | `post_type` | string | `'VIDEO'` atau `'IMAGE'` |
1371
+
1372
+ ---
1373
+
1374
+ ### 💡 addTip
1375
+
1376
+ Kirim teks pendek sebagai metadata/tip (tampil lebih kecil dan subtle).
1377
+
1378
+ ```js
1379
+ await sock.sendMessage(jid, {
1380
+ tip: 'Informasi ini dibuat oleh AI berdasarkan data terbaru.',
1381
+ headerText: 'Ringkasan'
1382
+ })
1383
+
1384
+ // Dikombinasikan dengan tipe lain
1385
+ await sock.sendMessage(jid, {
1386
+ contentText: 'Berikut jawabannya...',
1387
+ tip: 'Jawaban mungkin tidak selalu akurat. Verifikasi mandiri disarankan.'
1388
+ })
1389
+ ```
1390
+
1391
+ ---
1392
+
1393
+ ### 🔮 addSuggest
1394
+
1395
+ Kirim saran prompt follow-up sebagai pill buttons yang bisa langsung diklik user.
1396
+
1397
+ ```js
1398
+ // Satu saran
1399
+ await sock.sendMessage(jid, {
1400
+ contentText: 'Begitulah penjelasannya.',
1401
+ suggest: 'Jelaskan lebih detail'
1402
+ })
1403
+
1404
+ // Beberapa saran
1405
+ await sock.sendMessage(jid, {
1406
+ contentText: 'Apakah ada yang ingin kamu tanyakan?',
1407
+ suggest: [
1408
+ 'Contoh kodenya?',
1409
+ 'Apa perbedaannya?',
1410
+ 'Kapan sebaiknya digunakan?',
1411
+ 'Ada alternatif lain?'
1412
+ ]
1413
+ })
1414
+ ```
1415
+
1416
+ > Saran tampil sebagai pill button di bawah pesan. Saat user mengetuk salah satu, teks saran tersebut akan terkirim sebagai pesan baru.
1417
+
1418
+ ---
1419
+
1420
+ ### 🖼️ Grid Image (Rich)
1421
+
1422
+ Kirim grid gambar dengan format verbose (object URL lengkap).
1423
+
1424
+ > Untuk pemakaian praktis, gunakan shorthand [`image`](#addimage).
1425
+
1426
+ ```js
1427
+ // Object URL lengkap (recommended untuk kontrol penuh)
1428
+ await sock.sendMessage(jid, {
1429
+ gridImage: {
1430
+ gridImageUrl: {
1431
+ imagePreviewUrl: 'https://picsum.photos/id/10/300/300',
1432
+ imageHighResUrl: 'https://picsum.photos/id/10/1200/1200',
1433
+ sourceUrl: 'https://picsum.photos'
1434
+ },
1435
+ imageUrls: [
1436
+ {
1437
+ imagePreviewUrl: 'https://picsum.photos/id/11/300/300',
1438
+ imageHighResUrl: 'https://picsum.photos/id/11/1200/1200',
1439
+ sourceUrl: 'https://picsum.photos'
1440
+ }
1441
+ ]
1442
+ },
1443
+ headerText: 'Hasil pencarian gambar'
1444
+ })
1445
+
1446
+ // String URL (shorthand)
1447
+ await sock.sendMessage(jid, {
1448
+ gridImage: {
1449
+ gridImageUrl: 'https://picsum.photos/id/10/300/300',
1450
+ imageUrls: ['https://picsum.photos/id/11/300/300']
1451
+ },
1452
+ headerText: 'Hasil pencarian gambar'
1453
+ })
1454
+ ```
1455
+
1456
+ ---
1457
+
1458
+ ### 📸 Inline Image (Rich)
1459
+
1460
+ Kirim gambar yang muncul inline di dalam teks.
1461
+
1462
+ ```js
1463
+ await sock.sendMessage(jid, {
1464
+ inlineImage: {
1465
+ imageUrl: 'https://picsum.photos/id/237/300/300',
1466
+ imageText: 'Ilustrasi gambar',
1467
+ alignment: 2, // 0 = leading, 1 = trailing, 2 = center
1468
+ tapLinkUrl: 'https://picsum.photos'
1469
+ },
1470
+ headerText: 'Berikut ilustrasinya',
1471
+ footerText: 'Tap gambar untuk detail'
1472
+ })
1473
+ ```
1474
+
1475
+ ---
1476
+
1477
+ ### 🎞️ Dynamic / GIF (Rich)
1478
+
1479
+ Kirim animasi atau GIF.
1480
+
1481
+ ```js
1482
+ await sock.sendMessage(jid, {
1483
+ dynamic: {
1484
+ url: 'https://example.com/animation.gif',
1485
+ type: 2, // 1 = IMAGE, 2 = GIF
1486
+ version: 1,
1487
+ loopCount: 0 // 0 = loop selamanya
1488
+ },
1489
+ headerText: 'Animasi untuk kamu'
1036
1490
  })
1037
1491
  ```
1038
1492
 
1039
- > 💡 Bahasa yang didukung bergantung pada `LANGUAGE_KEYWORDS` — termasuk javascript, python, dll~
1493
+ ---
1494
+
1495
+ ### 🗺️ Map (Rich)
1496
+
1497
+ Kirim peta interaktif dengan anotasi lokasi.
1498
+
1499
+ ```js
1500
+ // Satu lokasi
1501
+ await sock.sendMessage(jid, {
1502
+ map: {
1503
+ centerLatitude: -6.2088,
1504
+ centerLongitude: 106.8456,
1505
+ latitudeDelta: 0.05,
1506
+ longitudeDelta: 0.05,
1507
+ showInfoList: true,
1508
+ annotations: [
1509
+ {
1510
+ number: 1,
1511
+ latitude: -6.2088,
1512
+ longitude: 106.8456,
1513
+ title: 'Jakarta Pusat',
1514
+ body: 'Ibu kota Indonesia'
1515
+ }
1516
+ ]
1517
+ },
1518
+ headerText: 'Lokasi yang kamu cari'
1519
+ })
1520
+
1521
+ // Multi-lokasi
1522
+ await sock.sendMessage(jid, {
1523
+ map: {
1524
+ centerLatitude: -7.2575,
1525
+ centerLongitude: 112.7521,
1526
+ latitudeDelta: 0.1,
1527
+ longitudeDelta: 0.1,
1528
+ showInfoList: true,
1529
+ annotations: [
1530
+ { number: 1, latitude: -7.2575, longitude: 112.7521, title: 'Surabaya', body: 'Kota Pahlawan' },
1531
+ { number: 2, latitude: -7.9797, longitude: 112.6304, title: 'Malang', body: 'Kota Bunga' }
1532
+ ]
1533
+ },
1534
+ headerText: 'Kota-kota di Jawa Timur'
1535
+ })
1536
+ ```
1040
1537
 
1041
1538
  ---
1042
1539
 
1043
- ## 🔗 Links (Rich)
1540
+ ### 🧮 LaTeX (Rich)
1541
+
1542
+ Kirim rumus matematika dalam format LaTeX.
1044
1543
 
1045
- > Kirim teks dengan referensi link yang kaya (inline citation) tampil sebagai AI Rich Response~
1544
+ > `url` di setiap expression akan **otomatis di-generate** dari [latex.codecogs.com](https://latex.codecogs.com) jika tidak diisi.
1545
+
1546
+ ```js
1547
+ // Satu rumus
1548
+ await sock.sendMessage(jid, {
1549
+ latex: {
1550
+ text: 'Berikut rumus yang kamu minta:',
1551
+ expressions: [
1552
+ { expression: 'E = mc^2', width: 120, height: 40 }
1553
+ ]
1554
+ },
1555
+ headerText: 'Rumus Einstein',
1556
+ footerText: 'E = energi, m = massa, c = kecepatan cahaya'
1557
+ })
1558
+
1559
+ // Beberapa rumus
1560
+ await sock.sendMessage(jid, {
1561
+ latex: {
1562
+ text: 'Rumus-rumus fisika dasar:',
1563
+ expressions: [
1564
+ { expression: 'F = ma', width: 80, height: 35 },
1565
+ { expression: 'v = u + at', width: 100, height: 35 },
1566
+ { expression: 's = ut + \\frac{1}{2}at^2', width: 160, height: 50 }
1567
+ ]
1568
+ },
1569
+ headerText: 'Hukum Newton',
1570
+ disclaimerText: 'Fisika dasar kelas 10'
1571
+ })
1572
+ ```
1573
+
1574
+
1575
+
1576
+ ---
1577
+
1578
+ ### 🧮 generateLatexContent / sendLatex (Standalone)
1579
+
1580
+ Fungsi standalone kompatibel dengan upstream baileys. Bisa dipanggil langsung dari socket:
1581
+
1582
+ ```js
1583
+ const { generateLatexContent, generateLatexImageContent, generateLatexInlineImageContent } = require('@nuiisweety/baileys')
1584
+
1585
+ // sendLatex — URL auto-generate via codecogs jika tidak diisi
1586
+ await sock.sendLatex(jid, m, {
1587
+ text: 'Rumus Pythagoras:',
1588
+ expressions: [
1589
+ { latexExpression: 'a^2 + b^2 = c^2', width: 150, height: 45 }
1590
+ ],
1591
+ headerText: 'Matematika',
1592
+ footer: 'Semoga paham!'
1593
+ })
1594
+
1595
+ // sendLatexImage — render ke PNG dulu, lalu upload
1596
+ await sock.sendLatexImage(jid, m, {
1597
+ expressions: [{ latexExpression: 'E = mc^2' }]
1598
+ }, renderLatexToPng, sock.waUploadToServer)
1599
+
1600
+ // sendLatexInlineImage — render ke PNG, kirim sebagai InlineImage per expression
1601
+ await sock.sendLatexInlineImage(jid, m, {
1602
+ expressions: [{ latexExpression: '\\int_0^\\infty e^{-x} dx = 1' }]
1603
+ }, renderLatexToPng, sock.waUploadToServer)
1604
+ ```
1605
+
1606
+ ### 📊 sendTable / sendTableV2 / sendList (Standalone)
1607
+
1608
+ ```js
1609
+ // sendTable — format V1
1610
+ await sock.sendTable(jid, 'Data Kota', ['Kota', 'Populasi'], [['Jakarta', '10jt'], ['Surabaya', '3jt']], m)
1611
+
1612
+ // sendList
1613
+ await sock.sendList(jid, 'Daftar Belanja', ['Apel', 'Jeruk', 'Mangga'], m)
1614
+ ```
1615
+
1616
+ ### 💻 sendCodeBlock / sendCodeBlockV2 (Standalone)
1617
+
1618
+ ```js
1619
+ await sock.sendCodeBlock(jid, 'console.log("Hello")', m, { language: 'javascript', title: 'Contoh JS' })
1620
+ ```
1621
+
1622
+ ### 🔗 sendLink / sendLinkV2 (Standalone)
1623
+
1624
+ ```js
1625
+ await sock.sendLink(jid, 'Kunjungi dokumentasi ini', [{ url: 'https://docs.example.com', displayName: 'Docs' }], m)
1626
+ ```
1627
+
1628
+ ### 🎁 sendRichMessage / sendUnifiedResponse / captureUnifiedResponse (Standalone)
1629
+
1630
+ ```js
1631
+ // Kirim array submessage mentah
1632
+ await sock.sendRichMessage(jid, [
1633
+ { messageType: 2, messageText: 'Teks pertama' },
1634
+ { messageType: 2, messageText: 'Teks kedua' }
1635
+ ], m)
1636
+
1637
+ // Capture dan forward unified response
1638
+ const captured = sock.captureUnifiedResponse(existingMsg.message)
1639
+ if (captured) await sock.sendUnifiedResponse(jid, m, captured)
1640
+ ```
1641
+ ---
1642
+
1643
+ ### 📦 Content Items (Rich)
1644
+
1645
+ Kirim carousel konten (reel/video) dengan format verbose.
1646
+
1647
+ > Untuk pemakaian praktis, gunakan shorthand [`reels`](#addreels).
1648
+
1649
+ ```js
1650
+ await sock.sendMessage(jid, {
1651
+ contentItems: {
1652
+ contentType: 1, // 0 = DEFAULT, 1 = CAROUSEL
1653
+ items: [
1654
+ {
1655
+ kind: 'reel',
1656
+ title: 'Tutorial Coding JavaScript',
1657
+ profileIconUrl: 'https://example.com/avatar1.jpg',
1658
+ thumbnailUrl: 'https://example.com/thumb1.jpg',
1659
+ videoUrl: 'https://example.com/video1.mp4'
1660
+ },
1661
+ {
1662
+ kind: 'reel',
1663
+ title: 'Belajar React Hooks',
1664
+ profileIconUrl: 'https://example.com/avatar2.jpg',
1665
+ thumbnailUrl: 'https://example.com/thumb2.jpg',
1666
+ videoUrl: 'https://example.com/video2.mp4'
1667
+ }
1668
+ ]
1669
+ },
1670
+ headerText: 'Rekomendasi video'
1671
+ })
1672
+ ```
1673
+
1674
+ ---
1675
+
1676
+ ### 🔗 Links (Rich)
1677
+
1678
+ Kirim teks dengan inline citation/reference link.
1046
1679
 
1047
1680
  ```js
1048
1681
  await sock.sendMessage(jid, {
@@ -1054,84 +1687,125 @@ await sock.sendMessage(jid, {
1054
1687
  url: 'https://example.com/docs',
1055
1688
  sources: [
1056
1689
  {
1057
- displayName: 'Source 1 💕',
1690
+ displayName: 'Source 1',
1058
1691
  subtitle: 'Sumber terpercaya',
1059
1692
  url: 'https://example.com/source'
1060
1693
  }
1061
1694
  ]
1062
1695
  }
1063
1696
  ],
1064
- headerText: 'Referensi~ 🌸',
1065
- footerText: 'Semoga berguna 🍃'
1697
+ headerText: 'Referensi',
1698
+ footerText: 'Semoga berguna'
1066
1699
  })
1067
1700
  ```
1068
1701
 
1069
1702
  ---
1070
1703
 
1071
- ## 📊 Table (Rich)
1704
+ ### 🎁 Rich Response (Gabungan)
1072
1705
 
1073
- > 🌷 Kirim tabel cantik tampil sebagai AI Rich Response~
1706
+ Kirim kombinasi berbagai tipe Rich Message dalam satu pesan menggunakan mode array.
1074
1707
 
1075
1708
  ```js
1709
+ // Kombinasi teks + kode + tabel
1076
1710
  await sock.sendMessage(jid, {
1077
- table: [
1078
- ['Nama 🌸', 'Usia 💕', 'Kota 🌆'], // baris pertama = header
1079
- ['Hana', '20', 'Jakarta'],
1080
- ['Risa', '22', 'Bandung'],
1081
- ['Yuki', '21', 'Surabaya']
1711
+ richResponse: [
1712
+ { text: 'Penjelasan singkat:' },
1713
+ { code: 'const x = 1 + 1', language: 'javascript' },
1714
+ {
1715
+ table: [['Kolom A', 'Kolom B'], ['Nilai 1', 'Nilai 2']],
1716
+ title: 'Hasil'
1717
+ },
1718
+ { text: 'Semoga membantu ya!' }
1082
1719
  ],
1083
- title: 'Data Anggota 🌟',
1084
- headerText: 'Berikut datanya~ 💖',
1085
- footerText: 'Data per Juni 2025 🍃'
1720
+ disclaimerText: 'Generated by AI'
1086
1721
  })
1087
1722
 
1088
- // 🔒 Tanpa baris header
1723
+ // Kombinasi dengan semua tipe baru
1089
1724
  await sock.sendMessage(jid, {
1090
- table: [
1091
- ['Item A', 'Rp 10.000'],
1092
- ['Item B', 'Rp 20.000']
1725
+ richResponse: [
1726
+ { text: 'Berikut hasilnya:' },
1727
+ { richImage: ['https://example.com/img1.jpg', 'https://example.com/img2.jpg'] },
1728
+ { source: [{ url: 'https://example.com', title: 'Sumber Data' }] },
1729
+ { code: 'print("Hello")', language: 'python' },
1730
+ {
1731
+ product: [
1732
+ { title: 'Produk A', price: 'Rp 50.000', image_url: 'https://example.com/a.jpg', product_url: 'https://example.com/a' },
1733
+ { title: 'Produk B', price: 'Rp 75.000', image_url: 'https://example.com/b.jpg', product_url: 'https://example.com/b' }
1734
+ ]
1735
+ },
1736
+ {
1737
+ post: [
1738
+ { username: 'user1', thumbnail_url: 'https://example.com/t1.jpg', post_url: 'https://ig.com/p/aaa', source_app: 'INSTAGRAM', likes_count: 1000 }
1739
+ ]
1740
+ },
1741
+ { tip: 'Informasi ini dihasilkan secara otomatis.' },
1742
+ { suggest: ['Tanya lebih lanjut', 'Lihat contoh lain', 'Mulai dari awal'] }
1093
1743
  ],
1094
- noHeading: true,
1095
- title: 'Daftar Harga 🌺'
1744
+ disclaimerText: 'Powered by AI'
1096
1745
  })
1097
1746
  ```
1098
1747
 
1099
1748
  ---
1100
1749
 
1101
- ## 🌈 Rich Response (Gabungan)
1102
-
1103
- > 💞 Kirim gabungan teks, kode, dan tabel dalam satu pesan AI Rich Response~
1750
+ ## 📥 Terima & Decode Rich Message
1104
1751
 
1105
1752
  ```js
1106
- await sock.sendMessage(jid, {
1107
- richResponse: [
1108
- { text: 'Penjelasan singkat~ 🌸' },
1109
- {
1110
- code: 'const x = 1 + 1',
1111
- language: 'javascript'
1112
- },
1113
- {
1114
- table: [['Kolom A', 'Kolom B'], ['Nilai 1', 'Nilai 2']],
1115
- title: 'Hasil 🌷'
1116
- },
1117
- { text: 'Semoga membantu ya~ 💕' }
1118
- ],
1119
- disclaimerText: 'Generated by AI 🤖'
1753
+ const { normalizeMessageContent, parseRichMessage } = require('@nuiisweety/baileys')
1754
+
1755
+ sock.ev.on('messages.upsert', async ({ messages }) => {
1756
+ for (const msg of messages) {
1757
+ const inner = normalizeMessageContent(msg.message)
1758
+ const parsed = parseRichMessage(inner?.richResponseMessage)
1759
+
1760
+ if (!parsed) continue
1761
+
1762
+ for (const sub of parsed.submessages) {
1763
+ switch (sub.type) {
1764
+ case 'text':
1765
+ console.log('Teks:', sub.text)
1766
+ break
1767
+ case 'code':
1768
+ console.log('Kode (' + sub.language + '):', sub.raw)
1769
+ break
1770
+ case 'table':
1771
+ console.log('Tabel:', sub.title, sub.rows)
1772
+ break
1773
+ case 'gridImage':
1774
+ console.log('Grid Image:', sub.gridImageUrl, sub.imageUrls)
1775
+ break
1776
+ case 'inlineImage':
1777
+ console.log('Inline Image:', sub.imageUrl, sub.imageText)
1778
+ break
1779
+ case 'dynamic':
1780
+ console.log('Dynamic:', sub.url, sub.dynamicType === 2 ? 'GIF' : 'Image')
1781
+ break
1782
+ case 'map':
1783
+ console.log('Map:', sub.centerLatitude, sub.centerLongitude)
1784
+ break
1785
+ case 'latex':
1786
+ console.log('LaTeX:', sub.text, sub.expressions)
1787
+ break
1788
+ case 'contentItems':
1789
+ console.log('Content Items:', sub.contentType, sub.items)
1790
+ break
1791
+ }
1792
+ }
1793
+ }
1120
1794
  })
1121
1795
  ```
1122
1796
 
1123
- ---
1797
+ > `parseRichMessage` menerima `null` atau `undefined` dengan aman — return `null` jika tidak ada rich message.
1124
1798
 
1125
- ## 📩 List Reply
1799
+ ---
1126
1800
 
1127
- > 🌷 Simulasi balasan dari list message (ketika user memilih item dari daftar)~
1801
+ ## 📃 List Reply
1128
1802
 
1129
1803
  ```js
1130
1804
  await sock.sendMessage(jid, {
1131
1805
  listReply: {
1132
- title: 'Pilihan Saya 💕',
1806
+ title: 'Pilihan Saya',
1133
1807
  description: 'Deskripsi pilihan',
1134
- id: 'row1' // 🗝️ selectedRowId dari baris yang dipilih
1808
+ id: 'row1' // selectedRowId dari baris yang dipilih
1135
1809
  }
1136
1810
  })
1137
1811
  ```
@@ -1140,14 +1814,12 @@ await sock.sendMessage(jid, {
1140
1814
 
1141
1815
  ## 🎴 Sticker Pack
1142
1816
 
1143
- > ✨ Kirim paket sticker kustom — membutuhkan cover dan minimal 1 sticker~
1144
-
1145
1817
  ```js
1146
1818
  await sock.sendMessage(jid, {
1147
- cover: fs.readFileSync('cover.webp'), // 🖼️ wajib ada
1148
- name: 'Pack Manis 🌸',
1149
- publisher: 'NuiiS4TORU 💖',
1150
- description: 'Sticker pack cantik~',
1819
+ cover: fs.readFileSync('cover.webp'), // wajib
1820
+ name: 'Pack Manis',
1821
+ publisher: 'NuiiS4TORU',
1822
+ description: 'Sticker pack cantik',
1151
1823
  stickers: [
1152
1824
  {
1153
1825
  data: fs.readFileSync('sticker1.webp'),
@@ -1158,106 +1830,80 @@ await sock.sendMessage(jid, {
1158
1830
  data: { url: 'https://example.com/sticker2.webp' },
1159
1831
  emojis: ['🌷']
1160
1832
  }
1161
- // 🌺 maksimal 60 sticker ya~
1833
+ // maksimal 60 sticker
1162
1834
  ]
1163
1835
  })
1164
1836
  ```
1165
1837
 
1166
- > 🍀 Butuh library `sharp` atau `@napi-rs/image` untuk konversi WebP. Setiap sticker maks 1MB~
1167
-
1168
1838
  ---
1169
1839
 
1170
1840
  ## 📢 External Ad Reply
1171
1841
 
1172
- > 💌 Tambahkan tampilan iklan eksternal sebagai context info pada pesan~
1173
-
1174
1842
  ```js
1175
- // 💬 Teks dengan external ad reply
1176
1843
  await sock.sendMessage(jid, {
1177
- text: 'Cek produk ini~ 🌸',
1844
+ text: 'Cek produk ini',
1178
1845
  externalAdReply: {
1179
- title: 'Judul Iklan 💕',
1180
- body: 'Deskripsi iklan yang menarik 🌷',
1181
- thumbnail: fs.readFileSync('thumbnail.jpg'), // 🖼️ harus Buffer
1846
+ title: 'Judul Iklan',
1847
+ body: 'Deskripsi iklan',
1848
+ thumbnail: fs.readFileSync('thumbnail.jpg'), // harus Buffer
1182
1849
  url: 'https://example.com/produk',
1183
- mediaType: 1, // 1 = image 🖼️
1850
+ mediaType: 1, // 1 = image
1184
1851
  largeThumbnail: false
1185
1852
  }
1186
1853
  })
1187
-
1188
- // 🖼️ Gambar dengan external ad reply
1189
- await sock.sendMessage(jid, {
1190
- image: { url: 'https://example.com/banner.jpg' },
1191
- caption: 'Penawaran spesial 💖',
1192
- externalAdReply: {
1193
- title: 'Promo Hari Ini 🌸',
1194
- url: 'https://example.com/promo',
1195
- thumbnail: fs.readFileSync('thumb.jpg'),
1196
- mediaType: 1
1197
- }
1198
- })
1199
1854
  ```
1200
1855
 
1201
1856
  ---
1202
1857
 
1203
- ## 💸 Request Payment
1204
-
1205
- > 🌷 Minta pembayaran dari seseorang — hanya untuk chat privat~
1858
+ ## 💳 Request Payment
1206
1859
 
1207
1860
  ```js
1208
- // 💬 Dengan teks sebagai note
1209
1861
  await sock.sendMessage(jid, {
1210
- text: 'Tolong transfer ya sayang~ 🌸',
1862
+ text: 'Tolong transfer ya',
1211
1863
  requestPaymentFrom: '628xxx@s.whatsapp.net',
1212
- amount1000: 50000000, // 💰 Rp 50.000 (dalam unit 1/1000)
1864
+ amount1000: 50000000, // Rp 50.000 (unit 1/1000)
1213
1865
  currencyCodeIso4217: 'IDR',
1214
- expiryTimestamp: Date.now() + 86400000 // kadaluarsa 1 hari
1866
+ expiryTimestamp: Date.now() + 86400000 // kadaluarsa 1 hari
1215
1867
  })
1216
1868
  ```
1217
1869
 
1218
- > 🍀 Note message harus berupa `extendedTextMessage` (teks) atau `stickerMessage`~
1219
-
1220
1870
  ---
1221
1871
 
1222
1872
  ## 🧾 Invoice
1223
1873
 
1224
- > ✨ Kirim invoice dengan attachment gambar atau dokumen PDF~
1225
-
1226
1874
  ```js
1227
- // 🖼️ Invoice dengan gambar
1875
+ // Dengan gambar
1228
1876
  await sock.sendMessage(jid, {
1229
1877
  image: fs.readFileSync('invoice.jpg'),
1230
- invoiceNote: 'Invoice pembelian 🌸\nTotal: Rp 150.000 💕'
1878
+ invoiceNote: 'Invoice pembelian\nTotal: Rp 150.000'
1231
1879
  })
1232
1880
 
1233
- // 📄 Invoice dengan PDF
1881
+ // Dengan PDF
1234
1882
  await sock.sendMessage(jid, {
1235
1883
  document: fs.readFileSync('invoice.pdf'),
1236
1884
  mimetype: 'application/pdf',
1237
1885
  fileName: 'invoice.pdf',
1238
- invoiceNote: 'Terima kasih atas pesananmu~ 🌷'
1886
+ invoiceNote: 'Terima kasih atas pesananmu'
1239
1887
  })
1240
1888
  ```
1241
1889
 
1242
1890
  ---
1243
1891
 
1244
- ## 🛒 Order
1245
-
1246
- > 🌟 Kirim detail pesanan (order message) — untuk fitur belanja WhatsApp~
1892
+ ## 📦 Order
1247
1893
 
1248
1894
  ```js
1249
1895
  await sock.sendMessage(jid, {
1250
1896
  order: {
1251
1897
  orderId: 'order_001',
1252
- thumbnail: fs.readFileSync('produk.jpg'), // 🖼️ wajib ada
1898
+ thumbnail: fs.readFileSync('produk.jpg'), // wajib
1253
1899
  itemCount: 3,
1254
- status: 'PAYMENT_PENDING', // 💰 status pesanan
1900
+ status: 'PAYMENT_PENDING',
1255
1901
  surface: 'CATALOG',
1256
- message: 'Pesanan kamu sedang diproses ya~ 🌸',
1257
- orderTitle: 'Pesanan #001 💕',
1902
+ message: 'Pesanan kamu sedang diproses',
1903
+ orderTitle: 'Pesanan #001',
1258
1904
  sellerJid: '628xxx@s.whatsapp.net',
1259
1905
  token: 'token_unik',
1260
- totalAmount1000: 150000000, // 💸 Rp 150.000
1906
+ totalAmount1000: 150000000, // Rp 150.000
1261
1907
  totalCurrencyCode: 'IDR'
1262
1908
  }
1263
1909
  })
@@ -1265,46 +1911,40 @@ await sock.sendMessage(jid, {
1265
1911
 
1266
1912
  ---
1267
1913
 
1268
- ## Disappearing Messages
1269
-
1270
- > 🍃 Aktifkan atau nonaktifkan pesan menghilang di obrolan grup~
1914
+ ## 💨 Disappearing Messages
1271
1915
 
1272
1916
  ```js
1273
- // Aktifkan (86400 detik = 24 jam default)
1917
+ // Aktifkan (86400 detik = 24 jam default)
1274
1918
  await sock.sendMessage(groupJid, { disappearingMessagesInChat: true })
1275
1919
 
1276
- // Nonaktifkan
1920
+ // Nonaktifkan
1277
1921
  await sock.sendMessage(groupJid, { disappearingMessagesInChat: false })
1278
1922
 
1279
- // ⏱️ Durasi kustom (dalam detik)
1923
+ // Durasi kustom (detik)
1280
1924
  await sock.sendMessage(groupJid, { disappearingMessagesInChat: 604800 }) // 7 hari
1281
1925
  ```
1282
1926
 
1283
- > 🌷 Hanya berfungsi di grup (`@g.us`). Nilai `true` menggunakan `WA_DEFAULT_EPHEMERAL` (86400 detik)~
1927
+ > Hanya berfungsi di grup (`@g.us`).
1284
1928
 
1285
1929
  ---
1286
1930
 
1287
- ## 📦 Raw Message
1288
-
1289
- > ⚡ Kirim pesan dalam bentuk raw WAProto — untuk kontrol penuh struktur pesan~
1931
+ ## Raw Message
1290
1932
 
1291
1933
  ```js
1292
- // 🌸 Properti 'raw' akan di-bypass langsung tanpa transformasi apapun
1293
1934
  await sock.sendMessage(jid, {
1294
1935
  raw: true,
1295
1936
  extendedTextMessage: {
1296
- text: 'Pesan raw langsung ke proto~ 💕'
1937
+ text: 'Pesan raw langsung ke proto'
1297
1938
  }
1298
1939
  })
1299
1940
  ```
1300
1941
 
1301
- > 💡 Ketika `raw: true` ada, semua properti lain diteruskan langsung sebagai WAProto message tanpa pemrosesan tambahan~
1942
+ > Ketika `raw: true` ada, semua properti lain diteruskan langsung sebagai WAProto message tanpa pemrosesan tambahan.
1302
1943
 
1303
1944
  ---
1304
1945
 
1305
1946
  <div align="center">
1306
- <br/>
1307
- <i>🌸 Dibuat dengan cinta dan dedikasi oleh <b>NuiiS4TORU</b> 💖</i><br/>
1308
- <i>✨ Semoga library ini membawa kebahagiaan dalam setiap project-mu~ 🌷</i>
1309
- <br/><br/>
1947
+
1948
+ *Dibuat dengan dedikasi oleh **NuiiS4TORU***
1949
+
1310
1950
  </div>