@shinryoku/baileys 0.0.2 → 0.0.3

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 (2) hide show
  1. package/README.MD +541 -124
  2. package/package.json +2 -3
package/README.MD CHANGED
@@ -1,121 +1,154 @@
1
1
  <div align="center">
2
2
 
3
- <!-- HEADER PROFESIONAL -->
3
+ <!-- HEADER UTAMA -->
4
4
  <h1>
5
- <img src="https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white" alt="TypeScript">
5
+ <img src="https://img.shields.io/badge/Powered%20By-TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white" alt="TypeScript">
6
6
  <br>
7
+ <span style="font-size: 4em;">🤖</span><br>
7
8
  <b>@shinryoku/baileys</b>
8
9
  </h1>
9
10
 
10
11
  <p>
11
- WhatsApp Web API library yang stabil, ringan, dan mudah digunakan.<br>
12
- Dibangun di atas Baileys dengan perbaikan bug dan optimasi performa.
12
+ <i>Bukan sekadar Fork. Ini adalah Evolusi Stabilitas.</i><br>
13
+ WhatsApp Web API Modern yang diperbaiki, dioptimalkan, dan didesain untuk performa bot tingkat tinggi.
13
14
  </p>
14
15
 
15
16
  <!-- BADGES -->
16
17
  <p>
17
18
  <img src="https://img.shields.io/npm/v/@shinryoku/baileys?style=flat-square" alt="NPM Version">
18
- <img src="https://img.shields.io/npm/dm/@shinryoku/baileys?style=flat-square" alt="Downloads">
19
- <img src="https://img.shields.io/github/license/johannes2803/shinryoku-baileys?style=flat-square" alt="License">
19
+ <img src="https://img.shields.io/npm/dt/@shinryoku/baileys?style=flat-square" alt="Downloads">
20
+ <img src="https://img.shields.io/github/license/johannes2803/marinkitagawa-baileys?style=flat-square" alt="License">
21
+ <img src="https://img.shields.io/node/v/@shinryoku/baileys?style=flat-square" alt="Node Version">
20
22
  </p>
21
23
 
22
24
  <hr>
23
25
 
24
- <sub>
25
- <a href="#-instalasi">Install</a> •
26
- <a href="#-fitur">Fitur</a> •
27
- <a href="#-dokumentasi">Dokumentasi</a>
28
- </sub>
26
+ <!-- TOMBOL CTA -->
27
+ <b>
28
+ <a href="#-instalasi">📥 Install</a> •
29
+ <a href="#-mulai-cepat">🚀 Quick Start</a>
30
+ <a href="#-dokumentasi-lengkap">📚 Docs</a>
31
+ <a href="#-dukungan">💰 Donate</a>
32
+ </b>
29
33
 
30
34
  </div>
31
35
 
32
36
  ---
33
37
 
34
- ## 📋 Tentang @shinryoku/baileys
38
+ ## 💎 KEUNGGULAN INTI
35
39
 
36
- Library ini merupakan modifikasi dari Baileys asli yang difokuskan untuk meningkatkan stabilitas koneksi dan memperbaiki error umum yang sering ditemui dalam pengembangan bot WhatsApp, terutama pada penanganan grup.
40
+ Dikembangkan bukan untuk menyaingi, melainkan untuk melengkapi. Berikut adalah patch dan fitur unggulan yang tertanam langsung di dalam core engine ini:
37
41
 
38
- **Poin Utama:**
39
- * ✅ **Perbaikan Core:** Patch untuk error konversi ID (`@lid` ke `@pn`) pada grup besar.
40
- * ✅ **TypeScript Support:** Full TypeScript support untuk pengalaman coding yang lebih baik.
41
- * ✅ **Ringan & Cepat:** Tidak ada bloatware, hanya logika inti yang dibutuhkan.
42
- * ✅ **Dokumentasi Lengkap:** Panduan implementasi yang jelas dan mudah diikuti.
42
+ - 🛡️ **Core Stability Patch**
43
+ Perbaikan mendalam pada logika konversi ID (`@lid` ke `@pn`) yang sering menjadi penyebab bot crash atau error metadata di grup besar. Kami memperbaikinya di level protokol.
44
+
45
+ - 🎨 **Custom Identity System**
46
+ Tampilan console yang unik dengan banner "ByJOHANNES", memberikan identitas visual yang membedakan bot Anda dari yang lain saat startup.
47
+
48
+ - ⚡ **Optimized Connection Flow**
49
+ Penanganan *reconnection* yang lebih cerdas dan efisien, meminimalkan downtime saat koneksi internet tidak stabil.
43
50
 
44
51
  ---
45
52
 
