@kangwifi-pro/waliwa 1.1.13 → 1.1.14
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/dist/core/client-payload.d.ts +30 -0
- package/dist/core/client-payload.d.ts.map +1 -0
- package/dist/core/client-payload.js +203 -0
- package/dist/core/client-payload.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/socket/wa-socket.d.ts.map +1 -1
- package/dist/socket/wa-socket.js +3 -5
- package/dist/socket/wa-socket.js.map +1 -1
- package/dist/socket/ws-socket.d.ts +4 -1
- package/dist/socket/ws-socket.d.ts.map +1 -1
- package/dist/socket/ws-socket.js +21 -18
- package/dist/socket/ws-socket.js.map +1 -1
- package/package.json +16 -10
- package/proto/WAProto.proto +3344 -0
- package/docs/API.md +0 -745
- package/docs/ARCHITECTURE.md +0 -307
- package/docs/BAILEYS_FIXES.md +0 -360
- package/docs/COMMUNITY.md +0 -613
- package/docs/FEATURES.md +0 -532
- package/docs/PROTOCOL.md +0 -489
- package/docs/RECOVERY.md +0 -409
- package/docs/SKDM.md +0 -233
- package/examples/ai-bot/index.ts +0 -479
- package/examples/ai-bot/package.json +0 -17
- package/examples/echo-bot/index.ts +0 -171
- package/examples/echo-bot/package.json +0 -18
- package/examples/group-bot/index.ts +0 -557
- package/examples/group-bot/package.json +0 -17
- package/examples/rest-gateway/index.ts +0 -499
- package/examples/rest-gateway/package.json +0 -19
- package/src/advanced/features.ts +0 -817
- package/src/auth/auth-state.ts +0 -342
- package/src/auth/pairing-code.ts +0 -246
- package/src/auth/qr-code.ts +0 -191
- package/src/calls/handler.ts +0 -153
- package/src/community/audio-transcription.ts +0 -121
- package/src/community/bulk-operations.ts +0 -329
- package/src/community/community-fixes.ts +0 -771
- package/src/community/contacts-manager.ts +0 -282
- package/src/community/disappearing.ts +0 -218
- package/src/community/index.ts +0 -169
- package/src/community/live-location.ts +0 -287
- package/src/community/message-extras.ts +0 -523
- package/src/community/newsletter-extended.ts +0 -614
- package/src/community/privacy-manager.ts +0 -310
- package/src/community/profile-manager.ts +0 -402
- package/src/community/status-extended.ts +0 -518
- package/src/community/sticker-manager.ts +0 -305
- package/src/core/binary.ts +0 -464
- package/src/core/crypto.ts +0 -197
- package/src/core/noise.ts +0 -421
- package/src/events/emitter.ts +0 -88
- package/src/features/index.ts +0 -921
- package/src/fixes/index.ts +0 -882
- package/src/groups/management.ts +0 -497
- package/src/index.ts +0 -339
- package/src/messages/media.ts +0 -372
- package/src/messages/message-encoder.ts +0 -520
- package/src/messages/send.ts +0 -521
- package/src/recovery/index.ts +0 -704
- package/src/skdm/index.ts +0 -693
- package/src/socket/hybrid.ts +0 -414
- package/src/socket/wa-socket.ts +0 -1735
- package/src/socket/ws-socket.ts +0 -486
- package/src/types/index.ts +0 -457
- package/src/utils/jid.ts +0 -156
- package/src/utils/logger.ts +0 -84
- package/src/utils/retry.ts +0 -205
- package/tsconfig.json +0 -30
package/docs/COMMUNITY.md
DELETED
|
@@ -1,613 +0,0 @@
|
|
|
1
|
-
# Community Features & Fixes (v1.1.0)
|
|
2
|
-
|
|
3
|
-
Module `community/` berisi fitur-fitur yang sering diminta komunitas Baileys + fix untuk issue-issue yang dilaporkan.
|
|
4
|
-
|
|
5
|
-
## 📋 Daftar Lengkap
|
|
6
|
-
|
|
7
|
-
### Fitur Baru (10 managers)
|
|
8
|
-
|
|
9
|
-
#### 1. ProfileManager (`sock.profileManager`)
|
|
10
|
-
Update profile picture, about text, display name. Get profile info dengan caching.
|
|
11
|
-
|
|
12
|
-
**Fix issues:**
|
|
13
|
-
- Baileys: profile picture URL tidak bisa didapat
|
|
14
|
-
- Baileys: about text tidak bisa di-get
|
|
15
|
-
- Baileys: business account detection missing
|
|
16
|
-
|
|
17
|
-
```typescript
|
|
18
|
-
// Update profile picture
|
|
19
|
-
await sock.profileManager.updateProfilePicture(jid, imageBuffer);
|
|
20
|
-
|
|
21
|
-
// Update about text
|
|
22
|
-
await sock.profileManager.updateAbout("Hey there! I'm using Waliwa");
|
|
23
|
-
|
|
24
|
-
// Update display name
|
|
25
|
-
await sock.profileManager.updateName("My Name");
|
|
26
|
-
|
|
27
|
-
// Get profile info (cached)
|
|
28
|
-
const info = await sock.profileManager.getProfileInfo(jid);
|
|
29
|
-
console.log(info.name, info.about, info.profilePictureUrl, info.isBusiness);
|
|
30
|
-
|
|
31
|
-
// Download profile picture
|
|
32
|
-
await sock.profileManager.downloadProfilePicture(jid, './profile.jpg');
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
#### 2. PrivacyManager (`sock.privacyManager`)
|
|
36
|
-
Block/unblock users, privacy settings (last seen, profile photo, about, status, read receipts).
|
|
37
|
-
|
|
38
|
-
**Fix issues:**
|
|
39
|
-
- Baileys: block/unblock tidak ada
|
|
40
|
-
- Baileys: privacy settings tidak bisa diubah
|
|
41
|
-
|
|
42
|
-
```typescript
|
|
43
|
-
// Block/unblock
|
|
44
|
-
await sock.privacyManager.block('user@s.whatsapp.net');
|
|
45
|
-
await sock.privacyManager.unblock('user@s.whatsapp.net');
|
|
46
|
-
|
|
47
|
-
// Get blocklist
|
|
48
|
-
const blocked = await sock.privacyManager.getBlocklist();
|
|
49
|
-
|
|
50
|
-
// Set privacy settings
|
|
51
|
-
await sock.privacyManager.setLastSeenPrivacy('contacts'); // all | contacts | contact_blacklist | none
|
|
52
|
-
await sock.privacyManager.setProfilePhotoPrivacy('contacts');
|
|
53
|
-
await sock.privacyManager.setAboutPrivacy('contacts');
|
|
54
|
-
await sock.privacyManager.setStatusPrivacy('contacts');
|
|
55
|
-
await sock.privacyManager.setReadReceiptsPrivacy('none'); // Disable blue ticks
|
|
56
|
-
|
|
57
|
-
// Get current privacy
|
|
58
|
-
const privacy = await sock.privacyManager.getPrivacySettings();
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
#### 3. NewsletterManagerExtended (`sock.newsletterManager`)
|
|
62
|
-
Full newsletter support - create, post, mute, metadata, subscribers, verification.
|
|
63
|
-
|
|
64
|
-
**Fix issues:**
|
|
65
|
-
- Baileys: newsletter support sangat terbatas
|
|
66
|
-
- Baileys: newsletter mute tidak ada
|
|
67
|
-
- Baileys: subscriber count tidak bisa di-get
|
|
68
|
-
|
|
69
|
-
```typescript
|
|
70
|
-
// Create newsletter
|
|
71
|
-
const nl = await sock.newsletterManager.create('My Channel', 'Description');
|
|
72
|
-
|
|
73
|
-
// Subscribe/unsubscribe
|
|
74
|
-
await sock.newsletterManager.subscribe(nl.id);
|
|
75
|
-
await sock.newsletterManager.unsubscribe(nl.id);
|
|
76
|
-
|
|
77
|
-
// Mute/unmute
|
|
78
|
-
await sock.newsletterManager.mute(nl.id);
|
|
79
|
-
await sock.newsletterManager.unmute(nl.id);
|
|
80
|
-
|
|
81
|
-
// Get metadata (subscriber count, verification, dll)
|
|
82
|
-
const meta = await sock.newsletterManager.getMetadata(nl.id);
|
|
83
|
-
console.log(meta.subscribersCount, meta.verification, meta.isOwner);
|
|
84
|
-
|
|
85
|
-
// Post to newsletter
|
|
86
|
-
await sock.newsletterManager.postText(nl.id, 'Hello channel!');
|
|
87
|
-
await sock.newsletterManager.postMedia(nl.id, 'image', 'https://...', 'caption');
|
|
88
|
-
|
|
89
|
-
// React to post
|
|
90
|
-
await sock.newsletterManager.reactToPost(nl.id, postId, '👍');
|
|
91
|
-
|
|
92
|
-
// Get posts
|
|
93
|
-
const posts = await sock.newsletterManager.getPosts(nl.id, 20);
|
|
94
|
-
|
|
95
|
-
// Admin: mute user
|
|
96
|
-
await sock.newsletterManager.muteUser(nl.id, userJid, 3600000);
|
|
97
|
-
|
|
98
|
-
// Owner: transfer ownership
|
|
99
|
-
await sock.newsletterManager.transferOwnership(nl.id, newOwnerJid);
|
|
100
|
-
|
|
101
|
-
// Delete newsletter
|
|
102
|
-
await sock.newsletterManager.delete(nl.id);
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
#### 4. StatusExtended (`sock.statusManager`)
|
|
106
|
-
Status/Stories reply, view tracking, privacy settings, album upload.
|
|
107
|
-
|
|
108
|
-
**Fix issues:**
|
|
109
|
-
- Baileys: status reply tidak support
|
|
110
|
-
- Baileys: status view tracking missing
|
|
111
|
-
- Baileys: status privacy settings tidak ada
|
|
112
|
-
|
|
113
|
-
```typescript
|
|
114
|
-
// Reply ke status
|
|
115
|
-
await sock.statusManager.replyToStatus(authorJid, statusId, 'Nice status!');
|
|
116
|
-
|
|
117
|
-
// React to status
|
|
118
|
-
await sock.statusManager.reactToStatus(authorJid, statusId, '❤️');
|
|
119
|
-
|
|
120
|
-
// Get who viewed your status
|
|
121
|
-
const views = await sock.statusManager.getStatusViews(statusId);
|
|
122
|
-
console.log(`${views.length} people viewed your status`);
|
|
123
|
-
|
|
124
|
-
// Get recent statuses dari contacts
|
|
125
|
-
const statuses = await sock.statusManager.getRecentStatuses(50);
|
|
126
|
-
|
|
127
|
-
// Upload text status with background
|
|
128
|
-
await sock.statusManager.sendTextStatus('Hello!', { backgroundColor: '#FF0000' });
|
|
129
|
-
|
|
130
|
-
// Upload status album (multiple items sekaligus)
|
|
131
|
-
await sock.statusManager.sendStatusAlbum([
|
|
132
|
-
{ type: 'image', mediaUrl: 'https://...', caption: 'Photo 1' },
|
|
133
|
-
{ type: 'text', text: 'Caption', backgroundColor: '#0000FF' },
|
|
134
|
-
{ type: 'video', mediaUrl: 'https://...' }
|
|
135
|
-
]);
|
|
136
|
-
|
|
137
|
-
// Get/Set status privacy
|
|
138
|
-
const privacy = await sock.statusManager.getPrivacy();
|
|
139
|
-
await sock.statusManager.setPrivacy({
|
|
140
|
-
whoCanSee: 'whitelist',
|
|
141
|
-
whitelist: ['user1@s.whatsapp.net', 'user2@s.whatsapp.net']
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
// Forward status to contacts
|
|
145
|
-
await sock.statusManager.forwardStatus(authorJid, statusId, [user1, user2]);
|
|
146
|
-
|
|
147
|
-
// Mark status as seen
|
|
148
|
-
await sock.statusManager.markAsSeen(authorJid, [statusId1, statusId2]);
|
|
149
|
-
|
|
150
|
-
// Delete own status
|
|
151
|
-
await sock.statusManager.deleteStatus(statusId);
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
#### 5. ContactsManager (`sock.contactsManager`)
|
|
155
|
-
Sync contacts, check if registered, search.
|
|
156
|
-
|
|
157
|
-
**Fix issues:**
|
|
158
|
-
- Baileys: contact sync tidak reliable
|
|
159
|
-
- Baileys: tidak bisa check jika nomor terdaftar di WhatsApp
|
|
160
|
-
|
|
161
|
-
```typescript
|
|
162
|
-
// Sync multiple contacts (check if registered)
|
|
163
|
-
const contacts = await sock.contactsManager.syncContacts([
|
|
164
|
-
'6281234567890',
|
|
165
|
-
'6289876543210',
|
|
166
|
-
'621234567890'
|
|
167
|
-
]);
|
|
168
|
-
|
|
169
|
-
for (const [phone, info] of contacts.entries()) {
|
|
170
|
-
console.log(`${phone}: ${info.isRegistered ? '✓ registered' : '✗ not registered'}`);
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
// Check single number
|
|
174
|
-
const isRegistered = await sock.contactsManager.checkRegistered('6281234567890');
|
|
175
|
-
|
|
176
|
-
// Get contact info
|
|
177
|
-
const info = await sock.contactsManager.getContactInfo('6281234567890');
|
|
178
|
-
|
|
179
|
-
// Search contacts by name/number
|
|
180
|
-
const results = sock.contactsManager.searchContacts('John', 20);
|
|
181
|
-
|
|
182
|
-
// Get all cached contacts
|
|
183
|
-
const all = sock.contactsManager.getAllContacts();
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
#### 6. BulkOperations (`sock.bulkOps`)
|
|
187
|
-
Bulk send, broadcast, album send dengan rate limiting.
|
|
188
|
-
|
|
189
|
-
**Fix issues:**
|
|
190
|
-
- Baileys: bulk send tidak ada
|
|
191
|
-
- Baileys: broadcast tidak ada delay control
|
|
192
|
-
- Baileys: multi-file send tidak support
|
|
193
|
-
|
|
194
|
-
```typescript
|
|
195
|
-
// Bulk send multiple messages dengan delay
|
|
196
|
-
const items = [
|
|
197
|
-
{ jid: 'user1@s.whatsapp.net', content: { text: 'Hello 1' } },
|
|
198
|
-
{ jid: 'user2@s.whatsapp.net', content: { text: 'Hello 2' } },
|
|
199
|
-
{ jid: 'user3@s.whatsapp.net', content: { text: 'Hello 3' } }
|
|
200
|
-
];
|
|
201
|
-
|
|
202
|
-
const results = await sock.bulkOps.bulkSend(items, {
|
|
203
|
-
delayMs: 1000, // 1s delay between sends
|
|
204
|
-
concurrency: 5, // Max 5 concurrent
|
|
205
|
-
stopOnError: false, // Continue on failure
|
|
206
|
-
onProgress: (current, total) => console.log(`${current}/${total}`)
|
|
207
|
-
});
|
|
208
|
-
|
|
209
|
-
// Broadcast same message to multiple recipients
|
|
210
|
-
await sock.bulkOps.broadcast(
|
|
211
|
-
{ text: 'Announcement!' },
|
|
212
|
-
['user1@s.whatsapp.net', 'user2@s.whatsapp.net'],
|
|
213
|
-
{ delayMs: 2000 }
|
|
214
|
-
);
|
|
215
|
-
|
|
216
|
-
// Send album (multiple media files)
|
|
217
|
-
await sock.bulkOps.sendAlbum(jid, [
|
|
218
|
-
{ type: 'image', stream: image1, mimetype: 'image/jpeg', caption: 'Photo 1' },
|
|
219
|
-
{ type: 'image', stream: image2, mimetype: 'image/jpeg', caption: 'Photo 2' },
|
|
220
|
-
{ type: 'video', stream: video, mimetype: 'video/mp4' }
|
|
221
|
-
]);
|
|
222
|
-
|
|
223
|
-
// Send with retry
|
|
224
|
-
const result = await sock.bulkOps.sendWithRetry(jid, content, 3, 2000);
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
#### 7. MessageExtras (`sock.messageExtras`)
|
|
228
|
-
Edit message, star/unstar, pin, view-once download, message info.
|
|
229
|
-
|
|
230
|
-
**Fix issues:**
|
|
231
|
-
- Baileys: edit message tidak support
|
|
232
|
-
- Baileys: star messages tidak ada
|
|
233
|
-
- Baileys: view once media tidak bisa didownload
|
|
234
|
-
- Baileys: message read/delivery info missing
|
|
235
|
-
|
|
236
|
-
```typescript
|
|
237
|
-
// Edit message yang sudah dikirim
|
|
238
|
-
await sock.messageExtras.editMessage(jid, key, 'Edited text');
|
|
239
|
-
|
|
240
|
-
// Star/unstar message
|
|
241
|
-
await sock.messageExtras.starMessage(key, true); // star
|
|
242
|
-
await sock.messageExtras.starMessage(key, false); // unstar
|
|
243
|
-
|
|
244
|
-
// Get starred messages in a chat
|
|
245
|
-
const starred = await sock.messageExtras.getStarredMessages(jid, 50);
|
|
246
|
-
|
|
247
|
-
// Pin message in chat
|
|
248
|
-
await sock.messageExtras.pinMessage(key, 24 * 60 * 60 * 1000); // pin for 24h
|
|
249
|
-
await sock.messageExtras.unpinMessage(key);
|
|
250
|
-
|
|
251
|
-
// Mark chat as unread
|
|
252
|
-
await sock.messageExtras.markChatAsUnread(jid);
|
|
253
|
-
|
|
254
|
-
// Get message info (read by, delivered to)
|
|
255
|
-
const info = await sock.messageExtras.getMessageInfo(key);
|
|
256
|
-
console.log('Status:', info.status);
|
|
257
|
-
console.log('Delivered to:', info.deliveredTo);
|
|
258
|
-
console.log('Read by:', info.readBy);
|
|
259
|
-
console.log('Played by:', info.playedBy);
|
|
260
|
-
|
|
261
|
-
// Download view-once media (bypass protection)
|
|
262
|
-
const buffer = await sock.messageExtras.downloadViewOnceMedia(message);
|
|
263
|
-
|
|
264
|
-
// Remove reaction
|
|
265
|
-
await sock.messageExtras.removeReaction(key);
|
|
266
|
-
|
|
267
|
-
// Forward with additional context
|
|
268
|
-
await sock.messageExtras.forwardWithContext(toJid, originalMessage, 'Check this out!');
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
#### 8. DisappearingManager (`sock.disappearingManager`)
|
|
272
|
-
Set disappearing messages timer per chat.
|
|
273
|
-
|
|
274
|
-
**Fix issues:**
|
|
275
|
-
- Baileys: disappearing messages control tidak ada
|
|
276
|
-
- Baileys: tidak bisa set timer per chat
|
|
277
|
-
|
|
278
|
-
```typescript
|
|
279
|
-
// Set timer for a chat
|
|
280
|
-
await sock.disappearingManager.setTimer(jid, '24_hours');
|
|
281
|
-
await sock.disappearingManager.setTimer(jid, '7_days');
|
|
282
|
-
await sock.disappearingManager.setTimer(jid, '90_days');
|
|
283
|
-
await sock.disappearingManager.setTimer(jid, 'off'); // disable
|
|
284
|
-
|
|
285
|
-
// Get current setting
|
|
286
|
-
const timer = await sock.disappearingManager.getSetting(jid);
|
|
287
|
-
|
|
288
|
-
// Set default timer untuk new chats
|
|
289
|
-
await sock.disappearingManager.setDefaultTimer('7_days');
|
|
290
|
-
|
|
291
|
-
// Get all chats with disappearing enabled
|
|
292
|
-
const chats = sock.disappearingManager.getDisappearingChats();
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
#### 9. LiveLocationManager (`sock.liveLocationManager`)
|
|
296
|
-
Share live location dengan real-time updates.
|
|
297
|
-
|
|
298
|
-
**Fix issues:**
|
|
299
|
-
- Baileys: live location tidak support
|
|
300
|
-
- Baileys: tidak bisa stop live location
|
|
301
|
-
|
|
302
|
-
```typescript
|
|
303
|
-
// Start sharing live location
|
|
304
|
-
await sock.liveLocationManager.startSharing(jid, {
|
|
305
|
-
latitude: -6.2088,
|
|
306
|
-
longitude: 106.8456,
|
|
307
|
-
accuracy: 10,
|
|
308
|
-
speed: 0,
|
|
309
|
-
heading: 180,
|
|
310
|
-
altitude: 50,
|
|
311
|
-
expiration: 3600, // 1 hour
|
|
312
|
-
caption: 'On my way!'
|
|
313
|
-
});
|
|
314
|
-
|
|
315
|
-
// Update location
|
|
316
|
-
await sock.liveLocationManager.updateLocation(jid, {
|
|
317
|
-
latitude: -6.2090,
|
|
318
|
-
longitude: 106.8460
|
|
319
|
-
});
|
|
320
|
-
|
|
321
|
-
// Stop sharing
|
|
322
|
-
await sock.liveLocationManager.stopSharing(jid);
|
|
323
|
-
|
|
324
|
-
// Stop all active sharing
|
|
325
|
-
await sock.liveLocationManager.stopAllSharing();
|
|
326
|
-
|
|
327
|
-
// Send static location (non-live)
|
|
328
|
-
await sock.liveLocationManager.sendStaticLocation(jid, -6.2088, 106.8456, {
|
|
329
|
-
name: 'Jakarta',
|
|
330
|
-
address: 'Indonesia'
|
|
331
|
-
});
|
|
332
|
-
|
|
333
|
-
// Parse incoming live location
|
|
334
|
-
const loc = sock.liveLocationManager.parseLiveLocationMessage(message);
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
#### 10. StickerManager (`sock.stickerManager`)
|
|
338
|
-
Create dan send custom stickers, sticker packs.
|
|
339
|
-
|
|
340
|
-
**Fix issues:**
|
|
341
|
-
- Baileys: custom sticker support kurang
|
|
342
|
-
- Baileys: sticker pack tidak support
|
|
343
|
-
|
|
344
|
-
```typescript
|
|
345
|
-
// Send sticker dari image buffer (WebP format)
|
|
346
|
-
await sock.stickerManager.sendSticker(jid, webpBuffer, {
|
|
347
|
-
packName: 'My Pack',
|
|
348
|
-
author: 'Me',
|
|
349
|
-
emojis: ['😀'],
|
|
350
|
-
isAnimated: false
|
|
351
|
-
});
|
|
352
|
-
|
|
353
|
-
// Create sticker pack dari multiple images
|
|
354
|
-
const pack = await sock.stickerManager.createStickerPack(
|
|
355
|
-
'My Sticker Pack',
|
|
356
|
-
'Author Name',
|
|
357
|
-
[
|
|
358
|
-
{ buffer: webp1, emojis: ['😀'] },
|
|
359
|
-
{ buffer: webp2, emojis: ['😂'], isAnimated: true },
|
|
360
|
-
{ buffer: webp3, emojis: ['😍'] }
|
|
361
|
-
]
|
|
362
|
-
);
|
|
363
|
-
|
|
364
|
-
// Get sticker pack info
|
|
365
|
-
const info = await sock.stickerManager.getStickerPack(pack.id);
|
|
366
|
-
|
|
367
|
-
// Delete sticker pack
|
|
368
|
-
await sock.stickerManager.deleteStickerPack(pack.id);
|
|
369
|
-
|
|
370
|
-
// Favorite a sticker
|
|
371
|
-
await sock.stickerManager.favoriteSticker(stickerId, fileSha256);
|
|
372
|
-
```
|
|
373
|
-
|
|
374
|
-
#### 11. AudioTranscriptionManager
|
|
375
|
-
Audio transcription dengan pluggable provider (Whisper, Google, dll).
|
|
376
|
-
|
|
377
|
-
```typescript
|
|
378
|
-
import { AudioTranscriptionManager } from '@kangwifi-pro/waliwa';
|
|
379
|
-
|
|
380
|
-
const atm = new AudioTranscriptionManager();
|
|
381
|
-
|
|
382
|
-
// Use Whisper API
|
|
383
|
-
atm.setProvider(AudioTranscriptionManager.whisperProvider(process.env.OPENAI_API_KEY));
|
|
384
|
-
|
|
385
|
-
// Transcribe audio
|
|
386
|
-
const result = await atm.transcribe(audioBuffer, 'audio/ogg', 'audio-msg-123');
|
|
387
|
-
console.log(result.text); // "Hello, this is a voice message"
|
|
388
|
-
```
|
|
389
|
-
|
|
390
|
-
---
|
|
391
|
-
|
|
392
|
-
### Fixes (7 trackers)
|
|
393
|
-
|
|
394
|
-
#### 1. TypingIndicatorTracker (`sock.typingTracker`)
|
|
395
|
-
Reliable typing indicator dengan auto-timeout.
|
|
396
|
-
|
|
397
|
-
**Fix:** Baileys issue - typing indicator tidak reliable
|
|
398
|
-
|
|
399
|
-
```typescript
|
|
400
|
-
sock.typingTracker.on('typing:start', ({ jid, type, timestamp }) => {
|
|
401
|
-
console.log(`${jid} is ${type}...`);
|
|
402
|
-
});
|
|
403
|
-
|
|
404
|
-
sock.typingTracker.on('typing:stop', ({ jid, reason }) => {
|
|
405
|
-
console.log(`${jid} stopped typing (${reason})`);
|
|
406
|
-
});
|
|
407
|
-
|
|
408
|
-
// Manual check
|
|
409
|
-
if (sock.typingTracker.isTyping('user@s.whatsapp.net')) {
|
|
410
|
-
console.log('User is typing');
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
// Get all currently typing users
|
|
414
|
-
const typing = sock.typingTracker.getAllTyping();
|
|
415
|
-
```
|
|
416
|
-
|
|
417
|
-
#### 2. LastSeenTracker (`sock.lastSeenTracker`)
|
|
418
|
-
Track last seen timestamps.
|
|
419
|
-
|
|
420
|
-
**Fix:** Baileys issue - last seen tidak bisa di-get
|
|
421
|
-
|
|
422
|
-
```typescript
|
|
423
|
-
// Auto-updated dari presence events
|
|
424
|
-
const lastSeen = sock.lastSeenTracker.getLastSeen('user@s.whatsapp.net');
|
|
425
|
-
const isOnline = sock.lastSeenTracker.isOnline('user@s.whatsapp.net');
|
|
426
|
-
|
|
427
|
-
// Formatted
|
|
428
|
-
const formatted = sock.lastSeenTracker.getFormattedLastSeen('user@s.whatsapp.net');
|
|
429
|
-
// "online now" | "5 minutes ago" | "2 hours ago" | "3 days ago"
|
|
430
|
-
```
|
|
431
|
-
|
|
432
|
-
#### 3. MessageStatusTracker (`sock.messageStatusTracker`)
|
|
433
|
-
Real-time message status tracking dengan detailed info.
|
|
434
|
-
|
|
435
|
-
**Fix:** Baileys issue - message status tidak real-time
|
|
436
|
-
|
|
437
|
-
```typescript
|
|
438
|
-
sock.messageStatusTracker.on('status:update', ({ key, status, timestamp }) => {
|
|
439
|
-
console.log(`Message ${key.id}: ${status} at ${new Date(timestamp).toISOString()}`);
|
|
440
|
-
});
|
|
441
|
-
|
|
442
|
-
// Get detailed info
|
|
443
|
-
const info = sock.messageStatusTracker.getStatusInfo(messageId);
|
|
444
|
-
// { status: 'read', timestamp, deliveredTo: [...], readBy: [...] }
|
|
445
|
-
|
|
446
|
-
// Find stuck messages (pending > 5 min)
|
|
447
|
-
const stuck = sock.messageStatusTracker.getStuckMessages();
|
|
448
|
-
```
|
|
449
|
-
|
|
450
|
-
#### 4. SelfMessageFilter (`sock.selfFilter`)
|
|
451
|
-
Filter self messages otomatis.
|
|
452
|
-
|
|
453
|
-
**Fix:** Baileys issue - self message detection missing
|
|
454
|
-
|
|
455
|
-
```typescript
|
|
456
|
-
// Auto-set dari creds.me
|
|
457
|
-
sock.selfFilter.setOwnJid('6281@s.whatsapp.net');
|
|
458
|
-
|
|
459
|
-
// Check if message is from self
|
|
460
|
-
const isSelf = sock.selfFilter.isSelfMessage(jid);
|
|
461
|
-
const isSelfKey = sock.selfFilter.isSelfKey(message.key);
|
|
462
|
-
|
|
463
|
-
// Filter batch
|
|
464
|
-
const filtered = sock.selfFilter.filterSelfMessages(messages);
|
|
465
|
-
```
|
|
466
|
-
|
|
467
|
-
#### 5. ChatStateManager (`sock.chatStateManager`)
|
|
468
|
-
Reliable chat state persistence (archive, pin, mute).
|
|
469
|
-
|
|
470
|
-
**Fix:** Baileys issue - archive/pin tidak reliable (lost on restart)
|
|
471
|
-
|
|
472
|
-
```typescript
|
|
473
|
-
// Archive/unarchive
|
|
474
|
-
sock.chatStateManager.archive(jid);
|
|
475
|
-
sock.chatStateManager.unarchive(jid);
|
|
476
|
-
|
|
477
|
-
// Pin/unpin (with optional duration)
|
|
478
|
-
sock.chatStateManager.pin(jid, 7 * 24 * 60 * 60 * 1000); // pin for 7 days
|
|
479
|
-
sock.chatStateManager.unpin(jid);
|
|
480
|
-
|
|
481
|
-
// Mute/unmute
|
|
482
|
-
sock.chatStateManager.mute(jid, 8 * 60 * 60 * 1000); // mute for 8 hours
|
|
483
|
-
sock.chatStateManager.unmute(jid);
|
|
484
|
-
|
|
485
|
-
// Mark as read/unread
|
|
486
|
-
sock.chatStateManager.markAsRead(jid);
|
|
487
|
-
sock.chatStateManager.markAsUnread(jid);
|
|
488
|
-
|
|
489
|
-
// Get lists
|
|
490
|
-
const archived = sock.chatStateManager.getArchivedChats();
|
|
491
|
-
const pinned = sock.chatStateManager.getPinnedChats();
|
|
492
|
-
const muted = sock.chatStateManager.getMutedChats();
|
|
493
|
-
|
|
494
|
-
// Serialize untuk persistence
|
|
495
|
-
const data = sock.chatStateManager.serialize();
|
|
496
|
-
// Save to file/DB...
|
|
497
|
-
|
|
498
|
-
// Restore on restart
|
|
499
|
-
sock.chatStateManager.deserialize(savedData);
|
|
500
|
-
```
|
|
501
|
-
|
|
502
|
-
#### 6. DeviceInfoTracker (`sock.deviceInfoTracker`)
|
|
503
|
-
Battery status dan device info tracking.
|
|
504
|
-
|
|
505
|
-
**Fix:** Baileys issue - battery status tidak terdeteksi, phone info tidak bisa di-get
|
|
506
|
-
|
|
507
|
-
```typescript
|
|
508
|
-
sock.deviceInfoTracker.on('battery:update', ({ level, isCharging }) => {
|
|
509
|
-
console.log(`Battery: ${level}% ${isCharging ? '⚡' : ''}`);
|
|
510
|
-
});
|
|
511
|
-
|
|
512
|
-
sock.deviceInfoTracker.on('battery:low', ({ level }) => {
|
|
513
|
-
console.warn(`⚠️ Battery low: ${level}%`);
|
|
514
|
-
});
|
|
515
|
-
|
|
516
|
-
// Manual check
|
|
517
|
-
const level = sock.deviceInfoTracker.getBatteryLevel();
|
|
518
|
-
const isCharging = sock.deviceInfoTracker.isDeviceCharging();
|
|
519
|
-
const deviceInfo = sock.deviceInfoTracker.getDeviceInfo();
|
|
520
|
-
```
|
|
521
|
-
|
|
522
|
-
#### 7. GroupEventsTracker (`sock.groupEventsTracker`)
|
|
523
|
-
Detect group changes (subject, description, announce, restrict, participant count).
|
|
524
|
-
|
|
525
|
-
**Fix:** Baileys issue - group subject/description/announce changes tidak terdeteksi
|
|
526
|
-
|
|
527
|
-
```typescript
|
|
528
|
-
sock.groupEventsTracker.on('group:subject_change', ({ groupJid, oldSubject, newSubject }) => {
|
|
529
|
-
console.log(`Group ${groupJid}: ${oldSubject} -> ${newSubject}`);
|
|
530
|
-
});
|
|
531
|
-
|
|
532
|
-
sock.groupEventsTracker.on('group:description_change', ({ groupJid, oldDescription, newDescription }) => {
|
|
533
|
-
console.log(`Group ${groupJid} description changed`);
|
|
534
|
-
});
|
|
535
|
-
|
|
536
|
-
sock.groupEventsTracker.on('group:announce_change', ({ groupJid, announce }) => {
|
|
537
|
-
console.log(`Group ${groupJid} ${announce ? 'now admins only' : 'all can send'}`);
|
|
538
|
-
});
|
|
539
|
-
|
|
540
|
-
sock.groupEventsTracker.on('group:restrict_change', ({ groupJid, restrict }) => {
|
|
541
|
-
console.log(`Group ${groupJid} ${restrict ? 'now restricted' : 'now open'}`);
|
|
542
|
-
});
|
|
543
|
-
|
|
544
|
-
sock.groupEventsTracker.on('group:participant_count_change', ({ groupJid, oldCount, newCount }) => {
|
|
545
|
-
console.log(`Group ${groupJid}: ${oldCount} -> ${newCount} participants`);
|
|
546
|
-
});
|
|
547
|
-
```
|
|
548
|
-
|
|
549
|
-
---
|
|
550
|
-
|
|
551
|
-
### Helper Functions
|
|
552
|
-
|
|
553
|
-
#### parseGroupInviteInfo
|
|
554
|
-
Parse info dari group invite link.
|
|
555
|
-
|
|
556
|
-
```typescript
|
|
557
|
-
import { parseGroupInviteInfo } from '@kangwifi-pro/waliwa';
|
|
558
|
-
|
|
559
|
-
// Get info dari invite link (returns GroupInviteInfo)
|
|
560
|
-
const info = parseGroupInviteInfo(responseNode);
|
|
561
|
-
// { code, groupJid, subject, description, participantsCount, isCommunity, ... }
|
|
562
|
-
```
|
|
563
|
-
|
|
564
|
-
#### detectLanguageFromText
|
|
565
|
-
Detect language dari text.
|
|
566
|
-
|
|
567
|
-
```typescript
|
|
568
|
-
import { detectLanguageFromText } from '@kangwifi-pro/waliwa';
|
|
569
|
-
|
|
570
|
-
detectLanguageFromText('Hello world'); // 'en'
|
|
571
|
-
detectLanguageFromText('こんにちは'); // 'ja'
|
|
572
|
-
detectLanguageFromText('مرحبا'); // 'ar'
|
|
573
|
-
detectLanguageFromText('你好'); // 'zh'
|
|
574
|
-
```
|
|
575
|
-
|
|
576
|
-
---
|
|
577
|
-
|
|
578
|
-
## Ringkasan Perbaikan Issue Baileys
|
|
579
|
-
|
|
580
|
-
| Issue Baileys | Fix | Module |
|
|
581
|
-
|--------------|-----|--------|
|
|
582
|
-
| Profile picture URL tidak bisa didapat | ProfileManager.fetchProfilePictureUrl | profile-manager |
|
|
583
|
-
| About text tidak bisa di-get | ProfileManager.fetchAbout | profile-manager |
|
|
584
|
-
| Business account detection missing | ProfileManager.checkBusinessAccount | profile-manager |
|
|
585
|
-
| Block/unblock tidak ada | PrivacyManager.block/unblock | privacy-manager |
|
|
586
|
-
| Privacy settings tidak bisa diubah | PrivacyManager.setPrivacy | privacy-manager |
|
|
587
|
-
| Newsletter support terbatas | NewsletterManagerExtended (10 methods) | newsletter-extended |
|
|
588
|
-
| Status reply tidak support | StatusExtended.replyToStatus | status-extended |
|
|
589
|
-
| Status view tracking missing | StatusExtended.getStatusViews | status-extended |
|
|
590
|
-
| Status privacy settings tidak ada | StatusExtended.getPrivacy/setPrivacy | status-extended |
|
|
591
|
-
| Contact sync tidak reliable | ContactsManager.syncContacts | contacts-manager |
|
|
592
|
-
| Tidak bisa check nomor terdaftar | ContactsManager.checkRegistered | contacts-manager |
|
|
593
|
-
| Bulk send tidak ada | BulkOperations.bulkSend | bulk-operations |
|
|
594
|
-
| Multi-file send tidak support | BulkOperations.sendAlbum | bulk-operations |
|
|
595
|
-
| Edit message tidak support | MessageExtras.editMessage | message-extras |
|
|
596
|
-
| Star messages tidak ada | MessageExtras.starMessage | message-extras |
|
|
597
|
-
| View once media tidak bisa didownload | MessageExtras.downloadViewOnceMedia | message-extras |
|
|
598
|
-
| Message read/delivery info missing | MessageExtras.getMessageInfo | message-extras |
|
|
599
|
-
| Disappearing messages control tidak ada | DisappearingManager.setTimer | disappearing |
|
|
600
|
-
| Live location tidak support | LiveLocationManager.startSharing | live-location |
|
|
601
|
-
| Custom sticker support kurang | StickerManager.sendSticker | sticker-manager |
|
|
602
|
-
| Sticker pack tidak support | StickerManager.createStickerPack | sticker-manager |
|
|
603
|
-
| Typing indicator tidak reliable | TypingIndicatorTracker | community-fixes |
|
|
604
|
-
| Last seen tidak bisa di-get | LastSeenTracker | community-fixes |
|
|
605
|
-
| Message status tidak real-time | MessageStatusTracker | community-fixes |
|
|
606
|
-
| Self message detection missing | SelfMessageFilter | community-fixes |
|
|
607
|
-
| Archive/pin tidak reliable | ChatStateManager | community-fixes |
|
|
608
|
-
| Battery status tidak terdeteksi | DeviceInfoTracker | community-fixes |
|
|
609
|
-
| Phone info tidak bisa di-get | DeviceInfoTracker | community-fixes |
|
|
610
|
-
| Group changes tidak terdeteksi | GroupEventsTracker | community-fixes |
|
|
611
|
-
| Group invite link info tidak support | parseGroupInviteInfo | community-fixes |
|
|
612
|
-
|
|
613
|
-
**Total: 28+ issue Baileys di-fix di v1.1.0**
|