@pontasockets/baileys 0.1.6
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/LICENSE +21 -0
- package/README.MD +555 -0
- package/WAProto/GenerateStatics.sh +4 -0
- package/WAProto/WAProto.proto +4775 -0
- package/WAProto/index.js +169661 -0
- package/WAProto/p.html +1 -0
- package/engine-requirements.js +10 -0
- package/lib/Defaults/index.js +120 -0
- package/lib/Defaults/pontasockets-version.json +3 -0
- package/lib/Signal/Group/ciphertext-message.js +15 -0
- package/lib/Signal/Group/group-session-builder.js +64 -0
- package/lib/Signal/Group/group_cipher.js +96 -0
- package/lib/Signal/Group/index.js +57 -0
- package/lib/Signal/Group/keyhelper.js +55 -0
- package/lib/Signal/Group/queue-job.js +57 -0
- package/lib/Signal/Group/sender-chain-key.js +34 -0
- package/lib/Signal/Group/sender-key-distribution-message.js +66 -0
- package/lib/Signal/Group/sender-key-message.js +69 -0
- package/lib/Signal/Group/sender-key-name.js +51 -0
- package/lib/Signal/Group/sender-key-record.js +53 -0
- package/lib/Signal/Group/sender-key-state.js +99 -0
- package/lib/Signal/Group/sender-message-key.js +29 -0
- package/lib/Signal/libsignal.js +174 -0
- package/lib/Socket/Client/index.js +18 -0
- package/lib/Socket/Client/types.js +13 -0
- package/lib/Socket/Client/websocket.js +72 -0
- package/lib/Socket/business.js +260 -0
- package/lib/Socket/chats.js +997 -0
- package/lib/Socket/groups.js +332 -0
- package/lib/Socket/index.js +10 -0
- package/lib/Socket/messages-recv.js +1106 -0
- package/lib/Socket/messages-send.js +890 -0
- package/lib/Socket/newsletter.js +250 -0
- package/lib/Socket/socket.js +646 -0
- package/lib/Socket/usync.js +70 -0
- package/lib/Store/index.js +8 -0
- package/lib/Store/make-in-memory-store.js +439 -0
- package/lib/Store/make-ordered-dictionary.js +81 -0
- package/lib/Store/object-repository.js +27 -0
- package/lib/Types/Auth.js +2 -0
- package/lib/Types/Call.js +2 -0
- package/lib/Types/Chat.js +4 -0
- package/lib/Types/Contact.js +2 -0
- package/lib/Types/Events.js +2 -0
- package/lib/Types/GroupMetadata.js +2 -0
- package/lib/Types/Label.js +27 -0
- package/lib/Types/LabelAssociation.js +9 -0
- package/lib/Types/Message.js +7 -0
- package/lib/Types/Newsletter.js +18 -0
- package/lib/Types/Product.js +2 -0
- package/lib/Types/Signal.js +2 -0
- package/lib/Types/Socket.js +2 -0
- package/lib/Types/State.js +2 -0
- package/lib/Types/USync.js +2 -0
- package/lib/Types/index.js +42 -0
- package/lib/Utils/auth-utils.js +199 -0
- package/lib/Utils/browser-utils.js +35 -0
- package/lib/Utils/business.js +234 -0
- package/lib/Utils/chat-utils.js +730 -0
- package/lib/Utils/crypto.js +193 -0
- package/lib/Utils/decode-wa-message.js +217 -0
- package/lib/Utils/event-buffer.js +518 -0
- package/lib/Utils/generics.js +467 -0
- package/lib/Utils/history.js +94 -0
- package/lib/Utils/index.js +35 -0
- package/lib/Utils/link-preview.js +126 -0
- package/lib/Utils/logger.js +7 -0
- package/lib/Utils/lt-hash.js +51 -0
- package/lib/Utils/make-mutex.js +43 -0
- package/lib/Utils/message-retry-manager.js +128 -0
- package/lib/Utils/messages-media.js +879 -0
- package/lib/Utils/messages.js +1067 -0
- package/lib/Utils/noise-handler.js +150 -0
- package/lib/Utils/pontasockets-event-stream.js +63 -0
- package/lib/Utils/process-message.js +404 -0
- package/lib/Utils/signal.js +153 -0
- package/lib/Utils/use-multi-file-auth-state.js +125 -0
- package/lib/Utils/validate-connection.js +229 -0
- package/lib/WABinary/constants.js +1303 -0
- package/lib/WABinary/decode.js +265 -0
- package/lib/WABinary/encode.js +250 -0
- package/lib/WABinary/generic-utils.js +110 -0
- package/lib/WABinary/index.js +21 -0
- package/lib/WABinary/jid-utils.js +85 -0
- package/lib/WABinary/types.js +2 -0
- package/lib/WAM/BinaryInfo.js +13 -0
- package/lib/WAM/constants.js +15350 -0
- package/lib/WAM/encode.js +155 -0
- package/lib/WAM/index.js +19 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +32 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +57 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +30 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +42 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +53 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +24 -0
- package/lib/WAUSync/Protocols/index.js +20 -0
- package/lib/WAUSync/USyncQuery.js +89 -0
- package/lib/WAUSync/USyncUser.js +26 -0
- package/lib/WAUSync/index.js +19 -0
- package/lib/index.js +62 -0
- package/package.json +115 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 pontasockets
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.MD
ADDED
|
@@ -0,0 +1,555 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
██████╗ ██████╗ ███╗ ██╗████████╗ █████╗
|
|
5
|
+
██╔══██╗██╔═══██╗████╗ ██║╚══██╔══╝██╔══██╗
|
|
6
|
+
██████╔╝██║ ██║██╔██╗ ██║ ██║ ███████║
|
|
7
|
+
██╔═══╝ ██║ ██║██║╚██╗██║ ██║ ██╔══██║
|
|
8
|
+
██║ ╚██████╔╝██║ ╚████║ ██║ ██║ ██║
|
|
9
|
+
╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝
|
|
10
|
+
███████╗ ██████╗ ██████╗██╗ ██╗███████╗████████╗███████╗
|
|
11
|
+
██╔════╝██╔═══██╗██╔════╝██║ ██╔╝██╔════╝╚══██╔══╝██╔════╝
|
|
12
|
+
███████╗██║ ██║██║ █████╔╝ █████╗ ██║ ███████╗
|
|
13
|
+
╚════██║██║ ██║██║ ██╔═██╗ ██╔══╝ ██║ ╚════██║
|
|
14
|
+
███████║╚██████╔╝╚██████╗██║ ██╗███████╗ ██║ ███████║
|
|
15
|
+
╚══════╝ ╚═════╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═╝ ╚══════╝
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### `@pontasockets/baileys`
|
|
19
|
+
**WhatsApp Web API — Fork dengan Full Button, Rich Response & LID Fix**
|
|
20
|
+
|
|
21
|
+
[](https://www.npmjs.com/package/@pontasockets/baileys)
|
|
22
|
+
[](https://www.npmjs.com/package/@pontasockets/baileys)
|
|
23
|
+
[](LICENSE)
|
|
24
|
+
[](https://nodejs.org)
|
|
25
|
+
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 📦 Instalasi
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npm i @pontasockets/baileys
|
|
34
|
+
# atau
|
|
35
|
+
yarn add @pontasockets/baileys
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
```javascript
|
|
39
|
+
const { default: makeWASocket } = require('@pontasockets/baileys')
|
|
40
|
+
// ES Module
|
|
41
|
+
import makeWASocket from '@pontasockets/baileys'
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## ✨ Fitur Tambahan vs Baileys Resmi
|
|
47
|
+
|
|
48
|
+
| Fitur | Baileys Resmi | @pontasockets/baileys |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| Native Flow Buttons | ❌ | ✅ |
|
|
51
|
+
| Interactive Message | ❌ | ✅ |
|
|
52
|
+
| List Message | ❌ | ✅ |
|
|
53
|
+
| Template Message | ❌ | ✅ |
|
|
54
|
+
| Carousel Message | ❌ | ✅ |
|
|
55
|
+
| **Rich Response Message** | ❌ | ✅ |
|
|
56
|
+
| LID → JID Resolution | ❌ | ✅ |
|
|
57
|
+
| Bot JID Map (Meta AI) | ❌ | ✅ |
|
|
58
|
+
| `getBotJid()` Utility | ❌ | ✅ |
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## ⚠️ Disclaimer
|
|
63
|
+
|
|
64
|
+
Proyek ini tidak berafiliasi, tidak diotorisasi, dan tidak terhubung secara resmi dengan WhatsApp atau Meta. Gunakan dengan bijak dan bertanggung jawab. Hindari spam dan otomatisasi berlebihan.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 🚀 Quick Start
|
|
69
|
+
|
|
70
|
+
```javascript
|
|
71
|
+
const { default: makeWASocket, DisconnectReason, useMultiFileAuthState } = require('@pontasockets/baileys')
|
|
72
|
+
const { Boom } = require('@hapi/boom')
|
|
73
|
+
|
|
74
|
+
async function connect() {
|
|
75
|
+
const { state, saveCreds } = await useMultiFileAuthState('auth_info')
|
|
76
|
+
|
|
77
|
+
const sock = makeWASocket({
|
|
78
|
+
auth: state,
|
|
79
|
+
printQRInTerminal: true,
|
|
80
|
+
browser: ['PontaSockets', 'Desktop', '3.0']
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
sock.ev.on('connection.update', ({ connection, lastDisconnect }) => {
|
|
84
|
+
if (connection === 'close') {
|
|
85
|
+
const shouldReconnect = (lastDisconnect?.error as Boom)?.output?.statusCode !== DisconnectReason.loggedOut
|
|
86
|
+
if (shouldReconnect) connect()
|
|
87
|
+
} else if (connection === 'open') {
|
|
88
|
+
console.log('✅ Terhubung!')
|
|
89
|
+
}
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
sock.ev.on('creds.update', saveCreds)
|
|
93
|
+
return sock
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
connect()
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## 🔌 Koneksi
|
|
102
|
+
|
|
103
|
+
### QR Code
|
|
104
|
+
|
|
105
|
+
```javascript
|
|
106
|
+
const { default: makeWASocket, Browsers } = require('@pontasockets/baileys')
|
|
107
|
+
|
|
108
|
+
const sock = makeWASocket({
|
|
109
|
+
browser: Browsers.ubuntu('MyBot'),
|
|
110
|
+
printQRInTerminal: true
|
|
111
|
+
})
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Pairing Code
|
|
115
|
+
|
|
116
|
+
```javascript
|
|
117
|
+
const sock = makeWASocket({ printQRInTerminal: false })
|
|
118
|
+
|
|
119
|
+
if (!sock.authState.creds.registered) {
|
|
120
|
+
const code = await sock.requestPairingCode('628xxxxxxxxxx')
|
|
121
|
+
console.log('Kode:', code)
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Pairing Code Custom
|
|
126
|
+
|
|
127
|
+
```javascript
|
|
128
|
+
const code = await sock.requestPairingCode('628xxxxxxxxxx', 'MYKODE12') // 8 karakter
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 💾 Auth State
|
|
134
|
+
|
|
135
|
+
```javascript
|
|
136
|
+
const { useMultiFileAuthState } = require('@pontasockets/baileys')
|
|
137
|
+
|
|
138
|
+
const { state, saveCreds } = await useMultiFileAuthState('session')
|
|
139
|
+
const sock = makeWASocket({ auth: state })
|
|
140
|
+
sock.ev.on('creds.update', saveCreds)
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## 📤 Kirim Pesan
|
|
146
|
+
|
|
147
|
+
### Teks
|
|
148
|
+
|
|
149
|
+
```javascript
|
|
150
|
+
await sock.sendMessage(jid, { text: 'Halo dunia!' })
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Quote
|
|
154
|
+
|
|
155
|
+
```javascript
|
|
156
|
+
await sock.sendMessage(jid, { text: 'Ini reply' }, { quoted: message })
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Mention
|
|
160
|
+
|
|
161
|
+
```javascript
|
|
162
|
+
await sock.sendMessage(jid, {
|
|
163
|
+
text: '@628xxxxxxxxxx halo!',
|
|
164
|
+
mentions: ['628xxxxxxxxxx@s.whatsapp.net']
|
|
165
|
+
})
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Gambar
|
|
169
|
+
|
|
170
|
+
```javascript
|
|
171
|
+
await sock.sendMessage(jid, {
|
|
172
|
+
image: { url: './foto.jpg' },
|
|
173
|
+
caption: 'Halo!'
|
|
174
|
+
})
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Video
|
|
178
|
+
|
|
179
|
+
```javascript
|
|
180
|
+
await sock.sendMessage(jid, {
|
|
181
|
+
video: { url: './video.mp4' },
|
|
182
|
+
caption: 'Video keren'
|
|
183
|
+
})
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Audio / PTT
|
|
187
|
+
|
|
188
|
+
```javascript
|
|
189
|
+
await sock.sendMessage(jid, {
|
|
190
|
+
audio: { url: './audio.ogg' },
|
|
191
|
+
mimetype: 'audio/ogg; codecs=opus',
|
|
192
|
+
ptt: true
|
|
193
|
+
})
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Dokumen
|
|
197
|
+
|
|
198
|
+
```javascript
|
|
199
|
+
await sock.sendMessage(jid, {
|
|
200
|
+
document: { url: './file.pdf' },
|
|
201
|
+
mimetype: 'application/pdf',
|
|
202
|
+
fileName: 'dokumen.pdf'
|
|
203
|
+
})
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### Stiker
|
|
207
|
+
|
|
208
|
+
```javascript
|
|
209
|
+
await sock.sendMessage(jid, {
|
|
210
|
+
sticker: { url: './stiker.webp' }
|
|
211
|
+
})
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Lokasi
|
|
215
|
+
|
|
216
|
+
```javascript
|
|
217
|
+
await sock.sendMessage(jid, {
|
|
218
|
+
location: { degreesLatitude: -6.2, degreesLongitude: 106.8 }
|
|
219
|
+
})
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### Kontak
|
|
223
|
+
|
|
224
|
+
```javascript
|
|
225
|
+
const vcard = `BEGIN:VCARD\nVERSION:3.0\nFN:Nama Kontak\nTEL;waid=628xxxxxxxxxx:+62 8xx xxxx xxxx\nEND:VCARD`
|
|
226
|
+
await sock.sendMessage(jid, { contacts: { displayName: 'Nama', contacts: [{ vcard }] } })
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Reaksi
|
|
230
|
+
|
|
231
|
+
```javascript
|
|
232
|
+
await sock.sendMessage(jid, { react: { text: '🔥', key: message.key } })
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Poll
|
|
236
|
+
|
|
237
|
+
```javascript
|
|
238
|
+
await sock.sendMessage(jid, {
|
|
239
|
+
poll: {
|
|
240
|
+
name: 'Pilihan favoritmu?',
|
|
241
|
+
values: ['Opsi A', 'Opsi B', 'Opsi C'],
|
|
242
|
+
selectableCount: 1
|
|
243
|
+
}
|
|
244
|
+
})
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### View Once
|
|
248
|
+
|
|
249
|
+
```javascript
|
|
250
|
+
await sock.sendMessage(jid, {
|
|
251
|
+
image: { url: './foto.jpg' },
|
|
252
|
+
viewOnce: true,
|
|
253
|
+
caption: 'Lihat sekali saja'
|
|
254
|
+
})
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## 🤖 Fitur Eksklusif
|
|
260
|
+
|
|
261
|
+
### Native Flow Buttons
|
|
262
|
+
|
|
263
|
+
```javascript
|
|
264
|
+
await sock.sendMessage(jid, {
|
|
265
|
+
text: 'Pilih menu:',
|
|
266
|
+
buttons: [
|
|
267
|
+
{ buttonId: 'btn1', buttonText: { displayText: 'Menu 1' }, type: 1 },
|
|
268
|
+
{ buttonId: 'btn2', buttonText: { displayText: 'Menu 2' }, type: 1 }
|
|
269
|
+
]
|
|
270
|
+
})
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Interactive Message (CTA URL, Quick Reply, Single Select)
|
|
274
|
+
|
|
275
|
+
```javascript
|
|
276
|
+
await sock.sendMessage(jid, {
|
|
277
|
+
interactive: {
|
|
278
|
+
type: 'native_flow',
|
|
279
|
+
header: { title: 'PontaSockets Bot', hasMediaAttachment: false },
|
|
280
|
+
body: { text: 'Pilih salah satu:' },
|
|
281
|
+
footer: { text: '@pontasockets/baileys' },
|
|
282
|
+
nativeFlowMessage: {
|
|
283
|
+
buttons: [
|
|
284
|
+
{
|
|
285
|
+
name: 'quick_reply',
|
|
286
|
+
buttonParamsJson: JSON.stringify({ display_text: 'Info', id: 'info' })
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
name: 'cta_url',
|
|
290
|
+
buttonParamsJson: JSON.stringify({
|
|
291
|
+
display_text: 'NPM',
|
|
292
|
+
url: 'https://npmjs.com/package/@pontasockets/baileys',
|
|
293
|
+
merchant_url: 'https://npmjs.com'
|
|
294
|
+
})
|
|
295
|
+
}
|
|
296
|
+
]
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
})
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### List Message
|
|
303
|
+
|
|
304
|
+
```javascript
|
|
305
|
+
await sock.sendMessage(jid, {
|
|
306
|
+
listMessage: {
|
|
307
|
+
title: 'Daftar Menu',
|
|
308
|
+
description: 'Pilih salah satu menu',
|
|
309
|
+
buttonText: 'Buka Menu',
|
|
310
|
+
listType: 1,
|
|
311
|
+
sections: [
|
|
312
|
+
{
|
|
313
|
+
title: 'Kategori 1',
|
|
314
|
+
rows: [
|
|
315
|
+
{ title: 'Item A', description: 'Deskripsi A', rowId: 'item_a' },
|
|
316
|
+
{ title: 'Item B', description: 'Deskripsi B', rowId: 'item_b' }
|
|
317
|
+
]
|
|
318
|
+
}
|
|
319
|
+
]
|
|
320
|
+
}
|
|
321
|
+
})
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
### Carousel Message
|
|
325
|
+
|
|
326
|
+
```javascript
|
|
327
|
+
await sock.sendMessage(jid, {
|
|
328
|
+
carousel: {
|
|
329
|
+
cards: [
|
|
330
|
+
{
|
|
331
|
+
header: { imageMessage: { url: './card1.jpg' } },
|
|
332
|
+
body: { text: 'Kartu 1' },
|
|
333
|
+
buttons: [{ name: 'quick_reply', buttonParamsJson: JSON.stringify({ display_text: 'Pilih', id: 'card1' }) }]
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
header: { imageMessage: { url: './card2.jpg' } },
|
|
337
|
+
body: { text: 'Kartu 2' },
|
|
338
|
+
buttons: [{ name: 'quick_reply', buttonParamsJson: JSON.stringify({ display_text: 'Pilih', id: 'card2' }) }]
|
|
339
|
+
}
|
|
340
|
+
]
|
|
341
|
+
}
|
|
342
|
+
})
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Rich Response Message (AI-style)
|
|
346
|
+
|
|
347
|
+
Pesan bergaya AI Meta dengan format rich content. Stanza otomatis dikirim dengan `type: 'bot'` dan node `biz_bot`.
|
|
348
|
+
|
|
349
|
+
```javascript
|
|
350
|
+
await sock.sendMessage(jid, {
|
|
351
|
+
richResponse: {
|
|
352
|
+
messageType: 1, // 0 = UNKNOWN, 1 = STANDARD
|
|
353
|
+
submessages: [
|
|
354
|
+
{
|
|
355
|
+
messageType: 2, // AI_RICH_RESPONSE_TEXT
|
|
356
|
+
messageText: 'Ini adalah jawaban AI dalam format rich response.'
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
messageType: 5, // AI_RICH_RESPONSE_CODE
|
|
360
|
+
codeMetadata: {
|
|
361
|
+
codeLanguage: 'javascript',
|
|
362
|
+
codeBlocks: [{ code: 'console.log("Hello from PontaSockets!")' }]
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
]
|
|
366
|
+
}
|
|
367
|
+
})
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
**Sub-message type enum:**
|
|
371
|
+
|
|
372
|
+
| Value | Tipe |
|
|
373
|
+
|---|---|
|
|
374
|
+
| 0 | UNKNOWN |
|
|
375
|
+
| 1 | GRID_IMAGE |
|
|
376
|
+
| 2 | TEXT |
|
|
377
|
+
| 3 | INLINE_IMAGE |
|
|
378
|
+
| 4 | TABLE |
|
|
379
|
+
| 5 | CODE |
|
|
380
|
+
| 6 | DYNAMIC |
|
|
381
|
+
| 7 | MAP |
|
|
382
|
+
| 8 | LATEX |
|
|
383
|
+
| 9 | CONTENT_ITEMS |
|
|
384
|
+
|
|
385
|
+
### Bot JID / Meta AI
|
|
386
|
+
|
|
387
|
+
```javascript
|
|
388
|
+
const { getBotJid, META_AI_JID } = require('@pontasockets/baileys')
|
|
389
|
+
|
|
390
|
+
// Resolve bot JID dari persona ID
|
|
391
|
+
const jid = getBotJid('294997126699143@bot') // → '13135550023@s.whatsapp.net'
|
|
392
|
+
|
|
393
|
+
// Meta AI default JID
|
|
394
|
+
console.log(META_AI_JID) // 13135550002@c.us
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
### LID → JID Resolution
|
|
398
|
+
|
|
399
|
+
```javascript
|
|
400
|
+
const { lidToJid } = require('@pontasockets/baileys')
|
|
401
|
+
|
|
402
|
+
const jid = lidToJid('628xxxxxxxxxx@lid') // → '628xxxxxxxxxx@s.whatsapp.net'
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
---
|
|
406
|
+
|
|
407
|
+
## ✏️ Operasi Pesan
|
|
408
|
+
|
|
409
|
+
### Hapus Pesan
|
|
410
|
+
|
|
411
|
+
```javascript
|
|
412
|
+
const msg = await sock.sendMessage(jid, { text: 'test' })
|
|
413
|
+
await sock.sendMessage(jid, { delete: msg.key })
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
### Edit Pesan
|
|
417
|
+
|
|
418
|
+
```javascript
|
|
419
|
+
await sock.sendMessage(jid, {
|
|
420
|
+
text: 'Teks yang sudah diedit',
|
|
421
|
+
edit: message.key
|
|
422
|
+
})
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
### Download Media
|
|
426
|
+
|
|
427
|
+
```javascript
|
|
428
|
+
const { downloadMediaMessage } = require('@pontasockets/baileys')
|
|
429
|
+
|
|
430
|
+
const buffer = await downloadMediaMessage(message, 'buffer', {}, {
|
|
431
|
+
logger,
|
|
432
|
+
reuploadRequest: sock.updateMediaMessage
|
|
433
|
+
})
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
---
|
|
437
|
+
|
|
438
|
+
## 👥 Grup
|
|
439
|
+
|
|
440
|
+
```javascript
|
|
441
|
+
// Buat grup
|
|
442
|
+
const group = await sock.groupCreate('Nama Grup', ['628xxx@s.whatsapp.net'])
|
|
443
|
+
|
|
444
|
+
// Tambah / hapus / promote / demote
|
|
445
|
+
await sock.groupParticipantsUpdate(jid, ['628xxx@s.whatsapp.net'], 'add')
|
|
446
|
+
|
|
447
|
+
// Metadata
|
|
448
|
+
const meta = await sock.groupMetadata(jid)
|
|
449
|
+
|
|
450
|
+
// Kode undangan
|
|
451
|
+
const code = await sock.groupInviteCode(jid)
|
|
452
|
+
// Link: https://chat.whatsapp.com/ + code
|
|
453
|
+
|
|
454
|
+
// Keluar
|
|
455
|
+
await sock.groupLeave(jid)
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
---
|
|
459
|
+
|
|
460
|
+
## 🔒 Privasi
|
|
461
|
+
|
|
462
|
+
```javascript
|
|
463
|
+
await sock.updateBlockStatus(jid, 'block') // blokir
|
|
464
|
+
await sock.updateBlockStatus(jid, 'unblock') // buka blokir
|
|
465
|
+
await sock.updateLastSeenPrivacy('contacts')
|
|
466
|
+
await sock.updateOnlinePrivacy('all')
|
|
467
|
+
await sock.updateProfilePicturePrivacy('contacts')
|
|
468
|
+
await sock.updateReadReceiptsPrivacy('all')
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
---
|
|
472
|
+
|
|
473
|
+
## 🗄️ In-Memory Store
|
|
474
|
+
|
|
475
|
+
```javascript
|
|
476
|
+
const { makeInMemoryStore } = require('@pontasockets/baileys')
|
|
477
|
+
|
|
478
|
+
const store = makeInMemoryStore({})
|
|
479
|
+
store.readFromFile('./pontasockets_store.json')
|
|
480
|
+
setInterval(() => store.writeToFile('./pontasockets_store.json'), 10_000)
|
|
481
|
+
|
|
482
|
+
store.bind(sock.ev)
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
---
|
|
486
|
+
|
|
487
|
+
## ⚙️ Konfigurasi Socket
|
|
488
|
+
|
|
489
|
+
```javascript
|
|
490
|
+
const NodeCache = require('node-cache')
|
|
491
|
+
const groupCache = new NodeCache({ stdTTL: 300, useClones: false })
|
|
492
|
+
|
|
493
|
+
const sock = makeWASocket({
|
|
494
|
+
auth: state,
|
|
495
|
+
printQRInTerminal: true,
|
|
496
|
+
browser: ['PontaSockets', 'Desktop', '3.0'],
|
|
497
|
+
markOnlineOnConnect: false, // terima notifikasi push
|
|
498
|
+
syncFullHistory: false,
|
|
499
|
+
cachedGroupMetadata: async (jid) => groupCache.get(jid),
|
|
500
|
+
getMessage: async (key) => store.loadMessage(key.remoteJid, key.id)
|
|
501
|
+
})
|
|
502
|
+
|
|
503
|
+
sock.ev.on('groups.update', async ([e]) => {
|
|
504
|
+
groupCache.set(e.id, await sock.groupMetadata(e.id))
|
|
505
|
+
})
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
---
|
|
509
|
+
|
|
510
|
+
## 📋 ID WhatsApp (JID)
|
|
511
|
+
|
|
512
|
+
| Tipe | Format |
|
|
513
|
+
|---|---|
|
|
514
|
+
| User | `628xxxxxxxxxx@s.whatsapp.net` |
|
|
515
|
+
| Grup | `120363xxxxxxxxx@g.us` |
|
|
516
|
+
| Newsletter | `120363xxxxxxxxx@newsletter` |
|
|
517
|
+
| Broadcast | `xxxxxxxxxx@broadcast` |
|
|
518
|
+
| Story | `status@broadcast` |
|
|
519
|
+
| Bot/Meta AI | `13135550xxx@s.whatsapp.net` |
|
|
520
|
+
|
|
521
|
+
---
|
|
522
|
+
|
|
523
|
+
## 🛠️ Utilitas
|
|
524
|
+
|
|
525
|
+
```javascript
|
|
526
|
+
const {
|
|
527
|
+
getContentType,
|
|
528
|
+
getDevice,
|
|
529
|
+
makeCacheableSignalKeyStore,
|
|
530
|
+
downloadContentFromMessage,
|
|
531
|
+
getBotJid,
|
|
532
|
+
lidToJid,
|
|
533
|
+
isJidGroup,
|
|
534
|
+
isJidNewsletter,
|
|
535
|
+
isJidMetaAi,
|
|
536
|
+
isJidBot,
|
|
537
|
+
META_AI_JID
|
|
538
|
+
} = require('@pontasockets/baileys')
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
---
|
|
542
|
+
|
|
543
|
+
## 📄 Lisensi
|
|
544
|
+
|
|
545
|
+
MIT License — bebas digunakan dan dimodifikasi.
|
|
546
|
+
|
|
547
|
+
---
|
|
548
|
+
|
|
549
|
+
<div align="center">
|
|
550
|
+
|
|
551
|
+
**@pontasockets/baileys**
|
|
552
|
+
Fork dari Baileys dengan tambahan fitur button, interactive, rich response & LID fix
|
|
553
|
+
by **PontaSockets**
|
|
554
|
+
|
|
555
|
+
</div>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
yarn pbjs -t static-module -w commonjs -o ./WAProto/index.js ./WAProto/WAProto.proto;
|
|
2
|
+
yarn pbts -o ./WAProto/index.d.ts ./WAProto/index.js;
|
|
3
|
+
|
|
4
|
+
#protoc --plugin=./node_modules/.bin/protoc-gen-ts_proto --ts_proto_opt=env=node,useOptionals=true,forceLong=long --ts_proto_out=. ./src/Binary/WAMessage.proto;
|