46
- ## 📦 INSTALASI
53
+ ## INSTALASI
47
54
 
48
- Instalasi mudah via NPM atau Yarn.
55
+ Jangan buang waktu. Install dan langsung gas.
56
+
57
+ ### Versi Stabil (Rekomendasi)
49
58
 
50
59
  ```bash
51
60
  npm i @shinryoku/baileys
61
+ ```
62
+
63
+ ### Versi Terbaru (Edge)
64
+
65
+ ```bash
66
+ npm i @shinryoku/baileys@latest
52
67
  # atau
53
- yarn add @shinryoku/baileys
68
+ yarn add @shinryoku/baileys@latest
54
69
  ```
55
70
 
56
- ### Cara Import
71
+ ### Import Code
72
+
57
73
  ```javascript
58
74
  const { default: makeWASocket } = require("@shinryoku/baileys");
59
- // ES6 Import
75
+ // atau ES6 Modules
60
76
  import makeWASocket from "@shinryoku/baileys";
61
77
  ```
62
78
 
63
79
  ---
64
80
 
65
- ## 🚀 MULAI CEPAT
81
+ ## 🚀 MULAI CEPAT (QUICK START)
66
82
 
67
- Berikut adalah contoh dasar untuk membuat koneksi bot dengan fitur auto-reconnect.
83
+ Contoh implementasi dasar untuk membuat bot yang auto-reconnect.
68
84
 
69
85
  ```javascript
70
86
  const { default: makeWASocket, DisconnectReason, useMultiFileAuthState } = require('@shinryoku/baileys')
71
87
  const { Boom } = require('@hapi/boom')
72
88
 
73
- async function startBot() {
74
- const { state, saveCreds } = await useMultiFileAuthState('session_folder')
75
-
89
+ async function connectToWhatsApp() {
90
+ const { state, saveCreds } = await useMultiFileAuthState('auth_info_baileys')
91
+
76
92
  const sock = makeWASocket({
77
93
  auth: state,
78
94
  printQRInTerminal: true,
79
- browser: ['Shinryoku Bot', 'Chrome', '1.0.0']
95
+ browser: ['Marin Kitagawa Bot', 'Chrome', '1.0.0']
80
96
  })
81
97
 
82
98
  sock.ev.on('connection.update', (update) => {
83
99
  const { connection, lastDisconnect } = update
84
- if (connection === 'close') {
100
+ if(connection === 'close') {
85
101
  const shouldReconnect = (lastDisconnect?.error instanceof Boom)?.output?.statusCode !== DisconnectReason.loggedOut
86
- console.log('Connection closed. Reconnecting...', shouldReconnect)
87
- if (shouldReconnect) {
88
- startBot()
102
+ console.log('Koneksi tertutup karena ', lastDisconnect.error, ', reconnecting ', shouldReconnect)
103
+ if(shouldReconnect) {
104
+ connectToWhatsApp()
89
105
  }
90
- } else if (connection === 'open') {
91
- console.log('✅ Connected to WhatsApp')
106
+ } else if(connection === 'open') {
107
+ console.log('✅ Berhasil terhubung ke WhatsApp!')
108
+ }
109
+ })
110
+
111
+ sock.ev.on('messages.upsert', async ({ messages }) => {
112
+ for (const m of messages) {
113
+ if (!m.message) continue
114
+
115
+ console.log('📩 Pesan masuk:', JSON.stringify(m, undefined, 2))
116
+
117
+ // Contoh Auto Reply
118
+ await sock.sendMessage(m.key.remoteJid, {
119
+ text: 'Halo! Saya bot powered by @shinryoku/baileys 🚀'
120
+ })
92
121
  }
93
122
  })
94
123
 
95
124
  sock.ev.on('creds.update', saveCreds)
96
125
  }
97
126
 
98
- startBot()
127
+ connectToWhatsApp()
99
128
  ```
100
129
 
101
130
  ---
102
131
 
103
- ## 🔌 METODE KONEKSI
132
+ ## 📚 DOKUMENTASI LENGKAP
133
+
134
+ Berikut adalah panduan teknis mendalam untuk memanfaatkan semua fitur library.
135
+
136
+ ### 🔌 METODE KONEKSI
104
137
 
105
- ### 1. QR Code
106
- Standar untuk bot di server/VPS.
138
+ #### 1. Koneksi via QR Code
139
+ Metode standar untuk bot desktop/server.
107
140
 
108
141
  ```javascript
109
142
  const { default: makeWASocket, Browsers } = require("@shinryoku/baileys");
110
143
 
111
144
  const sock = makeWASocket({
112
- browser: Browsers.ubuntu("Server"),
145
+ browser: Browsers.ubuntu("Marin Bot"),
113
146
  printQRInTerminal: true,
114
147
  });
115
148
  ```
