@gara31/void-baileys 7.0.0-rc.10

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.
Files changed (95) hide show
  1. package/LICENSE +21 -0
  2. package/WAProto/index.js +117292 -0
  3. package/lib/Defaults/baileys-version.json +3 -0
  4. package/lib/Defaults/index.js +116 -0
  5. package/lib/Signal/Group/ciphertext-message.js +12 -0
  6. package/lib/Signal/Group/group-session-builder.js +42 -0
  7. package/lib/Signal/Group/group_cipher.js +109 -0
  8. package/lib/Signal/Group/index.js +12 -0
  9. package/lib/Signal/Group/keyhelper.js +18 -0
  10. package/lib/Signal/Group/sender-chain-key.js +32 -0
  11. package/lib/Signal/Group/sender-key-distribution-message.js +67 -0
  12. package/lib/Signal/Group/sender-key-message.js +80 -0
  13. package/lib/Signal/Group/sender-key-name.js +50 -0
  14. package/lib/Signal/Group/sender-key-record.js +47 -0
  15. package/lib/Signal/Group/sender-key-state.js +105 -0
  16. package/lib/Signal/Group/sender-message-key.js +30 -0
  17. package/lib/Signal/libsignal.js +416 -0
  18. package/lib/Signal/lid-mapping.js +189 -0
  19. package/lib/Socket/Client/index.js +3 -0
  20. package/lib/Socket/Client/types.js +11 -0
  21. package/lib/Socket/Client/websocket.js +61 -0
  22. package/lib/Socket/business.js +404 -0
  23. package/lib/Socket/chats.js +1146 -0
  24. package/lib/Socket/communities.js +505 -0
  25. package/lib/Socket/groups.js +404 -0
  26. package/lib/Socket/index.js +18 -0
  27. package/lib/Socket/messages-recv.js +1600 -0
  28. package/lib/Socket/messages-send.js +1203 -0
  29. package/lib/Socket/mex.js +56 -0
  30. package/lib/Socket/newsletter.js +240 -0
  31. package/lib/Socket/socket.js +1060 -0
  32. package/lib/Types/Auth.js +2 -0
  33. package/lib/Types/Bussines.js +2 -0
  34. package/lib/Types/Call.js +2 -0
  35. package/lib/Types/Chat.js +8 -0
  36. package/lib/Types/Contact.js +2 -0
  37. package/lib/Types/Events.js +2 -0
  38. package/lib/Types/GroupMetadata.js +2 -0
  39. package/lib/Types/Label.js +25 -0
  40. package/lib/Types/LabelAssociation.js +7 -0
  41. package/lib/Types/Message.js +11 -0
  42. package/lib/Types/Newsletter.js +31 -0
  43. package/lib/Types/Product.js +2 -0
  44. package/lib/Types/Signal.js +2 -0
  45. package/lib/Types/Socket.js +3 -0
  46. package/lib/Types/State.js +13 -0
  47. package/lib/Types/USync.js +2 -0
  48. package/lib/Types/index.js +32 -0
  49. package/lib/Utils/auth-utils.js +276 -0
  50. package/lib/Utils/browser-utils.js +32 -0
  51. package/lib/Utils/business.js +262 -0
  52. package/lib/Utils/chat-utils.js +941 -0
  53. package/lib/Utils/crypto.js +179 -0
  54. package/lib/Utils/decode-wa-message.js +333 -0
  55. package/lib/Utils/event-buffer.js +580 -0
  56. package/lib/Utils/generics.js +436 -0
  57. package/lib/Utils/history.js +103 -0
  58. package/lib/Utils/index.js +19 -0
  59. package/lib/Utils/link-preview.js +105 -0
  60. package/lib/Utils/logger.js +3 -0
  61. package/lib/Utils/lt-hash.js +56 -0
  62. package/lib/Utils/make-mutex.js +38 -0
  63. package/lib/Utils/message-retry-manager.js +181 -0
  64. package/lib/Utils/messages-media.js +727 -0
  65. package/lib/Utils/messages.js +1309 -0
  66. package/lib/Utils/noise-handler.js +162 -0
  67. package/lib/Utils/pre-key-manager.js +125 -0
  68. package/lib/Utils/process-message.js +594 -0
  69. package/lib/Utils/signal.js +194 -0
  70. package/lib/Utils/use-multi-file-auth-state.js +118 -0
  71. package/lib/Utils/validate-connection.js +240 -0
  72. package/lib/WABinary/constants.js +1301 -0
  73. package/lib/WABinary/decode.js +240 -0
  74. package/lib/WABinary/encode.js +216 -0
  75. package/lib/WABinary/generic-utils.js +104 -0
  76. package/lib/WABinary/index.js +6 -0
  77. package/lib/WABinary/jid-utils.js +95 -0
  78. package/lib/WABinary/types.js +2 -0
  79. package/lib/WAM/BinaryInfo.js +10 -0
  80. package/lib/WAM/constants.js +22863 -0
  81. package/lib/WAM/encode.js +152 -0
  82. package/lib/WAM/index.js +4 -0
  83. package/lib/WAUSync/Protocols/USyncContactProtocol.js +29 -0
  84. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +59 -0
  85. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +27 -0
  86. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +36 -0
  87. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +60 -0
  88. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +28 -0
  89. package/lib/WAUSync/Protocols/index.js +5 -0
  90. package/lib/WAUSync/USyncQuery.js +104 -0
  91. package/lib/WAUSync/USyncUser.js +23 -0
  92. package/lib/WAUSync/index.js +4 -0
  93. package/lib/index.js +11 -0
  94. package/package.json +31 -0
  95. package/readme.md +522 -0
