@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.
- package/README.MD +541 -124
- package/package.json +2 -3
package/README.MD
CHANGED
|
@@ -1,121 +1,154 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
<!-- HEADER
|
|
3
|
+
<!-- HEADER UTAMA -->
|
|
4
4
|
<h1>
|
|
5
|
-
<img src="https://img.shields.io/badge/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
|
-
|
|
12
|
-
|
|
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/
|
|
19
|
-
<img src="https://img.shields.io/github/license/johannes2803/
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
<a href="#-
|
|
27
|
-
<a href="#-
|
|
28
|
-
|
|
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
|
-
##
|
|
38
|
+
## 💎 KEUNGGULAN INTI
|
|
35
39
|
|
|
36
|
-
|
|
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
|
-
**
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
-
##
|
|
53
|
+
## ⚡ INSTALASI
|
|
47
54
|
|
|
48
|
-
|
|
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
|
-
###
|
|
71
|
+
### Import Code
|
|
72
|
+
|
|
57
73
|
```javascript
|
|
58
74
|
const { default: makeWASocket } = require("@shinryoku/baileys");
|
|
59
|
-
// ES6
|
|
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
|
-
|
|
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
|
|
74
|
-
const { state, saveCreds } = await useMultiFileAuthState('
|
|
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: ['
|
|
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
|
|
100
|
+
if(connection === 'close') {
|
|
85
101
|
const shouldReconnect = (lastDisconnect?.error instanceof Boom)?.output?.statusCode !== DisconnectReason.loggedOut
|
|
86
|
-
console.log('
|
|
87
|
-
if
|
|
88
|
-
|
|
102
|
+
console.log('Koneksi tertutup karena ', lastDisconnect.error, ', reconnecting ', shouldReconnect)
|
|
103
|
+
if(shouldReconnect) {
|
|
104
|
+
connectToWhatsApp()
|
|
89
105
|
}
|
|
90
|
-
} else if
|
|
91
|
-
console.log('✅
|
|
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
|
-
|
|
127
|
+
connectToWhatsApp()
|
|
99
128
|
```
|
|
100
129
|
|
|
101
130
|
---
|
|
102
131
|
|
|
103
|
-
##
|
|
132
|
+
## 📚 DOKUMENTASI LENGKAP
|
|
133
|
+
|
|
134
|
+
Berikut adalah panduan teknis mendalam untuk memanfaatkan semua fitur library.
|
|
135
|
+
|
|
136
|
+
### 🔌 METODE KONEKSI
|
|
104
137
|
|
|
105
|
-
|
|
106
|
-
|
|
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("
|
|
145
|
+
browser: Browsers.ubuntu("Marin Bot"),
|
|
113
146
|
printQRInTerminal: true,
|
|
114
147
|
});
|
|
115
148
|
```
|
|
116
149
|
|
|
117
|
-
|
|
118
|
-
Cara
|
|
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
|
-
|
|
162
|
+
// GANTI NOMOR INI DENGAN NOMOR WA KAMU
|
|
163
|
+
const number = "628xxxxxxxxxx";
|
|
129
164
|
const code = await sock.requestPairingCode(number);
|
|
130
|
-
console.log("Pairing
|
|
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
|
-
|
|
183
|
+
### ⚙️ KONFIGURASI PENTING
|
|
137
184
|
|
|
138
|
-
|
|
139
|
-
|
|
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:
|
|
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
|
-
|
|
158
|
-
Menyimpan riwayat pesan.
|
|
204
|
+
#### Data Store (Menyimpan Pesan di Memori/File)
|
|
159
205
|
|
|
160
206
|
```javascript
|
|
161
|
-
const
|
|
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("./
|
|
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
|
-
|
|
224
|
+
### 📤 PANDUAN PENGIRIMAN PESAN
|
|
177
225
|
|
|
178
|
-
|
|
226
|
+
#### Pesan Teks & Kutipan
|
|
179
227
|
```javascript
|
|
180
228
|
// Teks Biasa
|
|
181
|
-
await sock.sendMessage(jid, { text: "
|
|
229
|
+
await sock.sendMessage(jid, { text: "halo dunia" });
|
|
182
230
|
|
|
183
|
-
// Reply
|
|
184
|
-
await sock.sendMessage(jid, { text: "
|
|
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: "
|
|
189
|
-
mentions: ["
|
|
236
|
+
text: "@62857xxxxxxxxx hai",
|
|
237
|
+
mentions: ["62857xxxxxxxxx@s.whatsapp.net"],
|
|
190
238
|
});
|
|
191
239
|
```
|
|
192
240
|
|
|
193
|
-
|
|
241
|
+
#### Teruskan Pesan (Forward)
|
|
194
242
|
```javascript
|
|
195
|
-
//
|
|
196
|
-
await sock.sendMessage(jid, {
|
|
197
|
-
|
|
198
|
-
|
|
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
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
342
|
+
#### View Once (Sekali Lihat)
|
|
343
|
+
Pesan ini akan hilang setelah dilihat penerima. Bisa untuk gambar, video, atau audio.
|
|
344
|
+
|
|
222
345
|
```javascript
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
233
|
-
|
|
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
|
-
|
|
244
|
-
|
|
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
|
-
|
|
247
|
-
|
|
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
|
-
|
|
595
|
+
#### Update Info Grup
|
|
596
|
+
```javascript
|
|
597
|
+
// Ganti Nama
|
|
250
598
|
await sock.groupUpdateSubject(jid, "Nama Baru");
|
|
251
|
-
|
|
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, "
|
|
605
|
+
await sock.groupSettingUpdate(jid, "not_announcement"); // Semua orang
|
|
606
|
+
```
|
|
256
607
|
|
|
257
|
-
|
|
608
|
+
#### Kode Undangan
|
|
609
|
+
```javascript
|
|
610
|
+
// Ambil Kode
|
|
258
611
|
const code = await sock.groupInviteCode(jid);
|
|
259
|
-
|
|
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
|
-
##
|
|
650
|
+
## 🔒 PRIVASI & BLOCK
|
|
265
651
|
|
|
266
|
-
|
|
652
|
+
#### Blokir / Unblock
|
|
267
653
|
```javascript
|
|
268
|
-
|
|
269
|
-
await sock.sendMessage(jid, { delete: msg.key });
|
|
654
|
+
await sock.updateBlockStatus(jid, "block"); // or 'unblock'
|
|
270
655
|
```
|
|
271
656
|
|
|
272
|
-
|
|
657
|
+
#### Pengaturan Privasi
|
|
273
658
|
```javascript
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
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
|
-
##
|
|
673
|
+
## 📢 BROADCAST & STATUS
|
|
283
674
|
|
|
675
|
+
#### Kirim Status / Story
|
|
284
676
|
```javascript
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
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
|
-
##
|
|
687
|
+
## 💡 TIPS & PRAKTEK TERBAIK
|
|
298
688
|
|
|
299
|
-
|
|
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
|
-
|
|
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
|
-
## 📄
|
|
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
|
-
|
|
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
|
-
<
|
|
317
|
-
|
|
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.
|
|
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": "
|
|
17
|
+
"author": "johannes",
|
|
19
18
|
"main": "lib/index.js",
|
|
20
19
|
"types": "lib/index.d.ts",
|
|
21
20
|
"files": [
|