116
149
 
117
- ### 2. Pairing Code (Tanpa QR)
118
- Cara alternatif login tanpa perlu scan.
150
+ #### 2. Koneksi via Pairing Code (Tanpa QR)
151
+ Cara modern yang lebih cepat.
119
152
 
120
153
  ```javascript
121
154
  const { default: makeWASocket } = require("@shinryoku/baileys");
@@ -124,25 +157,39 @@ const sock = makeWASocket({
124
157
  printQRInTerminal: false,
125
158
  });
126
159
 
160
+ // Pairing Normal
127
161
  if (!sock.authState.creds.registered) {
128
- const number = "628xxxxxxxxxx";
162
+ // GANTI NOMOR INI DENGAN NOMOR WA KAMU
163
+ const number = "628xxxxxxxxxx";
129
164
  const code = await sock.requestPairingCode(number);
130
- console.log("Pairing Code:", code);
165
+ console.log("🔑 Kode Pairing:", code);
131
166
  }
132
167
  ```
133
168
 
169
+ #### 3. Terima Riwayat Lengkap (Full History)
170
+ Untuk sinkronisasi chat seperti di desktop asli.
171
+
172
+ ```javascript
173
+ const { default: makeWASocket, Browsers } = require("@shinryoku/baileys");
174
+
175
+ const sock = makeWASocket({
176
+ browser: Browsers.macOS("Desktop"),
177
+ syncFullHistory: true,
178
+ });
179
+ ```
180
+
134
181
  ---
135
182
 
136
- ## ⚙️ KONFIGURASI
183
+ ### ⚙️ KONFIGURASI PENTING
137
184
 
138
- ### Caching Metadata Grup (Disarankan)
139
- Mengurangi request ke server WhatsApp agar bot lebih ringan.
185
+ #### Caching Metadata Grup (Wajib untuk Bot Grup)
186
+ Mencegah spam request ke server dan mempercepat respon.
140
187
 
141
188
  ```javascript
142
189
  const { default: makeWASocket } = require("@shinryoku/baileys");
143
190
  const NodeCache = require("node-cache");
144
191
 
145
- const groupCache = new NodeCache({ stdTTL: 300, useClones: false });
192
+ const groupCache = new NodeCache({ stdTTL: 5 * 60, useClones: false });
146
193
 
147
194
  const sock = makeWASocket({
148
195
  cachedGroupMetadata: async (jid) => groupCache.get(jid),
@@ -154,165 +201,535 @@ sock.ev.on("groups.update", async ([event]) => {
154
201
  });
155
202
  ```
156
203
 
157
- ### Store (Penyimpanan Pesan)
158
- Menyimpan riwayat pesan.
204
+ #### Data Store (Menyimpan Pesan di Memori/File)
159
205
 
160
206
  ```javascript
161
- const { default: makeWASocket, makeInMemoryStore } = require("@shinryoku/baileys");
207
+ const makeWASocket = require("@shinryoku/baileys").default;
208
+ const { makeInMemoryStore } = require("@shinryoku/baileys");
162
209
 
163
210
  const store = makeInMemoryStore({ });
164
- store.readFromFile("./store.json");
165
211
 
212
+ // Simpan ke file JSON setiap 10 detik
213
+ store.readFromFile("./marin_store.json");
166
214
  setInterval(() => {
167
- store.writeToFile("./store.json");
215
+ store.writeToFile("./marin_store.json");
168
216
  }, 10_000);
169
217
 
170
- const sock = makeWASocket({ });
218
+ const sock = makeWASocket({});
171
219
  store.bind(sock.ev);
172
220
  ```
173
221
 
174
222
  ---
175
223
 
176
- ## 📤 PENGIRIMAN PESAN
224
+ ### 📤 PANDUAN PENGIRIMAN PESAN
177
225
 
178
- ### Teks & Kutipan
226
+ #### Pesan Teks & Kutipan
179
227
  ```javascript
180
228
  // Teks Biasa
181
- await sock.sendMessage(jid, { text: "Halo" });
229
+ await sock.sendMessage(jid, { text: "halo dunia" });
182
230
 
183
- // Reply / Kutip
184
- await sock.sendMessage(jid, { text: "Balas pesan" }, { quoted: m });
231
+ // Kutip/Reply Pesan
232
+ await sock.sendMessage(jid, { text: "halo dunia" }, { quoted: message });
185
233
 
186
- // Mention
234
+ // Mention Seseorang
187
235
  await sock.sendMessage(jid, {
188
- text: "Halo @user",
189
- mentions: ["628xxx@s.whatsapp.net"],
236
+ text: "@62857xxxxxxxxx hai",
237
+ mentions: ["62857xxxxxxxxx@s.whatsapp.net"],
190
238
  });
191
239
  ```