package/readme.md ADDED
@@ -0,0 +1,522 @@
1
+ <div align="center">
2
+
3
+ <img src="https://raw.githubusercontent.com/gara31/void-md/main/uploads/1778931942943_ajzmir7fupi.jpg" alt="void-baileys banner" width="100%" />
4
+
5
+ # @gara31/void-baileys
6
+
7
+ ### Modded Baileys v7 — Pesan Interaktif, Album, AI Rich Response & Lebih
8
+
9
+ [![npm version](https://img.shields.io/npm/v/@gara31/void-baileys?color=CB3837&logo=npm&logoColor=white&style=for-the-badge)](https://www.npmjs.com/package/@gara31/void-baileys)
10
+ [![npm downloads](https://img.shields.io/npm/dm/@gara31/void-baileys?color=CB3837&logo=npm&logoColor=white&style=for-the-badge)](https://www.npmjs.com/package/@gara31/void-baileys)
11
+ [![License](https://img.shields.io/badge/license-MIT-blue?style=for-the-badge)](LICENSE)
12
+ [![Node](https://img.shields.io/badge/node-%3E%3D20.0.0-339933?logo=node.js&logoColor=white&style=for-the-badge)](https://nodejs.org)
13
+ [![ESM](https://img.shields.io/badge/ESM-only-F7DF1E?logo=javascript&logoColor=black&style=for-the-badge)](#)
14
+
15
+ ---
16
+
17
+ **Build modifikasi dari [WhiskeySockets/Baileys](https://github.com/WhiskeySockets/Baileys)**
18
+ dengan dukungan native untuk pesan interaktif, album, AI rich response, newsletter, status mention, dan berbagai utilitas tambahan.
19
+
20
+ Package ini adalah **distribusi/build repo** untuk `@gara31/void-baileys`.
21
+ Berisi file runtime yang sudah dikompilasi di `lib/` dan protobuf di `WAProto/`, dirancang untuk digunakan langsung dari npm.
22
+
23
+ </div>
24
+
25
+ ---
26
+
27
+ ## Daftar Isi
28
+
29
+ - [Fitur](#-fitur)
30
+ - [Persyaratan](#-persyaratan)
31
+ - [Isi Package](#-isi-package)
32
+ - [Instalasi](#-instalasi)
33
+ - [Quick Start](#-quick-start)
34
+ - [Referensi API Socket](#-referensi-api-socket)
35
+ - [Referensi Event](#-referensi-event)
36
+ - [Utilitas](#-utilitas)
37
+ - [Lisensi](#-lisensi)
38
+
39
+ ---
40
+
41
+ ## ✨ Fitur
42
+
43
+ | Fitur | Deskripsi | Status |
44
+ |---|---|---|
45
+ | **Pesan Interaktif** | Flow button native, list/select menu, carousel | ✅ |
46
+ | **Album Messages** | Multi-image/video album dengan metadata | ✅ |
47
+ | **AI Rich Response** | `sendTable`, `sendList`, `sendCodeBlock`, `sendRichMessage` | ✅ |
48
+ | **Unified Response V2** | `sendTableV2`, `sendCodeBlockV2`, `sendLinkV2` | ✅ |
49
+ | **Link Messages** | Link inline dengan kutipan dan verifikasi | ✅ |
50
+ | **Payment Messages** | Pesan pembayaran dengan catatan/stiker | ✅ |
51
+ | **Produk & Katalog** | Pesan produk bisnis, katalog lengkap | ✅ |
52
+ | **Event & Poll** | Builder pesan event dan hasil polling | ✅ |
53
+ | **Newsletter Extras** | Follow massal, metadata, admin utilities | ✅ |
54
+ | **Komunitas & Grup** | CRUD komunitas, undangan, persetujuan | ✅ |
55
+ | **Status Mention** | `sendStatusMention()` untuk mention di status | ✅ |
56
+ | **LID & Session** | Pemetaan LID↔PN, migrasi sesi | ✅ |
57
+ | **TypeScript** | File `.d.ts` tersedia untuk semua API | ✅ |
58
+
59
+ ---
60
+
61
+ ## ✅ Persyaratan
62
+
63
+ - **Node.js** `>= 20.0.0`
64
+ - **Proyek ESM** (`"type": "module"` di `package.json`)
65
+ - Auth store persisten untuk penggunaan produksi
66
+ - Opsional: `pino`, `qrcode-terminal`, `sharp`, `jimp`
67
+
68
+ > **Penting:** `@gara31/void-baileys` hanya mendukung ESM. Proyek CommonJS perlu migrasi atau dynamic import wrapper.
69
+
70
+ ---
71
+
72
+ ## 📁 Isi Package
73
+
74
+ | Path | Kegunaan |
75
+ |---|---|
76
+ | `lib/` | Runtime utama, tipe, socket layer, utilitas |
77
+ | `WAProto/` | Protobuf runtime yang sudah digenerate |
78
+ | `package.json` | Metadata package |
79
+
80
+ ---
81
+
82
+ ## 📦 Instalasi
83
+
84
+ ```bash
85
+ npm install @gara31/void-baileys
86
+ ```
87
+
88
+ Package pendamping yang disarankan:
89
+
90
+ ```bash
91
+ npm install pino qrcode-terminal
92
+ ```
93
+
94
+ ### Menggunakan Alias
95
+
96
+ Tambahkan ke `package.json`:
97
+
98
+ ```json
99
+ {
100
+ "dependencies": {
101
+ "baileys": "npm:@gara31/void-baileys@latest"
102
+ }
103
+ }
104
+ ```
105
+
106
+ Lalu jalankan:
107
+
108
+ ```bash
109
+ npm install
110
+ ```
111
+
112
+ ---
113
+
114
+ ## 🛠️ Quick Start
115
+
116
+ ### 1. Setup Proyek
117
+
118
+ ```bash
119
+ mkdir bot-ku && cd bot-ku
120
+ npm init -y
121
+ ```
122
+
123
+ Pastikan `package.json` memiliki `"type": "module"`:
124
+
125
+ ```json
126
+ {
127
+ "name": "bot-ku",
128
+ "type": "module",
129
+ "dependencies": {
130
+ "baileys": "npm:@gara31/void-baileys@latest"
131
+ }
132
+ }
133
+ ```
134
+
135
+ ### 2. Install Dependensi
136
+
137
+ ```bash
138
+ npm install @gara31/void-baileys pino qrcode-terminal
139
+ ```
140
+
141
+ ### 3. Buat `index.js`
142
+
143
+ ```js
144
+ import makeWASocket, {
145
+ useMultiFileAuthState,
146
+ DisconnectReason,
147
+ Browsers,
148
+ } from '@gara31/void-baileys'
149
+ import pino from 'pino'
150
+ import qrcode from 'qrcode-terminal'
151
+
152
+ const logger = pino({ level: 'silent' })
153
+
154
+ async function startBot() {
155
+ const { state, saveCreds } = await useMultiFileAuthState('./session')
156
+
157
+ const sock = makeWASocket({
158
+ auth: state,
159
+ logger,
160
+ browser: Browsers.ubuntu('Chrome'),
161
+ syncFullHistory: false,
162
+ })
163
+
164
+ sock.ev.on('creds.update', saveCreds)
165
+
166
+ sock.ev.on('connection.update', ({ connection, lastDisconnect, qr }) => {
167
+ if (qr) qrcode.generate(qr, { small: true })
168
+
169
+ if (connection === 'close') {
170
+ const shouldReconnect =
171
+ lastDisconnect?.error?.output?.statusCode !== DisconnectReason.loggedOut
172
+ if (shouldReconnect) startBot()
173
+ }
174
+ if (connection === 'open') console.log('Terhubung!')
175
+ })
176
+
177
+ sock.ev.on('messages.upsert', async ({ messages }) => {
178
+ const msg = messages[0]
179
+ if (!msg?.message || msg.key.fromMe) return
180
+
181
+ const text =
182
+ msg.message.conversation || msg.message.extendedTextMessage?.text || ''
183
+
184
+ if (text === '.ping') {
185
+ await sock.sendMessage(msg.key.remoteJid, { text: 'Pong!' })
186
+ }
187
+ })
188
+ }
189
+
190
+ startBot()
191
+ ```
192
+
193
+ ### 4. Jalankan
194
+
195
+ ```bash
196
+ node index.js
197
+ ```
198
+
199
+ Scan QR code, tunggu hingga socket mencapai `connection: "open"`, lalu kirim `.ping` untuk tes.
200
+
201
+ ### 5. Contoh Pairing Code
202
+
203
+ ```js
204
+ const sock = makeWASocket({
205
+ auth: state,
206
+ logger,
207
+ browser: Browsers.windows('Chrome'),
208
+ })
209
+
210
+ sock.ev.on('connection.update', async ({ connection }) => {
211
+ if (connection === 'connecting') {
212
+ const code = await sock.requestPairingCode('628xxxxxxxxx')
213
+ console.log('Pairing code:', code)
214
+ }
215
+ })
216
+ ```
217
+
218
+ ---
219
+
220
+ ## 📡 Referensi API Socket
221
+
222
+ ### Koneksi & Autentikasi
223
+
224
+ ```js
225
+ const sock = makeWASocket({
226
+ auth: state,
227
+ logger,
228
+ browser: Browsers.ubuntu('Chrome'),
229
+ connectTimeoutMs: 20_000,
230
+ defaultQueryTimeoutMs: 60_000,
231
+ syncFullHistory: false,
232
+ })
233
+ ```
234
+
235
+ ### Kirim Pesan
236
+
237
+ ```js
238
+ // Teks
239
+ await sock.sendMessage(jid, { text: 'Halo!' })
240
+
241
+ // Gambar
242
+ await sock.sendMessage(jid, {
243
+ image: { url: './foto.jpg' },
244
+ caption: 'Sebuah foto',
245
+ })
246
+
247
+ // Video
248
+ await sock.sendMessage(jid, {
249
+ video: { url: './video.mp4' },
250
+ caption: 'Sebuah video',
251
+ })
252
+
253
+ // Audio / Voice Note
254
+ await sock.sendMessage(jid, {
255
+ audio: { url: './audio.ogg' },
256
+ mimetype: 'audio/ogg; codecs=opus',
257
+ ptt: true,
258
+ })
259
+
260
+ // Stiker
261
+ await sock.sendMessage(jid, {
262
+ sticker: { url: './stiker.webp' },
263
+ })
264
+
265
+ // Dokumen
266
+ await sock.sendMessage(jid, {
267
+ document: { url: './file.pdf' },
268
+ fileName: 'dokumen.pdf',
269
+ mimetype: 'application/pdf',
270
+ })
271
+
272
+ // Reaksi
273
+ await sock.sendMessage(jid, {
274
+ react: { key: msg.key, text: '👍' },
275
+ })
276
+
277
+ // Polling
278
+ await sock.sendMessage(jid, {
279
+ poll: {
280
+ name: 'Vote!',
281
+ values: ['Opsi A', 'Opsi B', 'Opsi C'],
282
+ selectableCount: 1,
283
+ },
284
+ })
285
+
286
+ // Hapus pesan
287
+ await sock.sendMessage(jid, { delete: msg.key })
288
+
289
+ // Edit pesan
290
+ await sock.sendMessage(jid, {
291
+ text: 'Teks yang sudah diedit',
292
+ edit: msg.key,
293
+ })
294
+ ```
295
+
296
+ ### Pesan Interaktif
297
+
298
+ ```js
299
+ // Tombol Flow
300
+ await sock.sendMessage(jid, {
301
+ interactiveMessage: {
302
+ title: 'Selamat Datang!',
303
+ footer: 'Powered by Void',
304
+ buttons: [
305
+ {
306
+ name: 'quick_reply',
307
+ buttonParamsJson: JSON.stringify({
308
+ display_text: 'Menu',
309
+ id: 'menu',
310
+ }),
311
+ },
312
+ {
313
+ name: 'cta_url',
314
+ buttonParamsJson: JSON.stringify({
315
+ display_text: 'Website',
316
+ url: 'https://example.com',
317
+ }),
318
+ },
319
+ ],
320
+ header: 'Pilih opsi',
321
+ },
322
+ })
323
+
324
+ // List Menu
325
+ await sock.sendMessage(jid, {
326
+ interactiveMessage: {
327
+ title: 'Pilih Kategori',
328
+ footer: 'Powered by Void',
329
+ buttons: [
330
+ {
331
+ name: 'single_select',
332
+ buttonParamsJson: JSON.stringify({
333
+ title: 'Menu',
334
+ sections: [
335
+ {
336
+ title: 'Game',
337
+ rows: [
338
+ { title: 'Kuis', id: '.kuis' },
339
+ { title: 'Tebak Gambar', id: '.tebakgambar' },
340
+ ],
341
+ },
342
+ ],
343
+ }),
344
+ },
345
+ ],
346
+ header: 'Menu Bot',
347
+ },
348
+ })
349
+ ```
350
+
351
+ ### Album Messages
352
+
353
+ ```js
354
+ await sock.sendMessage(jid, {
355
+ albumMessage: [
356
+ { image: { url: './foto1.jpg' }, caption: 'Pertama' },
357
+ { image: { url: './foto2.jpg' }, caption: 'Kedua' },
358
+ { video: { url: './klip.mp4' }, caption: 'Video' },
359
+ ],
360
+ })
361
+ ```
362
+
363
+ ### AI Rich Response
364
+
365
+ ```js
366
+ // Tabel
367
+ await sock.sendTable(
368
+ jid,
369
+ 'Java vs JavaScript',
370
+ ['Fitur', 'Java', 'JavaScript'],
371
+ [
372
+ ['Tipe', 'Compiled', 'Interpreted'],
373
+ ['Typing', 'Static', 'Dynamic'],
374
+ ['Kegunaan', 'Enterprise', 'Web, Full-stack'],
375
+ ],
376
+ quoted,
377
+ { headerText: 'Perbandingan:', footer: 'Semoga membantu!' }
378
+ )
379
+
380
+ // List
381
+ await sock.sendList(
382
+ jid,
383
+ 'Info Bot',
384
+ [
385
+ ['Nama', 'Void AI'],
386
+ ['Versi', '7.0.0'],
387
+ ['Developer', 'gara31'],
388
+ ],
389
+ quoted,
390
+ { footer: '© Void AI' }
391
+ )
392
+
393
+ // Code Block
394
+ await sock.sendCodeBlock(
395
+ jid,
396
+ `const salam = "Halo Dunia"
397
+ function kataSalam(nama) {
398
+ return salam + " " + nama
399
+ }
400
+ kataSalam("Void")`,
401
+ quoted,
402
+ {
403
+ language: 'javascript',
404
+ title: 'Contoh Kode',
405
+ footer: 'Powered by Void',
406
+ }
407
+ )
408
+ ```
409
+
410
+ ### Metode Newsletter
411
+
412
+ ```js
413
+ await sock.newsletterFollow('id@newsletter')
414
+ await sock.newsletterUnfollow('id@newsletter')
415
+ await sock.newsletterMute('id@newsletter')
416
+ await sock.newsletterUnmute('id@newsletter')
417
+ await sock.newsletterCreate('Saluran Saya', 'Deskripsi')
418
+ await sock.newsletterUpdate('id@newsletter', { name: 'Nama Baru' })
419
+ const { subscribers } = await sock.newsletterSubscribers('id@newsletter')
420
+ await sock.newsletterMultipleFollow('id1@newsletter id2@newsletter')
421
+ ```
422
+
423
+ ### Metode Grup
424
+
425
+ ```js
426
+ const meta = await sock.groupMetadata('id@g.us')
427
+ const grup = await sock.groupCreate('Grup Baru', ['628xxx@s.whatsapp.net'])
428
+ await sock.groupLeave('id@g.us')
429
+ await sock.groupUpdateSubject('id@g.us', 'Nama Baru')
430
+ await sock.groupUpdateDescription('id@g.us', 'Deskripsi Baru')
431
+ await sock.groupParticipantsUpdate('id@g.us', ['628xxx@s.whatsapp.net'], 'add')
432
+ const kode = await sock.groupInviteCode('id@g.us')
433
+ await sock.groupRevokeInvite('id@g.us')
434
+ await sock.groupSettingUpdate('id@g.us', 'announcement')
435
+ ```
436
+
437
+ ### Metode Komunitas
438
+
439
+ ```js
440
+ const komunitas = await sock.communityCreate('Komunitas Kami', 'Deskripsi')
441
+ await sock.communityLinkGroup('groupid@g.us', 'communityid@g.us')
442
+ await sock.communityUnlinkGroup('groupid@g.us', 'communityid@g.us')
443
+ await sock.communityLeave('communityid@g.us')
444
+ ```
445
+
446
+ ### Pengaturan Privasi
447
+
448
+ ```js
449
+ await sock.updateLastSeenPrivacy('all') // 'all' | 'contacts' | 'nobody'
450
+ await sock.updateOnlinePrivacy('all')
451
+ await sock.updateProfilePicturePrivacy('contacts')
452
+ await sock.updateStatusPrivacy('contacts')
453
+ await sock.updateReadReceiptsPrivacy('all') // 'all' | 'none'
454
+ await sock.updateGroupsAddPrivacy('all')
455
+ await sock.updateCallPrivacy('everyone')
456
+ ```
457
+
458
+ ---
459
+
460
+ ## 📡 Referensi Event
461
+
462
+ ```js
463
+ sock.ev.on('connection.update', ({ connection, lastDisconnect, qr }) => {})
464
+ sock.ev.on('creds.update', (update) => {})
465
+ sock.ev.on('messages.upsert', ({ messages, type }) => {})
466
+ sock.ev.on('messages.update', (updates) => {})
467
+ sock.ev.on('messages.delete', (keys) => {})
468
+ sock.ev.on('messages.reaction', (reactions) => {})
469
+ sock.ev.on('groups.update', (updates) => {})
470
+ sock.ev.on('group-participants.update', (update) => {})
471
+ sock.ev.on('contacts.upsert', (contacts) => {})
472
+ sock.ev.on('contacts.update', (updates) => {})
473
+ sock.ev.on('chats.upsert', (chats) => {})
474
+ sock.ev.on('chats.update', (updates) => {})
475
+ sock.ev.on('call', (calls) => {})
476
+ sock.ev.on('newsletter.update', (updates) => {})
477
+ sock.ev.on('settings.update', (settings) => {})
478
+ ```
479
+
480
+ ---
481
+
482
+ ## 🔧 Utilitas
483
+
484
+ ```js
485
+ import {
486
+ // Auth
487
+ useMultiFileAuthState,
488
+ makeCacheableSignalKeyStore,
489
+ initAuthCreds,
490
+ BufferJSON,
491
+ fetchLatestBaileysVersion,
492
+
493
+ // JID
494
+ jidEncode,
495
+ jidDecode,
496
+ jidNormalizedUser,
497
+ areJidsSameUser,
498
+ isJidGroup,
499
+ isJidNewsletter,
500
+ isJidBroadcast,
501
+
502
+ // Koneksi
503
+ DisconnectReason,
504
+ Browsers,
505
+ } from '@gara31/void-baileys'
506
+ ```
507
+
508
+ ---
509
+
510
+ ## 📄 Lisensi
511
+
512
+ MIT © [gara31](https://github.com/gara31)
513
+
514
+ > **Peringatan:** Library ini untuk keperluan edukasi. Pastikan penggunaannya sesuai dengan Syarat Layanan WhatsApp.
515
+
516
+ ---
517
+
518
+ <div align="center">
519
+
520
+ **Dibuat dengan 💚 oleh gara31**
521
+
522
+ </div>