192
240
 
193
- ### Media (Gambar/Video/GIF/Audio)
241
+ #### Teruskan Pesan (Forward)
194
242
  ```javascript
195
- // Gambar
196
- await sock.sendMessage(jid, {
197
- image: { url: "./img.jpg" },
198
- caption: "Gambar"
243
+ const msg = getMessageFromStore(); // ambil objek pesan
244
+ await sock.sendMessage(jid, { forward: msg });
245
+ ```
246
+
247
+ #### Kirim Lokasi
248
+ ```javascript
249
+ await sock.sendMessage(jid, {
250
+ location: {
251
+ degreesLatitude: 24.121231,
252
+ degreesLongitude: 55.1121221,
253
+ },
199
254
  });
255
+ ```
200
256
 
201
- // Video
202
- await sock.sendMessage(jid, {
203
- video: { url: "./vid.mp4" },
204
- caption: "Video"
257
+ #### Kirim Kontak (VCard)
258
+ ```javascript
259
+ const vcard =
260
+ "BEGIN:VCARD\n" +
261
+ "VERSION:3.0\n" +
262
+ "FN:Marin Kitagawa\n" +
263
+ "ORG:Waifu Club;\n" +
264
+ "TEL;type=CELL;type=VOICE;waid=62857xxxxxxxxx:+62 857-xxxx-xxxx\n" +
265
+ "END:VCARD";
266
+
267
+ await sock.sendMessage(id, {
268
+ contacts: {
269
+ displayName: "Marin",
270
+ contacts: [{ vcard }],
271
+ },
205
272
  });
273
+ ```
206
274
 
207
- // GIF
275
+ #### Reaksi & Pin
276
+ ```javascript
277
+ // Reaksi Emoji
278
+ await sock.sendMessage(jid, {
279
+ react: { text: "💖", key: message.key },
280
+ });
281
+
282
+ // Pin Pesan (24 Jam)
208
283
  await sock.sendMessage(jid, {
209
- video: fs.readFileSync("vid.mp4"),
284
+ pin: {
285
+ type: 1, // 0 untuk unpin
286
+ time: 86400,
287
+ key: message.key,
288
+ },
289
+ });
290
+ ```
291
+
292
+ #### Polling (Jajak Pendapat)
293
+ ```javascript
294
+ await sock.sendMessage(jid, {
295
+ poll: {
296
+ name: 'Siapa Waifu Terbaik?',
297
+ values: ['Marin Kitagawa', 'Rem', 'Mikasa'],
298
+ selectableCount: 1
299
+ }
300
+ })
301
+ ```
302
+
303
+ ---
304
+
305
+ ### 📸 PANDUAN MEDIA (GAMBAR/VIDEO/AUDIO)
306
+
307
+ Library ini didesain hemat memori. Gunakan stream atau URL langsung.
308
+
309
+ #### Kirim Gambar
310
+ ```javascript
311
+ await sock.sendMessage(id, {
312
+ image: { url: "./Media/gambar.png" },
313
+ caption: "Ini gambar keren",
314
+ });
315
+ ```
316
+
317
+ #### Kirim Video / GIF
318
+ ```javascript
319
+ // Video
320
+ await sock.sendMessage(id, {
321
+ video: { url: "./Media/video.mp4" },
322
+ caption: "Nonton yuk",
323
+ gifPlayback: false,
324
+ });
325
+
326
+ // Seolah-olah GIF (padahal mp4)
327
+ await sock.sendMessage(id, {
328
+ video: fs.readFileSync("Media/gif.mp4"),
329
+ caption: "GIF kocak",
210
330
  gifPlayback: true,
211
- caption: "GIF"
212
331
  });
332
+ ```
213
333
 
214
- // Audio
334
+ #### Kirim Audio
335
+ ```javascript
215
336
  await sock.sendMessage(jid, {
216
- audio: { url: "./audio.mp3" },
217
- mimetype: "audio/mp4",
337
+ audio: { url: "./Media/audio.mp3" },
338
+ mimetype: "audio/mp4", // atau audio/mpeg
218
339
  });
219
340
  ```
220
341
 
221
- ### Lainnya
342
+ #### View Once (Sekali Lihat)
343
+ Pesan ini akan hilang setelah dilihat penerima. Bisa untuk gambar, video, atau audio.
344
+
222
345
  ```javascript
223
- // Kontak
224
- const vcard = 'BEGIN:VCARD\nVERSION:3.0\nFN:Shinryoku\nTEL;type=CELL;waid=628xxx:+62 812\nEND:VCARD';
225
- await sock.sendMessage(jid, { contacts: { displayName: 'Shinryoku', contacts: [{ vcard }] }});
346
+ await sock.sendMessage(id, {
347
+ image: { url: "./Media/rahasia.jpg" },
348
+ viewOnce: true, // Kunci utamanya ada di sini
349
+ caption: "Jangan disebar ya!",
350
+ });
351
+ ```
226
352
 
227
- // Polling
353
+ #### Kirim dengan Pratinjau Tautan (Link Preview)
354
+ Secara default WA tidak generate preview dari web. @shinryoku/baileys memilikinya.
355
+
356
+ ```javascript
357
+ await sock.sendMessage(jid, {
358
+ text: "Kunjungi https://npmjs.com/package/@shinryoku/baileys",
359
+ });
360
+ ```
361
+
362
+ ---
363
+
364
+ ### ✏️ MANIPULASI PESAN (EDIT & HAPUS)
365
+
366
+ #### Hapus Pesan (Untuk Semua)
367
+ ```javascript
368
+ const msg = await sock.sendMessage(jid, { text: "pesan yang akan dihapus" });
369
+ await sock.sendMessage(jid, { delete: msg.key });
370
+ ```
371
+
372
+ #### Edit Pesan
373
+ Hanya mengedit konten yang bisa diedit (teks, caption, dll).
374
+
375
+ ```javascript
228
376
  await sock.sendMessage(jid, {
229
- poll: { name: 'Pilihan Anda', values: ['A', 'B'], selectableCount: 1 }
377
+ text: "teks yang sudah diperbarui v2.0",
378
+ edit: msg.key, // Key pesan yang mau diedit
230
379
  });
380
+ ```
381
+
382
+ ---
383
+
384
+ ### 🖼️ MANIPULASI MEDIA (DOWNLOAD & UPLOAD)
385
+
386
+ #### Download Media dari Pesan
387
+ Untuk menyimpan media yang diterima bot ke file.
388
+
389
+ ```javascript
390
+ const { downloadMediaMessage } = require("@shinryoku/baileys");
391
+ const fs = require("fs");
231
392
 
232
- // Reaksi
233
- await sock.sendMessage(jid, { react: { text: "👍", key: m.key }});
393
+ sock.ev.on("messages.upsert", async ({ messages: [m] }) => {
394
+ if (!m.message) return;
395
+
396
+ // Cek jika pesan adalah gambar
397
+ const messageType = getContentType(m);
398
+ if (messageType === "imageMessage") {
399
+ const stream = await downloadMediaMessage(
400
+ m,
401
+ "stream", // bisa juga 'buffer'
402
+ {},
403
+ {
404
+ logger: P(),
405
+ reuploadRequest: sock.updateMediaMessage,
406
+ },
407
+ );
408
+
409
+ const writeStream = fs.createWriteStream("./downloaded_image.jpeg");
410
+ stream.pipe(writeStream);
411
+ }
412
+ });
413
+ ```
414
+
415
+ #### Upload Ulang Media ke WhatsApp
416
+ WhatsApp sering menghapus media lama dari server mereka. Gunakan ini untuk refresh.
417
+
418
+ ```javascript
419
+ await sock.updateMediaMessage(msg);
420
+ ```
421
+
422
+ ---
423
+
424
+ ### 📞 MANAJEMEN PANGGILAN
425
+
426
+ #### Tolak Panggilan Otomatis
427
+ Ambil `callId` dan `callFrom` dari event `call`.
428
+
429
+ ```javascript
430
+ sock.ev.on('call', async ({ from, id }) => {
431
+ // Otomatis menolak panggilan masuk
432
+ await sock.rejectCall(id, from);
433
+ console.log(`Panggilan dari ${from} ditolak.`);
434
+ });
435
+ ```
436
+
437
+ ---
438
+
439
+ ### 💬 STATUS & KEHADIRAN (PRESENCE)
440
+
441
+ #### Tandai Pesan Dibaca
442
+ ```javascript
443
+ await sock.readMessages([key]); // Bisa multiple key
444
+ ```
445
+
446
+ #### Update Kehadiran (Sedang Mengetik/Online)
447
+ `presence` bisa: `available`, `composing`, `recording`, `paused`, `unavailable`.
448
+
449
+ ```javascript
450
+ // Memberitahu WA bahwa sedang mengetik
451
+ await sock.sendPresenceUpdate("composing", jid);
452
+
453
+ // Memberitahu WA sedang online/offline
454
+ await sock.sendPresenceUpdate("available", jid);
455
+ ```
456
+
457
+ ---
458
+
459
+ ### 📁 UBAH OBROLAN (CHAT MODIFY)
460
+
461
+ ⚠️ **Hati-hati**: Kesalahan update bisa menyebabkan logout di semua perangkat.
462
+
463
+ #### Arsipkan / Buka Arsip
464
+ ```javascript
465
+ // Arsipkan
466
+ await sock.chatModify({ archive: true, lastMessages: [lastMsg] }, jid);
467
+
468
+ // Buka arsip
469
+ await sock.chatModify({ archive: false, lastMessages: [lastMsg] }, jid);
470
+ ```
471
+
472
+ #### Bisukan / Buka Bisukan
473
+ Waktu dalam milidetik (null untuk hapus mute).
474
+
475
+ ```javascript
476
+ // Bisukan 8 jam
477
+ await sock.chatModify({ mute: 8 * 60 * 60 * 1000 }, jid);
478
+
479
+ // Buka bisukan
480
+ await sock.chatModify({ mute: null }, jid);
481
+ ```
482
+
483
+ #### Tandai Dibaca / Tidak Dibaca
484
+ ```javascript
485
+ // Tandai tidak dibaca (ada titik merah)
486
+ await sock.chatModify({ markRead: false, lastMessages: [lastMsg] }, jid);
487
+ ```
488
+
489
+ #### Hapus Chat (Untuk Saya)
490
+ ```javascript
491
+ await sock.chatModify(
492
+ {
493
+ delete: true,
494
+ lastMessages: [{ key: lastMsg.key, messageTimestamp: lastMsg.messageTimestamp }],
495
+ },
496
+ jid
497
+ );
498
+ ```
499
+
500
+ #### Pin / Hapus Pin Chat
501
+ ```javascript
502
+ // Pin Chat
503
+ await sock.chatModify({ pin: true }, jid);
504
+
505
+ // Hapus Pin
506
+ await sock.chatModify({ pin: false }, jid);
507
+ ```
508
+
509
+ #### Bintangi Pesan
510
+ ```javascript
511
+ await sock.chatModify(
512
+ {
513
+ star: {
514
+ messages: [{ id: "messageID", fromMe: true }],
515
+ star: true, // true: bintangi, false: hapus bintang
516
+ },
517
+ },
518
+ jid
519
+ );
520
+ ```
521
+
522
+ #### Pesan Menghilang (Ephemeral)
523
+ Gunakan detik. Default 7 hari (604800).
524
+
525
+ ```javascript
526
+ // Nyalakan pesan menghilang 24 jam
527
+ await sock.sendMessage(jid, { disappearingMessagesInChat: 86400 });
528
+
529
+ // Kirim pesan sebagai menghilang
530
+ await sock.sendMessage(jid, { text: "Rahasia" }, { ephemeralExpiration: 86400 });
531
+
532
+ // Matikan
533
+ await sock.sendMessage(jid, { disappearingMessagesInChat: false });
534
+ ```
535
+
536
+ ---
537
+
538
+ ## 👥 QUERY PENGGUNA & PROFIL
539
+
540
+ #### Cek Nomor Ada di WhatsApp
541
+ ```javascript
542
+ const [result] = await sock.onWhatsApp("62857xxxxxxxxx@s.whatsapp.net");
543
+ if (result.exists) console.log("Nomor terdaftar!");
544
+ ```
545
+
546
+ #### Ambil Status & Foto Profil
547
+ ```javascript
548
+ // Ambil Bio
549
+ const status = await sock.fetchStatus(jid);
550
+
551
+ // Ambil Foto Profil (Resolusi Rendah/Tinggi)
552
+ const ppUrl = await sock.profilePictureUrl(jid); // low res
553
+ const ppHD = await sock.profilePictureUrl(jid, "image"); // high res
554
+
555
+ // Ambil Profil Bisnis
556
+ const biz = await sock.getBusinessProfile(jid);
557
+ ```
558
+
559
+ #### Update Profil Sendiri
560
+ ```javascript
561
+ // Ganti Nama
562
+ await sock.updateProfileName("Nama Baru Bot");
563
+
564
+ // Ganti Bio
565
+ await sock.updateProfileStatus("Sedang menggunakan @shinryoku/baileys");
566
+
567
+ // Ganti Foto Profil
568
+ await sock.updateProfilePicture("628xxx@s.whatsapp.net", { url: "./new.jpg" });
569
+
570
+ // Hapus Foto Profil
571
+ await sock.removeProfilePicture("628xxx@s.whatsapp.net");
234
572
  ```
235
573
 
236
574
  ---
237
575
 
238
576
  ## 👥 MANAJEMEN GRUP
239
577
 
240
- Pastikan bot adalah admin.
578
+ *Pastikan bot adalah admin grup.*
241
579
 
580
+ #### Buat Grup
242
581
  ```javascript
243
- // Buat Grup
244
- const group = await sock.groupCreate("Nama Grup", ["628xxx@s.whatsapp.net"]);
582
+ const group = await sock.groupCreate("Grup Marin", ["6281@s.whatsapp.net", "6282@s.whatsapp.net"]);
583
+ console.log("Grup ID:", group.gid);
584
+ ```
245
585
 
246
- // Update Member
247
- await sock.groupParticipantsUpdate(jid, ["628xxx@s.whatsapp.net"], "add"); // add, remove, promote, demote
586
+ #### Update Member (Add/Remove/Promote/Demote)
587
+ ```javascript
588
+ await sock.groupParticipantsUpdate(
589
+ jid, // ID Grup
590
+ ["628xxx@s.whatsapp.net"], // Array target
591
+ "add" // opsi: 'add', 'remove', 'promote', 'demote'
592
+ );
593
+ ```
248
594
 
249
- // Update Info
595
+ #### Update Info Grup
596
+ ```javascript
597
+ // Ganti Nama
250
598
  await sock.groupUpdateSubject(jid, "Nama Baru");
251
- await sock.groupUpdateDescription(jid, "Deskripsi Baru");
599
+
600
+ // Ganti Deskripsi
601
+ await sock.groupUpdateDescription(jid, "Deskripsi baru");
252
602
 
253
603
  // Setting Grup
254
604
  await sock.groupSettingUpdate(jid, "announcement"); // Hanya admin
255
- await sock.groupSettingUpdate(jid, "locked"); // Kunci edit info
605
+ await sock.groupSettingUpdate(jid, "not_announcement"); // Semua orang
606
+ ```
256
607
 
257
- // Invite Code
608
+ #### Kode Undangan
609
+ ```javascript
610
+ // Ambil Kode
258
611
  const code = await sock.groupInviteCode(jid);
259
- console.log("Link:", "https://chat.whatsapp.com/" + code);
612
+
613
+ // Revoke (Reset) Kode
614
+ await sock.groupRevokeInvite(jid);
615
+
616
+ // Join pakai Kode
617
+ await sock.groupAcceptInvite("CODEINVITE");
618
+
619
+ // Join pakai Message
620
+ await sock.groupAcceptInviteV4(jid, groupInviteMessage);
621
+ ```
622
+
623
+ #### Metadata & Permintaan Gabung
624
+ ```javascript
625
+ // Ambil Info Grup Lengkap
626
+ const meta = await sock.groupMetadata(jid);
627
+
628
+ // Ambil semua metadata grup yang diikuti
629
+ const allGroups = await sock.groupFetchAllParticipating();
630
+
631
+ // Ambil list orang yang mau join
632
+ const requests = await sock.groupRequestParticipantsList(jid);
633
+
634
+ // Approve / Reject Request
635
+ await sock.groupRequestParticipantsUpdate(jid, ["628xxx@s.whatsapp.net"], "approve");
636
+ ```
637
+
638
+ #### Fitur Lain Grup
639
+ ```javascript
640
+ // Toggle Ephemeral (Pesan menghilang di grup)
641
+ await sock.groupToggleEphemeral(jid, 86400);
642
+
643
+ // Mode Tambah Member (Admin only / All)
644
+ await sock.groupMemberAddMode(jid, "admin_add");
645
+ await sock.groupMemberAddMode(jid, "all_member_add");
260
646
  ```
261
647
 
262
648
  ---
263
649
 
264
- ## ✏️ EDIT & HAPUS
650
+ ## 🔒 PRIVASI & BLOCK
265
651
 
266
- ### Hapus Pesan
652
+ #### Blokir / Unblock
267
653
  ```javascript
268
- const msg = await sock.sendMessage(jid, { text: "Hapus ini" });
269
- await sock.sendMessage(jid, { delete: msg.key });
654
+ await sock.updateBlockStatus(jid, "block"); // or 'unblock'
270
655
  ```
271
656
 
272
- ### Edit Pesan
657
+ #### Pengaturan Privasi
273
658
  ```javascript
274
- await sock.sendMessage(jid, {
275
- text: "Teks diperbarui",
276
- edit: msg.key,
277
- });
659
+ // Ambil semua setting
660
+ const settings = await sock.fetchPrivacySettings(true);
661
+
662
+ // Update setting
663
+ await sock.updateLastSeenPrivacy("all"); // all, contacts, none
664
+ await sock.updateOnlinePrivacy("all");
665
+ await sock.updateProfilePicturePrivacy("contacts");
666
+ await sock.updateStatusPrivacy("contacts");
667
+ await sock.updateReadReceiptsPrivacy("none");
668
+ await sock.updateGroupsAddPrivacy("contacts");
278
669
  ```
279
670
 
280
671
  ---
281
672
 
282
- ## 👤 PROFIL & PRIVASI
673
+ ## 📢 BROADCAST & STATUS
283
674
 
675
+ #### Kirim Status / Story
284
676
  ```javascript
285
- // Update Profil
286
- await sock.updateProfileName("Nama Bot");
287
- await sock.updateProfileStatus("Status Bot");
288
- await sock.updateProfilePicture(jid, { url: "./pp.jpg" });
289
-
290
- // Privasi
291
- await sock.updateBlockStatus(jid, "block"); // block / unblock
292
- await sock.updateProfilePicturePrivacy('all');
677
+ await sock.sendMessage("status@broadcast", {
678
+ image: { url: "./story.jpg" },
679
+ caption: "Halo status!",
680
+ statusJidList: ["628xxx@s.whatsapp.net"], // List penerima
681
+ broadcast: true,
682
+ });
293
683
  ```
294
684
 
295
685
  ---
296
686
 
297
- ## 💳 DUKUNGAN
687
+ ## 💡 TIPS & PRAKTEK TERBAIK
298
688
 
299
- Jika library ini membantu proyek Anda, dukungan Anda sangat dihargai.
689
+ 1. **Gunakan Database**: Jangan simpan `auth_info` di folder lokal jika di VPS. Gunakan MongoDB/Redis.
690
+ 2. **Hati-hati `chatModify`**: Salah sedikit konfigurasi bisa bikin akun ke-logout semua device.
691
+ 3. **Limit Rate**: Jangan spam kirim pesan dalam waktu singkat, WA akan memblokir nomor sementara.
692
+ 4. **Pairing Code**: Lebih aman dan cepat daripada QR Code untuk bot jangka panjang.
300
693
 
301
- ```
302
- https://cdn.yupra.my.id/yp/eocz6gnv.html
303
- ```
694
+ ---
695
+
696
+ ## 💳 DUKUNG PENGEMBANG
697
+
698
+ Proyek ini gratis dan open-source. Dukungan Anda sangat berarti untuk saya agar terus bisa mengembangkan fitur-fitur baru.
699
+
700
+ **Traktir saya kopi via Saweria:**
701
+
702
+ <a href="https://saweria.co/shinryoku" target="_blank">
703
+ <img src="https://img.shields.io/badge/Donate-Saweria-red?style=for-the-badge&logo=coffee" alt="Saweria">
704
+ </a>
705
+
706
+ ---
707
+
708
+ ## ⚠️ DISCLAIMER
709
+
710
+ Proyek ini tidak berafiliasi dengan WhatsApp Inc. atau Meta Platforms, Inc. Pengguna bertanggung jawab penuh atas penggunaan library ini. Gunakan dengan bijak, jangan untuk spam atau aktivitas ilegal.
304
711
 
305
712
  ---
306
713
 
307
- ## 📄 Lisensi
714
+ ## 📄 LISENSI
308
715
 
309
- Distributed under the GPL-3.0 License.
716
+ Distributed under the GPL-3.0 License. See `LICENSE` for more information.
310
717
 
311
718
  ---
312
719
 
313
720
  <div align="center">
314
- <b>Maintained by Johannes</b>
721
+
722
+ ## 💖 TERIMA KASIH TELAH MENGGUNAKAN @shinryoku/baileys
723
+
724
+ **Forked & Optimized by:**
725
+
726
+ ### [JOHANNES] & [MARIN KITAGAWA TEAM]
727
+
728
+ <small>Fixing the unfixable. Engine for the future.</small>
729
+
315
730
  <br>
316
- <small>Stable. Optimized. Ready to use.</small>
317
- </div>
318
- ```
731
+ <a href="https://github.com/johannes2803">
732
+ <img src="https://img.shields.io/badge/GitHub-Visit-100000?style=for-the-badge&logo=github" alt="GitHub">
733
+ </a>
734
+
735
+ </div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shinryoku/baileys",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "WhatsApp Web API Library",
5
5
  "keywords": [
6
6
  "marinkitagawa",
@@ -10,12 +10,11 @@
10
10
  "whatsapp-api",
11
11
  "whatsapp-web",
12
12
  "whatsapp-bot",
13
- "automation",
14
13
  "multi-device"
15
14
  ],
16
15
  "homepage": "https://github.com/johannes2803",
17
16
  "license": "MIT",
18
- "author": "shinryoku",
17
+ "author": "johannes",
19
18
  "main": "lib/index.js",
20
19
  "types": "lib/index.d.ts",
21
20
  "files": [