queenruva-sockets 5.6.23
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 +31 -0
- package/README.md +1082 -0
- package/WAProto/GenerateStatics.sh +3 -0
- package/WAProto/WAProto.proto +5479 -0
- package/WAProto/fix-imports.js +85 -0
- package/WAProto/index.d.ts +14017 -0
- package/WAProto/index.js +97691 -0
- package/engine-requirements.js +11 -0
- package/lib/Defaults/index.d.ts +75 -0
- package/lib/Defaults/index.js +129 -0
- package/lib/Signal/Group/ciphertext-message.d.ts +10 -0
- package/lib/Signal/Group/ciphertext-message.js +12 -0
- package/lib/Signal/Group/group-session-builder.d.ts +15 -0
- package/lib/Signal/Group/group-session-builder.js +30 -0
- package/lib/Signal/Group/group_cipher.d.ts +17 -0
- package/lib/Signal/Group/group_cipher.js +82 -0
- package/lib/Signal/Group/index.d.ts +12 -0
- package/lib/Signal/Group/index.js +12 -0
- package/lib/Signal/Group/keyhelper.d.ts +11 -0
- package/lib/Signal/Group/keyhelper.js +18 -0
- package/lib/Signal/Group/sender-chain-key.d.ts +14 -0
- package/lib/Signal/Group/sender-chain-key.js +26 -0
- package/lib/Signal/Group/sender-key-distribution-message.d.ts +17 -0
- package/lib/Signal/Group/sender-key-distribution-message.js +63 -0
- package/lib/Signal/Group/sender-key-message.d.ts +19 -0
- package/lib/Signal/Group/sender-key-message.js +66 -0
- package/lib/Signal/Group/sender-key-name.d.ts +18 -0
- package/lib/Signal/Group/sender-key-name.js +48 -0
- package/lib/Signal/Group/sender-key-record.d.ts +31 -0
- package/lib/Signal/Group/sender-key-record.js +41 -0
- package/lib/Signal/Group/sender-key-state.d.ts +39 -0
- package/lib/Signal/Group/sender-key-state.js +84 -0
- package/lib/Signal/Group/sender-message-key.d.ts +12 -0
- package/lib/Signal/Group/sender-message-key.js +26 -0
- package/lib/Signal/libsignal.d.ts +5 -0
- package/lib/Signal/libsignal.js +431 -0
- package/lib/Signal/lid-mapping.d.ts +23 -0
- package/lib/Signal/lid-mapping.js +277 -0
- package/lib/Socket/Client/index.d.ts +3 -0
- package/lib/Socket/Client/index.js +3 -0
- package/lib/Socket/Client/types.d.ts +16 -0
- package/lib/Socket/Client/types.js +11 -0
- package/lib/Socket/Client/websocket.d.ts +13 -0
- package/lib/Socket/Client/websocket.js +54 -0
- package/lib/Socket/business.d.ts +217 -0
- package/lib/Socket/business.js +379 -0
- package/lib/Socket/chats.d.ts +124 -0
- package/lib/Socket/chats.js +1193 -0
- package/lib/Socket/communities.d.ts +273 -0
- package/lib/Socket/communities.js +431 -0
- package/lib/Socket/groups.d.ts +161 -0
- package/lib/Socket/groups.js +347 -0
- package/lib/Socket/index.d.ts +260 -0
- package/lib/Socket/index.js +12 -0
- package/lib/Socket/messages-recv.d.ts +203 -0
- package/lib/Socket/messages-recv.js +1772 -0
- package/lib/Socket/messages-send.d.ts +199 -0
- package/lib/Socket/messages-send.js +1160 -0
- package/lib/Socket/mex.d.ts +3 -0
- package/lib/Socket/mex.js +42 -0
- package/lib/Socket/newsletter.d.ts +170 -0
- package/lib/Socket/newsletter.js +181 -0
- package/lib/Socket/socket.d.ts +59 -0
- package/lib/Socket/socket.js +1029 -0
- package/lib/Types/Auth.d.ts +117 -0
- package/lib/Types/Auth.js +2 -0
- package/lib/Types/Bussines.d.ts +25 -0
- package/lib/Types/Bussines.js +2 -0
- package/lib/Types/Call.d.ts +15 -0
- package/lib/Types/Call.js +2 -0
- package/lib/Types/Chat.d.ts +124 -0
- package/lib/Types/Chat.js +8 -0
- package/lib/Types/Contact.d.ts +26 -0
- package/lib/Types/Contact.js +2 -0
- package/lib/Types/Events.d.ts +256 -0
- package/lib/Types/Events.js +2 -0
- package/lib/Types/GroupMetadata.d.ts +71 -0
- package/lib/Types/GroupMetadata.js +2 -0
- package/lib/Types/Label.d.ts +47 -0
- package/lib/Types/Label.js +25 -0
- package/lib/Types/LabelAssociation.d.ts +30 -0
- package/lib/Types/LabelAssociation.js +7 -0
- package/lib/Types/Message.d.ts +320 -0
- package/lib/Types/Message.js +11 -0
- package/lib/Types/Mex.d.ts +141 -0
- package/lib/Types/Mex.js +37 -0
- package/lib/Types/Product.d.ts +79 -0
- package/lib/Types/Product.js +2 -0
- package/lib/Types/Signal.d.ts +87 -0
- package/lib/Types/Signal.js +2 -0
- package/lib/Types/Socket.d.ts +136 -0
- package/lib/Types/Socket.js +3 -0
- package/lib/Types/State.d.ts +97 -0
- package/lib/Types/State.js +56 -0
- package/lib/Types/USync.d.ts +26 -0
- package/lib/Types/USync.js +2 -0
- package/lib/Types/index.d.ts +65 -0
- package/lib/Types/index.js +26 -0
- package/lib/Utils/auth-utils.d.ts +24 -0
- package/lib/Utils/auth-utils.js +302 -0
- package/lib/Utils/browser-utils.d.ts +4 -0
- package/lib/Utils/browser-utils.js +28 -0
- package/lib/Utils/business.d.ts +23 -0
- package/lib/Utils/business.js +231 -0
- package/lib/Utils/chat-utils.d.ts +100 -0
- package/lib/Utils/chat-utils.js +872 -0
- package/lib/Utils/companion-reg-client-utils.d.ts +17 -0
- package/lib/Utils/companion-reg-client-utils.js +35 -0
- package/lib/Utils/crypto.d.ts +37 -0
- package/lib/Utils/crypto.js +118 -0
- package/lib/Utils/decode-wa-message.d.ts +66 -0
- package/lib/Utils/decode-wa-message.js +311 -0
- package/lib/Utils/event-buffer.d.ts +36 -0
- package/lib/Utils/event-buffer.js +622 -0
- package/lib/Utils/generics.d.ts +91 -0
- package/lib/Utils/generics.js +378 -0
- package/lib/Utils/history.d.ts +24 -0
- package/lib/Utils/history.js +134 -0
- package/lib/Utils/identity-change-handler.d.ts +44 -0
- package/lib/Utils/identity-change-handler.js +50 -0
- package/lib/Utils/index.d.ts +22 -0
- package/lib/Utils/index.js +22 -0
- package/lib/Utils/link-preview.d.ts +21 -0
- package/lib/Utils/link-preview.js +85 -0
- package/lib/Utils/logger.d.ts +12 -0
- package/lib/Utils/logger.js +3 -0
- package/lib/Utils/lt-hash.d.ts +8 -0
- package/lib/Utils/lt-hash.js +8 -0
- package/lib/Utils/make-mutex.d.ts +9 -0
- package/lib/Utils/make-mutex.js +33 -0
- package/lib/Utils/message-retry-manager.d.ts +115 -0
- package/lib/Utils/message-retry-manager.js +265 -0
- package/lib/Utils/messages-media.d.ts +133 -0
- package/lib/Utils/messages-media.js +786 -0
- package/lib/Utils/messages.d.ts +91 -0
- package/lib/Utils/messages.js +893 -0
- package/lib/Utils/noise-handler.d.ts +20 -0
- package/lib/Utils/noise-handler.js +201 -0
- package/lib/Utils/offline-node-processor.d.ts +17 -0
- package/lib/Utils/offline-node-processor.js +40 -0
- package/lib/Utils/pre-key-manager.d.ts +28 -0
- package/lib/Utils/pre-key-manager.js +106 -0
- package/lib/Utils/process-message.d.ts +60 -0
- package/lib/Utils/process-message.js +597 -0
- package/lib/Utils/reporting-utils.d.ts +11 -0
- package/lib/Utils/reporting-utils.js +258 -0
- package/lib/Utils/signal.d.ts +47 -0
- package/lib/Utils/signal.js +201 -0
- package/lib/Utils/stanza-ack.d.ts +11 -0
- package/lib/Utils/stanza-ack.js +38 -0
- package/lib/Utils/sync-action-utils.d.ts +19 -0
- package/lib/Utils/sync-action-utils.js +49 -0
- package/lib/Utils/tc-token-utils.d.ts +37 -0
- package/lib/Utils/tc-token-utils.js +163 -0
- package/lib/Utils/use-multi-file-auth-state.d.ts +13 -0
- package/lib/Utils/use-multi-file-auth-state.js +121 -0
- package/lib/Utils/validate-connection.d.ts +11 -0
- package/lib/Utils/validate-connection.js +203 -0
- package/lib/WABinary/constants.d.ts +28 -0
- package/lib/WABinary/constants.js +1301 -0
- package/lib/WABinary/decode.d.ts +7 -0
- package/lib/WABinary/decode.js +262 -0
- package/lib/WABinary/encode.d.ts +3 -0
- package/lib/WABinary/encode.js +220 -0
- package/lib/WABinary/generic-utils.d.ts +15 -0
- package/lib/WABinary/generic-utils.js +113 -0
- package/lib/WABinary/index.d.ts +6 -0
- package/lib/WABinary/index.js +6 -0
- package/lib/WABinary/jid-utils.d.ts +48 -0
- package/lib/WABinary/jid-utils.js +96 -0
- package/lib/WABinary/types.d.ts +19 -0
- package/lib/WABinary/types.js +2 -0
- package/lib/WAM/BinaryInfo.d.ts +9 -0
- package/lib/WAM/BinaryInfo.js +10 -0
- package/lib/WAM/constants.d.ts +40 -0
- package/lib/WAM/constants.js +22853 -0
- package/lib/WAM/encode.d.ts +3 -0
- package/lib/WAM/encode.js +150 -0
- package/lib/WAM/index.d.ts +4 -0
- package/lib/WAM/index.js +4 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +10 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +52 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +23 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +54 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +13 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +27 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +13 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +38 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +10 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +25 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +26 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +51 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +10 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +29 -0
- package/lib/WAUSync/Protocols/index.d.ts +6 -0
- package/lib/WAUSync/Protocols/index.js +6 -0
- package/lib/WAUSync/USyncQuery.d.ts +30 -0
- package/lib/WAUSync/USyncQuery.js +98 -0
- package/lib/WAUSync/USyncUser.d.ts +17 -0
- package/lib/WAUSync/USyncUser.js +31 -0
- package/lib/WAUSync/index.d.ts +4 -0
- package/lib/WAUSync/index.js +4 -0
- package/lib/index.d.ts +12 -0
- package/lib/index.js +11 -0
- package/package.json +160 -0
package/README.md
ADDED
|
@@ -0,0 +1,1082 @@
|
|
|
1
|
+
<h1 align="center">
|
|
2
|
+
<br/>
|
|
3
|
+
<strong>Queen Ruva Baileys</strong>
|
|
4
|
+
<br/>
|
|
5
|
+
<sub>by <a href="https://silentbyte-plantforms-inc.zone.id">Iconic Tech</a></sub>
|
|
6
|
+
</h1>
|
|
7
|
+
|
|
8
|
+
<p align="center">
|
|
9
|
+
A clean, powerful WebSocket library for WhatsApp Web automation.<br/>
|
|
10
|
+
Built on top of Baileys — refined, branded, and production-ready.
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
<p align="center">
|
|
14
|
+
<a href="https://github.com/iconictech-dev/queenruva-socket">GitHub</a> •
|
|
15
|
+
<a href="https://silentbyte-plantforms-inc.zone.id">Website</a> •
|
|
16
|
+
<a href="https://whatsapp.com/channel/0029Vak32nE4o7qP75htEB3I">WhatsApp Channel</a>
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Overview
|
|
22
|
+
|
|
23
|
+
**Queen Ruva Baileys** is a WebSocket-based JavaScript library for interacting with the WhatsApp Web API. No Selenium. No Chromium. Just a raw, efficient WebSocket connection that saves you memory and gets the job done.
|
|
24
|
+
|
|
25
|
+
- Full multi-device support
|
|
26
|
+
- Pairing code authentication — no QR scan required
|
|
27
|
+
- Clean branded console output on every session
|
|
28
|
+
- Pure JS — no TypeScript compilation step needed
|
|
29
|
+
- **AI badge support** — mark messages with the WhatsApp `AI ✦` indicator
|
|
30
|
+
- Actively maintained by **Iconic Tech**
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Installation
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npm install queenruva-socket
|
|
38
|
+
# or
|
|
39
|
+
yarn add queenruva-socket
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
> Requires Node.js **>= 20.0.0**
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Index
|
|
47
|
+
|
|
48
|
+
- [Connecting Account](#connecting-account)
|
|
49
|
+
- [Connect with Pairing Code](#connect-with-pairing-code)
|
|
50
|
+
- [Connect with QR Code](#connect-with-qr-code)
|
|
51
|
+
- [Receive Full History](#receive-full-history)
|
|
52
|
+
- [Save & Restore Sessions](#save--restore-sessions)
|
|
53
|
+
- [Handling Events](#handling-events)
|
|
54
|
+
- [Sending Messages](#sending-messages)
|
|
55
|
+
- [Text Message](#text-message)
|
|
56
|
+
- [AI Badge Message ✦](#ai-badge-message-)
|
|
57
|
+
- [Quote / Reply Message](#quote--reply-message)
|
|
58
|
+
- [Mention User](#mention-user)
|
|
59
|
+
- [Forward Messages](#forward-messages)
|
|
60
|
+
- [Location Message](#location-message)
|
|
61
|
+
- [Contact Message](#contact-message)
|
|
62
|
+
- [Reaction Message](#reaction-message)
|
|
63
|
+
- [Pin Message](#pin-message)
|
|
64
|
+
- [Poll Message](#poll-message)
|
|
65
|
+
- [Link Preview](#link-preview)
|
|
66
|
+
- [Image Message](#image-message)
|
|
67
|
+
- [Video Message](#video-message)
|
|
68
|
+
- [Audio / PTT Message](#audio--ptt-message)
|
|
69
|
+
- [GIF Message](#gif-message)
|
|
70
|
+
- [View Once Message](#view-once-message)
|
|
71
|
+
- [Document Message](#document-message)
|
|
72
|
+
- [Sticker Message](#sticker-message)
|
|
73
|
+
- [Modify Messages](#modify-messages)
|
|
74
|
+
- [Delete for Everyone](#delete-for-everyone)
|
|
75
|
+
- [Edit Message](#edit-message)
|
|
76
|
+
- [Receiving Messages](#receiving-messages)
|
|
77
|
+
- [Read & Presence](#read--presence)
|
|
78
|
+
- [Read Messages](#read-messages)
|
|
79
|
+
- [Send Typing / Recording / Online](#send-typing--recording--online)
|
|
80
|
+
- [Subscribe to Presence](#subscribe-to-presence)
|
|
81
|
+
- [Modifying Chats](#modifying-chats)
|
|
82
|
+
- [Archive a Chat](#archive-a-chat)
|
|
83
|
+
- [Mute / Unmute a Chat](#mute--unmute-a-chat)
|
|
84
|
+
- [Mark Chat Read / Unread](#mark-chat-read--unread)
|
|
85
|
+
- [Delete a Chat](#delete-a-chat)
|
|
86
|
+
- [Star / Unstar a Message](#star--unstar-a-message)
|
|
87
|
+
- [Disappearing Messages](#disappearing-messages)
|
|
88
|
+
- [User Queries](#user-queries)
|
|
89
|
+
- [Check if ID Exists](#check-if-id-exists)
|
|
90
|
+
- [Fetch Status](#fetch-status)
|
|
91
|
+
- [Fetch Profile Picture](#fetch-profile-picture)
|
|
92
|
+
- [Fetch Business Profile](#fetch-business-profile)
|
|
93
|
+
- [Fetch Blocklist](#fetch-blocklist)
|
|
94
|
+
- [Change Profile](#change-profile)
|
|
95
|
+
- [Change Status](#change-status)
|
|
96
|
+
- [Change Name](#change-name)
|
|
97
|
+
- [Change Profile Picture](#change-profile-picture)
|
|
98
|
+
- [Remove Profile Picture](#remove-profile-picture)
|
|
99
|
+
- [Privacy Settings](#privacy-settings)
|
|
100
|
+
- [Block / Unblock User](#block--unblock-user)
|
|
101
|
+
- [Update Last Seen Privacy](#update-last-seen-privacy)
|
|
102
|
+
- [Update Online Privacy](#update-online-privacy)
|
|
103
|
+
- [Update Profile Picture Privacy](#update-profile-picture-privacy)
|
|
104
|
+
- [Update Status Privacy](#update-status-privacy)
|
|
105
|
+
- [Update Read Receipts Privacy](#update-read-receipts-privacy)
|
|
106
|
+
- [Update Groups Add Privacy](#update-groups-add-privacy)
|
|
107
|
+
- [Update Default Disappearing Mode](#update-default-disappearing-mode)
|
|
108
|
+
- [Groups](#groups)
|
|
109
|
+
- [Create a Group](#create-a-group)
|
|
110
|
+
- [Add / Remove / Promote / Demote](#add--remove--promote--demote)
|
|
111
|
+
- [Change Group Name](#change-group-name)
|
|
112
|
+
- [Change Group Description](#change-group-description)
|
|
113
|
+
- [Change Group Settings](#change-group-settings)
|
|
114
|
+
- [Leave a Group](#leave-a-group)
|
|
115
|
+
- [Get Invite Code](#get-invite-code)
|
|
116
|
+
- [Revoke Invite Code](#revoke-invite-code)
|
|
117
|
+
- [Join via Invite Code](#join-via-invite-code)
|
|
118
|
+
- [Get Group Info by Invite Code](#get-group-info-by-invite-code)
|
|
119
|
+
- [Get Group Metadata](#get-group-metadata)
|
|
120
|
+
- [Get All Participating Groups](#get-all-participating-groups)
|
|
121
|
+
- [Toggle Ephemeral](#toggle-ephemeral)
|
|
122
|
+
- [Approve / Reject Join Requests](#approve--reject-join-requests)
|
|
123
|
+
- [Broadcast & Stories](#broadcast--stories)
|
|
124
|
+
- [Send Broadcast / Status](#send-broadcast--status)
|
|
125
|
+
- [Media](#media)
|
|
126
|
+
- [Download Media Message](#download-media-message)
|
|
127
|
+
- [Re-upload Media to WhatsApp](#re-upload-media-to-whatsapp)
|
|
128
|
+
- [Reject Call](#reject-call)
|
|
129
|
+
- [Console Banner](#console-banner)
|
|
130
|
+
- [Disclaimer](#disclaimer)
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Connecting Account
|
|
135
|
+
|
|
136
|
+
### Connect with Pairing Code
|
|
137
|
+
|
|
138
|
+
Queen Ruva Baileys randomly picks one of three pairing codes per session:
|
|
139
|
+
|
|
140
|
+
| Code | Type |
|
|
141
|
+
|------|------|
|
|
142
|
+
| `QUEENRUV` | Queen Ruva signature |
|
|
143
|
+
| `ICONICRUV` | Iconic Tech branded |
|
|
144
|
+
| `RUVABETA` | Beta session |
|
|
145
|
+
|
|
146
|
+
```js
|
|
147
|
+
import makeWASocket, { useMultiFileAuthState, DisconnectReason } from 'queenruva-socket'
|
|
148
|
+
import { Boom } from '@hapi/boom'
|
|
149
|
+
|
|
150
|
+
const { state, saveCreds } = await useMultiFileAuthState('./session')
|
|
151
|
+
|
|
152
|
+
const sock = makeWASocket({
|
|
153
|
+
auth: state,
|
|
154
|
+
printQRInTerminal: false
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
sock.ev.on('creds.update', saveCreds)
|
|
158
|
+
|
|
159
|
+
// Request pairing code
|
|
160
|
+
const code = await sock.requestPairingCode('+263786115435')
|
|
161
|
+
console.log('Pairing code:', code)
|
|
162
|
+
|
|
163
|
+
sock.ev.on('connection.update', ({ connection, lastDisconnect }) => {
|
|
164
|
+
if (connection === 'close') {
|
|
165
|
+
const shouldReconnect =
|
|
166
|
+
(lastDisconnect?.error instanceof Boom)
|
|
167
|
+
? lastDisconnect.error.output.statusCode !== DisconnectReason.loggedOut
|
|
168
|
+
: true
|
|
169
|
+
if (shouldReconnect) { /* reconnect */ }
|
|
170
|
+
} else if (connection === 'open') {
|
|
171
|
+
console.log('Connected to WhatsApp!')
|
|
172
|
+
}
|
|
173
|
+
})
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Or use a custom 8-character code:
|
|
177
|
+
|
|
178
|
+
```js
|
|
179
|
+
const code = await sock.requestPairingCode('+263786115435', 'MYCODE12')
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Connect with QR Code
|
|
183
|
+
|
|
184
|
+
```js
|
|
185
|
+
import makeWASocket, { useMultiFileAuthState } from 'queenruva-socket'
|
|
186
|
+
import qrcode from 'qrcode-terminal'
|
|
187
|
+
|
|
188
|
+
const { state, saveCreds } = await useMultiFileAuthState('./session')
|
|
189
|
+
|
|
190
|
+
const sock = makeWASocket({ auth: state })
|
|
191
|
+
|
|
192
|
+
sock.ev.on('connection.update', ({ qr }) => {
|
|
193
|
+
if (qr) qrcode.generate(qr, { small: true })
|
|
194
|
+
})
|
|
195
|
+
|
|
196
|
+
sock.ev.on('creds.update', saveCreds)
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### Receive Full History
|
|
200
|
+
|
|
201
|
+
```js
|
|
202
|
+
const sock = makeWASocket({
|
|
203
|
+
auth: state,
|
|
204
|
+
syncFullHistory: true
|
|
205
|
+
})
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Save & Restore Sessions
|
|
211
|
+
|
|
212
|
+
```js
|
|
213
|
+
import { useMultiFileAuthState } from 'queenruva-socket'
|
|
214
|
+
|
|
215
|
+
const { state, saveCreds } = await useMultiFileAuthState('./session')
|
|
216
|
+
|
|
217
|
+
// Pass state to socket
|
|
218
|
+
const sock = makeWASocket({ auth: state })
|
|
219
|
+
|
|
220
|
+
// Always save on update
|
|
221
|
+
sock.ev.on('creds.update', saveCreds)
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
> Keep the `./session` folder private — it holds your active WhatsApp session.
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Handling Events
|
|
229
|
+
|
|
230
|
+
```js
|
|
231
|
+
// Connection updates
|
|
232
|
+
sock.ev.on('connection.update', (update) => {
|
|
233
|
+
console.log('Connection:', update)
|
|
234
|
+
})
|
|
235
|
+
|
|
236
|
+
// New / updated messages
|
|
237
|
+
sock.ev.on('messages.upsert', ({ messages, type }) => {
|
|
238
|
+
console.log('Messages:', messages)
|
|
239
|
+
})
|
|
240
|
+
|
|
241
|
+
// Message updates (read, delivered, etc.)
|
|
242
|
+
sock.ev.on('messages.update', (updates) => {
|
|
243
|
+
console.log('Updates:', updates)
|
|
244
|
+
})
|
|
245
|
+
|
|
246
|
+
// Chat updates
|
|
247
|
+
sock.ev.on('chats.update', (chats) => {
|
|
248
|
+
console.log('Chats updated:', chats)
|
|
249
|
+
})
|
|
250
|
+
|
|
251
|
+
// Contact updates
|
|
252
|
+
sock.ev.on('contacts.update', (contacts) => {
|
|
253
|
+
console.log('Contacts updated:', contacts)
|
|
254
|
+
})
|
|
255
|
+
|
|
256
|
+
// Presence updates (typing, online)
|
|
257
|
+
sock.ev.on('presence.update', ({ id, presences }) => {
|
|
258
|
+
console.log(`${id} presence:`, presences)
|
|
259
|
+
})
|
|
260
|
+
|
|
261
|
+
// Group participant updates
|
|
262
|
+
sock.ev.on('group-participants.update', ({ id, participants, action }) => {
|
|
263
|
+
console.log(`Group ${id}: ${action}`, participants)
|
|
264
|
+
})
|
|
265
|
+
|
|
266
|
+
// Call events
|
|
267
|
+
sock.ev.on('call', (calls) => {
|
|
268
|
+
console.log('Incoming call:', calls)
|
|
269
|
+
})
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Sending Messages
|
|
275
|
+
|
|
276
|
+
After every message is delivered the console prints:
|
|
277
|
+
```
|
|
278
|
+
✉ Message delivered — Thanks for using Queen Ruva Baileys · By Iconic Tech
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### Text Message
|
|
282
|
+
|
|
283
|
+
```js
|
|
284
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
285
|
+
text: 'Hello from Queen Ruva Baileys!'
|
|
286
|
+
})
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
### AI Badge Message ✦
|
|
292
|
+
|
|
293
|
+
> **Queen Ruva Baileys exclusive feature.**
|
|
294
|
+
|
|
295
|
+
Add `ai: true` to any `sendMessage` call and WhatsApp will render the **`AI ✦`** badge next to the timestamp on the recipient's screen — visually marking the message as AI-generated.
|
|
296
|
+
|
|
297
|
+
This works on **all message types** — text, image, video, audio, documents, and more.
|
|
298
|
+
|
|
299
|
+
```js
|
|
300
|
+
// Text with AI badge
|
|
301
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
302
|
+
text: 'Hello! I am an AI assistant.',
|
|
303
|
+
ai: true
|
|
304
|
+
})
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
```js
|
|
308
|
+
// Image with AI badge
|
|
309
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
310
|
+
image: { url: './image.jpg' },
|
|
311
|
+
caption: 'Generated by AI',
|
|
312
|
+
ai: true
|
|
313
|
+
})
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
```js
|
|
317
|
+
// Video with AI badge
|
|
318
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
319
|
+
video: { url: './video.mp4' },
|
|
320
|
+
caption: 'AI generated video',
|
|
321
|
+
ai: true
|
|
322
|
+
})
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
```js
|
|
326
|
+
// Voice note with AI badge
|
|
327
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
328
|
+
audio: { url: './voice.ogg' },
|
|
329
|
+
mimetype: 'audio/ogg; codecs=opus',
|
|
330
|
+
ptt: true,
|
|
331
|
+
ai: true
|
|
332
|
+
})
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
> **How it works:** Queen Ruva Baileys injects `ai="1"` into the WhatsApp message stanza, which triggers WhatsApp to render the `AI ✦` indicator on the recipient's side. No extra setup or API keys needed — just pass `ai: true`.
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
### Quote / Reply Message
|
|
340
|
+
|
|
341
|
+
```js
|
|
342
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
343
|
+
text: 'This is a reply!'
|
|
344
|
+
}, {
|
|
345
|
+
quoted: messageToQuote
|
|
346
|
+
})
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
### Mention User
|
|
350
|
+
|
|
351
|
+
```js
|
|
352
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
353
|
+
text: '@2637XXXXXXXX hello!',
|
|
354
|
+
mentions: ['2637XXXXXXXX@s.whatsapp.net']
|
|
355
|
+
})
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### Forward Messages
|
|
359
|
+
|
|
360
|
+
```js
|
|
361
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
362
|
+
forward: messageToForward
|
|
363
|
+
})
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
### Location Message
|
|
367
|
+
|
|
368
|
+
```js
|
|
369
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
370
|
+
location: {
|
|
371
|
+
degreesLatitude: -17.8252,
|
|
372
|
+
degreesLongitude: 31.0335
|
|
373
|
+
}
|
|
374
|
+
})
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### Contact Message
|
|
378
|
+
|
|
379
|
+
```js
|
|
380
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
381
|
+
contacts: {
|
|
382
|
+
displayName: 'John',
|
|
383
|
+
contacts: [{ vcard: 'BEGIN:VCARD\nVERSION:3.0\nFN:John\nTEL;type=CELL:+2637XXXXXXXX\nEND:VCARD' }]
|
|
384
|
+
}
|
|
385
|
+
})
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
### Reaction Message
|
|
389
|
+
|
|
390
|
+
```js
|
|
391
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
392
|
+
react: {
|
|
393
|
+
text: '🔥',
|
|
394
|
+
key: messageToReactTo.key
|
|
395
|
+
}
|
|
396
|
+
})
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
### Pin Message
|
|
400
|
+
|
|
401
|
+
```js
|
|
402
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
403
|
+
pin: messageToPin.key,
|
|
404
|
+
type: 1 // 1 = pin, 0 = unpin
|
|
405
|
+
})
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
### Poll Message
|
|
409
|
+
|
|
410
|
+
```js
|
|
411
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
412
|
+
poll: {
|
|
413
|
+
name: 'Favourite colour?',
|
|
414
|
+
values: ['Red', 'Blue', 'Green'],
|
|
415
|
+
selectableCount: 1
|
|
416
|
+
}
|
|
417
|
+
})
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
### Link Preview
|
|
421
|
+
|
|
422
|
+
```js
|
|
423
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
424
|
+
text: 'Check this out: https://silentbyte-plantforms-inc.zone.id'
|
|
425
|
+
}, {
|
|
426
|
+
detectLinks: true
|
|
427
|
+
})
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
### Image Message
|
|
431
|
+
|
|
432
|
+
```js
|
|
433
|
+
// From file
|
|
434
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
435
|
+
image: { url: './image.jpg' },
|
|
436
|
+
caption: 'Sent via Queen Ruva Baileys'
|
|
437
|
+
})
|
|
438
|
+
|
|
439
|
+
// From buffer
|
|
440
|
+
import { readFileSync } from 'fs'
|
|
441
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
442
|
+
image: readFileSync('./image.jpg'),
|
|
443
|
+
caption: 'Hello!'
|
|
444
|
+
})
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
### Video Message
|
|
448
|
+
|
|
449
|
+
```js
|
|
450
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
451
|
+
video: { url: './video.mp4' },
|
|
452
|
+
caption: 'Watch this!',
|
|
453
|
+
gifPlayback: false
|
|
454
|
+
})
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
### Audio / PTT Message
|
|
458
|
+
|
|
459
|
+
```js
|
|
460
|
+
// Audio file
|
|
461
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
462
|
+
audio: { url: './audio.mp3' },
|
|
463
|
+
mimetype: 'audio/mp4'
|
|
464
|
+
})
|
|
465
|
+
|
|
466
|
+
// Voice note (PTT)
|
|
467
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
468
|
+
audio: { url: './voice.ogg' },
|
|
469
|
+
mimetype: 'audio/ogg; codecs=opus',
|
|
470
|
+
ptt: true
|
|
471
|
+
})
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
### GIF Message
|
|
475
|
+
|
|
476
|
+
```js
|
|
477
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
478
|
+
video: { url: './animation.mp4' },
|
|
479
|
+
gifPlayback: true,
|
|
480
|
+
caption: 'lol'
|
|
481
|
+
})
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
### View Once Message
|
|
485
|
+
|
|
486
|
+
```js
|
|
487
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
488
|
+
image: { url: './secret.jpg' },
|
|
489
|
+
viewOnce: true,
|
|
490
|
+
caption: 'View once!'
|
|
491
|
+
})
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
### Document Message
|
|
495
|
+
|
|
496
|
+
```js
|
|
497
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
498
|
+
document: { url: './file.pdf' },
|
|
499
|
+
mimetype: 'application/pdf',
|
|
500
|
+
fileName: 'report.pdf'
|
|
501
|
+
})
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
### Sticker Message
|
|
505
|
+
|
|
506
|
+
```js
|
|
507
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
508
|
+
sticker: { url: './sticker.webp' }
|
|
509
|
+
})
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
---
|
|
513
|
+
|
|
514
|
+
## Modify Messages
|
|
515
|
+
|
|
516
|
+
### Delete for Everyone
|
|
517
|
+
|
|
518
|
+
```js
|
|
519
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
520
|
+
delete: messageToDelete.key
|
|
521
|
+
})
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
### Edit Message
|
|
525
|
+
|
|
526
|
+
```js
|
|
527
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
528
|
+
edit: messageToEdit.key,
|
|
529
|
+
text: 'Updated text here'
|
|
530
|
+
})
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
---
|
|
534
|
+
|
|
535
|
+
## Receiving Messages
|
|
536
|
+
|
|
537
|
+
```js
|
|
538
|
+
sock.ev.on('messages.upsert', ({ messages }) => {
|
|
539
|
+
for (const msg of messages) {
|
|
540
|
+
if (msg.key.fromMe) continue
|
|
541
|
+
|
|
542
|
+
const text = msg.message?.conversation
|
|
543
|
+
|| msg.message?.extendedTextMessage?.text
|
|
544
|
+
|| ''
|
|
545
|
+
|
|
546
|
+
const sender = msg.key.remoteJid
|
|
547
|
+
console.log(`[${sender}]: ${text}`)
|
|
548
|
+
}
|
|
549
|
+
})
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
---
|
|
553
|
+
|
|
554
|
+
## Read & Presence
|
|
555
|
+
|
|
556
|
+
### Read Messages
|
|
557
|
+
|
|
558
|
+
```js
|
|
559
|
+
await sock.readMessages([
|
|
560
|
+
{
|
|
561
|
+
remoteJid: '2637XXXXXXXX@s.whatsapp.net',
|
|
562
|
+
id: 'MESSAGE_ID',
|
|
563
|
+
fromMe: false
|
|
564
|
+
}
|
|
565
|
+
])
|
|
566
|
+
```
|
|
567
|
+
|
|
568
|
+
### Send Typing / Recording / Online
|
|
569
|
+
|
|
570
|
+
```js
|
|
571
|
+
// Start typing
|
|
572
|
+
await sock.sendPresenceUpdate('composing', '2637XXXXXXXX@s.whatsapp.net')
|
|
573
|
+
|
|
574
|
+
// Recording audio
|
|
575
|
+
await sock.sendPresenceUpdate('recording', '2637XXXXXXXX@s.whatsapp.net')
|
|
576
|
+
|
|
577
|
+
// Stop typing / go back to available
|
|
578
|
+
await sock.sendPresenceUpdate('paused', '2637XXXXXXXX@s.whatsapp.net')
|
|
579
|
+
|
|
580
|
+
// Set online
|
|
581
|
+
await sock.sendPresenceUpdate('available')
|
|
582
|
+
|
|
583
|
+
// Set offline
|
|
584
|
+
await sock.sendPresenceUpdate('unavailable')
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
### Subscribe to Presence
|
|
588
|
+
|
|
589
|
+
```js
|
|
590
|
+
// Subscribe to someone's presence (online, typing, etc.)
|
|
591
|
+
await sock.presenceSubscribe('2637XXXXXXXX@s.whatsapp.net')
|
|
592
|
+
|
|
593
|
+
sock.ev.on('presence.update', ({ id, presences }) => {
|
|
594
|
+
console.log(`${id}:`, presences)
|
|
595
|
+
})
|
|
596
|
+
```
|
|
597
|
+
|
|
598
|
+
---
|
|
599
|
+
|
|
600
|
+
## Modifying Chats
|
|
601
|
+
|
|
602
|
+
### Archive a Chat
|
|
603
|
+
|
|
604
|
+
```js
|
|
605
|
+
// Archive
|
|
606
|
+
await sock.chatModify({ archive: true }, '2637XXXXXXXX@s.whatsapp.net')
|
|
607
|
+
|
|
608
|
+
// Unarchive
|
|
609
|
+
await sock.chatModify({ archive: false }, '2637XXXXXXXX@s.whatsapp.net')
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
### Mute / Unmute a Chat
|
|
613
|
+
|
|
614
|
+
```js
|
|
615
|
+
// Mute for 8 hours
|
|
616
|
+
await sock.chatModify({
|
|
617
|
+
mute: Date.now() + (8 * 60 * 60 * 1000)
|
|
618
|
+
}, '2637XXXXXXXX@s.whatsapp.net')
|
|
619
|
+
|
|
620
|
+
// Unmute
|
|
621
|
+
await sock.chatModify({ mute: null }, '2637XXXXXXXX@s.whatsapp.net')
|
|
622
|
+
```
|
|
623
|
+
|
|
624
|
+
### Mark Chat Read / Unread
|
|
625
|
+
|
|
626
|
+
```js
|
|
627
|
+
// Mark as read
|
|
628
|
+
await sock.chatModify({ markRead: true }, '2637XXXXXXXX@s.whatsapp.net')
|
|
629
|
+
|
|
630
|
+
// Mark as unread
|
|
631
|
+
await sock.chatModify({ markRead: false }, '2637XXXXXXXX@s.whatsapp.net')
|
|
632
|
+
```
|
|
633
|
+
|
|
634
|
+
### Delete a Chat
|
|
635
|
+
|
|
636
|
+
```js
|
|
637
|
+
await sock.chatModify({
|
|
638
|
+
delete: true,
|
|
639
|
+
lastMessages: [{ key: lastMessage.key, messageTimestamp: lastMessage.messageTimestamp }]
|
|
640
|
+
}, '2637XXXXXXXX@s.whatsapp.net')
|
|
641
|
+
```
|
|
642
|
+
|
|
643
|
+
### Star / Unstar a Message
|
|
644
|
+
|
|
645
|
+
```js
|
|
646
|
+
// Star
|
|
647
|
+
await sock.star('2637XXXXXXXX@s.whatsapp.net', [message], true)
|
|
648
|
+
|
|
649
|
+
// Unstar
|
|
650
|
+
await sock.star('2637XXXXXXXX@s.whatsapp.net', [message], false)
|
|
651
|
+
```
|
|
652
|
+
|
|
653
|
+
### Disappearing Messages
|
|
654
|
+
|
|
655
|
+
```js
|
|
656
|
+
// Enable disappearing messages (7 days)
|
|
657
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
658
|
+
disappearingMessagesInChat: 604800
|
|
659
|
+
})
|
|
660
|
+
|
|
661
|
+
// Disable
|
|
662
|
+
await sock.sendMessage('2637XXXXXXXX@s.whatsapp.net', {
|
|
663
|
+
disappearingMessagesInChat: 0
|
|
664
|
+
})
|
|
665
|
+
```
|
|
666
|
+
|
|
667
|
+
---
|
|
668
|
+
|
|
669
|
+
## User Queries
|
|
670
|
+
|
|
671
|
+
### Check if ID Exists
|
|
672
|
+
|
|
673
|
+
```js
|
|
674
|
+
const [result] = await sock.onWhatsApp('2637XXXXXXXX')
|
|
675
|
+
console.log(result?.exists, result?.jid)
|
|
676
|
+
```
|
|
677
|
+
|
|
678
|
+
### Fetch Status
|
|
679
|
+
|
|
680
|
+
```js
|
|
681
|
+
const statuses = await sock.fetchStatus('2637XXXXXXXX@s.whatsapp.net')
|
|
682
|
+
console.log(statuses)
|
|
683
|
+
```
|
|
684
|
+
|
|
685
|
+
### Fetch Profile Picture
|
|
686
|
+
|
|
687
|
+
```js
|
|
688
|
+
const url = await sock.profilePictureUrl('2637XXXXXXXX@s.whatsapp.net', 'image')
|
|
689
|
+
console.log('Profile picture:', url)
|
|
690
|
+
|
|
691
|
+
// Group profile picture
|
|
692
|
+
const groupUrl = await sock.profilePictureUrl('GROUPID@g.us', 'image')
|
|
693
|
+
```
|
|
694
|
+
|
|
695
|
+
### Fetch Business Profile
|
|
696
|
+
|
|
697
|
+
```js
|
|
698
|
+
const profile = await sock.getBusinessProfile('2637XXXXXXXX@s.whatsapp.net')
|
|
699
|
+
console.log(profile?.description, profile?.category)
|
|
700
|
+
```
|
|
701
|
+
|
|
702
|
+
### Fetch Blocklist
|
|
703
|
+
|
|
704
|
+
```js
|
|
705
|
+
const blocked = await sock.fetchBlocklist()
|
|
706
|
+
console.log('Blocked:', blocked)
|
|
707
|
+
```
|
|
708
|
+
|
|
709
|
+
---
|
|
710
|
+
|
|
711
|
+
## Change Profile
|
|
712
|
+
|
|
713
|
+
### Change Status
|
|
714
|
+
|
|
715
|
+
```js
|
|
716
|
+
await sock.updateProfileStatus('Powered by Queen Ruva Baileys 🔥')
|
|
717
|
+
```
|
|
718
|
+
|
|
719
|
+
### Change Name
|
|
720
|
+
|
|
721
|
+
```js
|
|
722
|
+
await sock.updateProfileName('My Bot Name')
|
|
723
|
+
```
|
|
724
|
+
|
|
725
|
+
### Change Profile Picture
|
|
726
|
+
|
|
727
|
+
```js
|
|
728
|
+
await sock.updateProfilePicture('me', { url: './avatar.jpg' })
|
|
729
|
+
|
|
730
|
+
// Change group picture
|
|
731
|
+
await sock.updateProfilePicture('GROUPID@g.us', { url: './group.jpg' })
|
|
732
|
+
```
|
|
733
|
+
|
|
734
|
+
### Remove Profile Picture
|
|
735
|
+
|
|
736
|
+
```js
|
|
737
|
+
await sock.removeProfilePicture('me')
|
|
738
|
+
```
|
|
739
|
+
|
|
740
|
+
---
|
|
741
|
+
|
|
742
|
+
## Privacy Settings
|
|
743
|
+
|
|
744
|
+
### Block / Unblock User
|
|
745
|
+
|
|
746
|
+
```js
|
|
747
|
+
// Block
|
|
748
|
+
await sock.updateBlockStatus('2637XXXXXXXX@s.whatsapp.net', 'block')
|
|
749
|
+
|
|
750
|
+
// Unblock
|
|
751
|
+
await sock.updateBlockStatus('2637XXXXXXXX@s.whatsapp.net', 'unblock')
|
|
752
|
+
```
|
|
753
|
+
|
|
754
|
+
### Update Last Seen Privacy
|
|
755
|
+
|
|
756
|
+
```js
|
|
757
|
+
// Options: 'all' | 'contacts' | 'contact_blacklist' | 'none'
|
|
758
|
+
await sock.updateLastSeenPrivacy('contacts')
|
|
759
|
+
```
|
|
760
|
+
|
|
761
|
+
### Update Online Privacy
|
|
762
|
+
|
|
763
|
+
```js
|
|
764
|
+
await sock.updateOnlinePrivacy('match_last_seen')
|
|
765
|
+
```
|
|
766
|
+
|
|
767
|
+
### Update Profile Picture Privacy
|
|
768
|
+
|
|
769
|
+
```js
|
|
770
|
+
await sock.updateProfilePicturePrivacy('contacts')
|
|
771
|
+
```
|
|
772
|
+
|
|
773
|
+
### Update Status Privacy
|
|
774
|
+
|
|
775
|
+
```js
|
|
776
|
+
await sock.updateStatusPrivacy('contacts')
|
|
777
|
+
```
|
|
778
|
+
|
|
779
|
+
### Update Read Receipts Privacy
|
|
780
|
+
|
|
781
|
+
```js
|
|
782
|
+
// 'all' = show read receipts | 'none' = hide
|
|
783
|
+
await sock.updateReadReceiptsPrivacy('all')
|
|
784
|
+
```
|
|
785
|
+
|
|
786
|
+
### Update Groups Add Privacy
|
|
787
|
+
|
|
788
|
+
```js
|
|
789
|
+
// Who can add you to groups: 'all' | 'contacts' | 'contact_blacklist'
|
|
790
|
+
await sock.updateGroupsAddPrivacy('contacts')
|
|
791
|
+
```
|
|
792
|
+
|
|
793
|
+
### Update Default Disappearing Mode
|
|
794
|
+
|
|
795
|
+
```js
|
|
796
|
+
// Duration in seconds — 86400 = 1 day, 604800 = 7 days, 7776000 = 90 days
|
|
797
|
+
await sock.updateDefaultDisappearingMode(604800)
|
|
798
|
+
```
|
|
799
|
+
|
|
800
|
+
---
|
|
801
|
+
|
|
802
|
+
## Groups
|
|
803
|
+
|
|
804
|
+
### Create a Group
|
|
805
|
+
|
|
806
|
+
```js
|
|
807
|
+
const group = await sock.groupCreate('My Bot Group', [
|
|
808
|
+
'2637XXXXXXXX@s.whatsapp.net',
|
|
809
|
+
'2637YYYYYYYY@s.whatsapp.net'
|
|
810
|
+
])
|
|
811
|
+
console.log('Created:', group.id)
|
|
812
|
+
```
|
|
813
|
+
|
|
814
|
+
### Add / Remove / Promote / Demote
|
|
815
|
+
|
|
816
|
+
```js
|
|
817
|
+
// Add participants
|
|
818
|
+
await sock.groupParticipantsUpdate('GROUPID@g.us', ['2637XXXXXXXX@s.whatsapp.net'], 'add')
|
|
819
|
+
|
|
820
|
+
// Remove participants
|
|
821
|
+
await sock.groupParticipantsUpdate('GROUPID@g.us', ['2637XXXXXXXX@s.whatsapp.net'], 'remove')
|
|
822
|
+
|
|
823
|
+
// Promote to admin
|
|
824
|
+
await sock.groupParticipantsUpdate('GROUPID@g.us', ['2637XXXXXXXX@s.whatsapp.net'], 'promote')
|
|
825
|
+
|
|
826
|
+
// Demote from admin
|
|
827
|
+
await sock.groupParticipantsUpdate('GROUPID@g.us', ['2637XXXXXXXX@s.whatsapp.net'], 'demote')
|
|
828
|
+
```
|
|
829
|
+
|
|
830
|
+
### Change Group Name
|
|
831
|
+
|
|
832
|
+
```js
|
|
833
|
+
await sock.groupUpdateSubject('GROUPID@g.us', 'New Group Name')
|
|
834
|
+
```
|
|
835
|
+
|
|
836
|
+
### Change Group Description
|
|
837
|
+
|
|
838
|
+
```js
|
|
839
|
+
await sock.groupUpdateDescription('GROUPID@g.us', 'New description here')
|
|
840
|
+
```
|
|
841
|
+
|
|
842
|
+
### Change Group Settings
|
|
843
|
+
|
|
844
|
+
```js
|
|
845
|
+
// Only admins can send messages
|
|
846
|
+
await sock.groupSettingUpdate('GROUPID@g.us', 'announcement')
|
|
847
|
+
|
|
848
|
+
// Everyone can send messages
|
|
849
|
+
await sock.groupSettingUpdate('GROUPID@g.us', 'not_announcement')
|
|
850
|
+
|
|
851
|
+
// Only admins can edit group info
|
|
852
|
+
await sock.groupSettingUpdate('GROUPID@g.us', 'locked')
|
|
853
|
+
|
|
854
|
+
// Everyone can edit group info
|
|
855
|
+
await sock.groupSettingUpdate('GROUPID@g.us', 'unlocked')
|
|
856
|
+
```
|
|
857
|
+
|
|
858
|
+
### Leave a Group
|
|
859
|
+
|
|
860
|
+
```js
|
|
861
|
+
await sock.groupLeave('GROUPID@g.us')
|
|
862
|
+
```
|
|
863
|
+
|
|
864
|
+
### Get Invite Code
|
|
865
|
+
|
|
866
|
+
```js
|
|
867
|
+
const code = await sock.groupInviteCode('GROUPID@g.us')
|
|
868
|
+
console.log('Invite link: https://chat.whatsapp.com/' + code)
|
|
869
|
+
```
|
|
870
|
+
|
|
871
|
+
### Revoke Invite Code
|
|
872
|
+
|
|
873
|
+
```js
|
|
874
|
+
const newCode = await sock.groupRevokeInvite('GROUPID@g.us')
|
|
875
|
+
```
|
|
876
|
+
|
|
877
|
+
### Join via Invite Code
|
|
878
|
+
|
|
879
|
+
```js
|
|
880
|
+
await sock.groupAcceptInvite('INVITECODE')
|
|
881
|
+
```
|
|
882
|
+
|
|
883
|
+
### Get Group Info by Invite Code
|
|
884
|
+
|
|
885
|
+
```js
|
|
886
|
+
const info = await sock.groupGetInviteInfo('INVITECODE')
|
|
887
|
+
console.log(info)
|
|
888
|
+
```
|
|
889
|
+
|
|
890
|
+
### Get Group Metadata
|
|
891
|
+
|
|
892
|
+
```js
|
|
893
|
+
const meta = await sock.groupMetadata('GROUPID@g.us')
|
|
894
|
+
console.log(meta.subject, meta.participants)
|
|
895
|
+
```
|
|
896
|
+
|
|
897
|
+
### Get All Participating Groups
|
|
898
|
+
|
|
899
|
+
```js
|
|
900
|
+
const groups = await sock.groupFetchAllParticipating()
|
|
901
|
+
console.log(Object.values(groups))
|
|
902
|
+
```
|
|
903
|
+
|
|
904
|
+
### Toggle Ephemeral
|
|
905
|
+
|
|
906
|
+
```js
|
|
907
|
+
// Enable ephemeral (disappearing) — 604800 = 7 days
|
|
908
|
+
await sock.groupToggleEphemeral('GROUPID@g.us', 604800)
|
|
909
|
+
|
|
910
|
+
// Disable
|
|
911
|
+
await sock.groupToggleEphemeral('GROUPID@g.us', 0)
|
|
912
|
+
```
|
|
913
|
+
|
|
914
|
+
### Approve / Reject Join Requests
|
|
915
|
+
|
|
916
|
+
```js
|
|
917
|
+
// Get pending requests
|
|
918
|
+
const requests = await sock.groupRequestParticipantsList('GROUPID@g.us')
|
|
919
|
+
|
|
920
|
+
// Approve
|
|
921
|
+
await sock.groupRequestParticipantsUpdate('GROUPID@g.us', ['2637XXXXXXXX@s.whatsapp.net'], 'approve')
|
|
922
|
+
|
|
923
|
+
// Reject
|
|
924
|
+
await sock.groupRequestParticipantsUpdate('GROUPID@g.us', ['2637XXXXXXXX@s.whatsapp.net'], 'reject')
|
|
925
|
+
```
|
|
926
|
+
|
|
927
|
+
---
|
|
928
|
+
|
|
929
|
+
## Broadcast & Stories
|
|
930
|
+
|
|
931
|
+
### Send Broadcast / Status
|
|
932
|
+
|
|
933
|
+
```js
|
|
934
|
+
// Text status
|
|
935
|
+
await sock.sendMessage('status@broadcast', {
|
|
936
|
+
text: 'Queen Ruva Baileys is live! 🔥'
|
|
937
|
+
})
|
|
938
|
+
|
|
939
|
+
// Image status
|
|
940
|
+
await sock.sendMessage('status@broadcast', {
|
|
941
|
+
image: { url: './banner.jpg' },
|
|
942
|
+
caption: 'Powered by Iconic Tech'
|
|
943
|
+
})
|
|
944
|
+
|
|
945
|
+
// Send to specific contacts
|
|
946
|
+
await sock.sendMessage('status@broadcast', {
|
|
947
|
+
text: 'Hello everyone!'
|
|
948
|
+
}, {
|
|
949
|
+
statusJidList: [
|
|
950
|
+
'2637XXXXXXXX@s.whatsapp.net',
|
|
951
|
+
'2637YYYYYYYY@s.whatsapp.net'
|
|
952
|
+
]
|
|
953
|
+
})
|
|
954
|
+
```
|
|
955
|
+
|
|
956
|
+
---
|
|
957
|
+
|
|
958
|
+
## Media
|
|
959
|
+
|
|
960
|
+
### Download Media Message
|
|
961
|
+
|
|
962
|
+
```js
|
|
963
|
+
import { downloadMediaMessage } from 'queenruva-socket'
|
|
964
|
+
|
|
965
|
+
sock.ev.on('messages.upsert', async ({ messages }) => {
|
|
966
|
+
for (const msg of messages) {
|
|
967
|
+
if (msg.message?.imageMessage) {
|
|
968
|
+
const buffer = await downloadMediaMessage(msg, 'buffer', {})
|
|
969
|
+
// buffer is ready to save or process
|
|
970
|
+
}
|
|
971
|
+
}
|
|
972
|
+
})
|
|
973
|
+
```
|
|
974
|
+
|
|
975
|
+
### Re-upload Media to WhatsApp
|
|
976
|
+
|
|
977
|
+
```js
|
|
978
|
+
await sock.updateMediaMessage(message)
|
|
979
|
+
```
|
|
980
|
+
|
|
981
|
+
---
|
|
982
|
+
|
|
983
|
+
## Reject Call
|
|
984
|
+
|
|
985
|
+
```js
|
|
986
|
+
sock.ev.on('call', async (calls) => {
|
|
987
|
+
for (const call of calls) {
|
|
988
|
+
if (call.status === 'offer') {
|
|
989
|
+
await sock.rejectCall(call.id, call.from)
|
|
990
|
+
}
|
|
991
|
+
}
|
|
992
|
+
})
|
|
993
|
+
```
|
|
994
|
+
|
|
995
|
+
---
|
|
996
|
+
|
|
997
|
+
## setup
|
|
998
|
+
```js
|
|
999
|
+
const {
|
|
1000
|
+
default: makeWASocket,
|
|
1001
|
+
fetchLatestQueenruvaBaileysVersion,
|
|
1002
|
+
downloadContentFromMessage,
|
|
1003
|
+
useMultiFileAuthState,
|
|
1004
|
+
BufferJSON,
|
|
1005
|
+
WA_DEFAULT_EPHEMERAL,
|
|
1006
|
+
generateWAMessageFromContent,
|
|
1007
|
+
proto,
|
|
1008
|
+
generateWAMessageContent,
|
|
1009
|
+
generateWAMessage,
|
|
1010
|
+
prepareWAMessageMedia,
|
|
1011
|
+
areJidsSameUser,
|
|
1012
|
+
getContentType
|
|
1013
|
+
} = require('queenruva-socket');
|
|
1014
|
+
```
|
|
1015
|
+
---
|
|
1016
|
+
|
|
1017
|
+
```js
|
|
1018
|
+
if (!IconicTechInc.public) {
|
|
1019
|
+
if (!isCreator && !m.key.fromMe) return
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
if (autoread) {
|
|
1023
|
+
IconicTechInc.readMessages([m.key])
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
if (global.autoTyping) {
|
|
1027
|
+
IconicTechInc.sendPresenceUpdate('composing', from)
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
if (global.autoRecording) {
|
|
1031
|
+
IconicTechInc.sendPresenceUpdate('recording', from)
|
|
1032
|
+
};
|
|
1033
|
+
```
|
|
1034
|
+
|
|
1035
|
+
|
|
1036
|
+
```
|
|
1037
|
+
|
|
1038
|
+
## Console Banner
|
|
1039
|
+
|
|
1040
|
+
Every time your bot starts, a clean branded banner is printed automatically:
|
|
1041
|
+
|
|
1042
|
+
```
|
|
1043
|
+
══════════════════════════════════════════════════════════════
|
|
1044
|
+
██████ ██ ██ ███████ ███████ ███ ██
|
|
1045
|
+
██ ██ ██ ██ ██ ██ ████ ██
|
|
1046
|
+
██ ██ ██ ██ █████ █████ ██ ██ ██
|
|
1047
|
+
██ ▄▄ ██ ██ ██ ██ ██ ██ ██ ██
|
|
1048
|
+
██████ ██████ ███████ ███████ ██ ████
|
|
1049
|
+
▀▀
|
|
1050
|
+
|
|
1051
|
+
R U V A — B A I L E Y S
|
|
1052
|
+
|
|
1053
|
+
Version v5.6.21
|
|
1054
|
+
Author Iconic Tech
|
|
1055
|
+
Website https://silentbyte-plantforms-inc.zone.id
|
|
1056
|
+
══════════════════════════════════════════════════════════════
|
|
1057
|
+
```
|
|
1058
|
+
|
|
1059
|
+
---
|
|
1060
|
+
|
|
1061
|
+
## Disclaimer
|
|
1062
|
+
|
|
1063
|
+
This project is **not** affiliated with, associated, authorized, endorsed by, or in any way officially connected with WhatsApp or Meta Platforms Inc.
|
|
1064
|
+
|
|
1065
|
+
"WhatsApp" and related names, marks, and images are registered trademarks of their respective owners. Use responsibly. Do not violate WhatsApp's Terms of Service.
|
|
1066
|
+
|
|
1067
|
+
---
|
|
1068
|
+
|
|
1069
|
+
## Links
|
|
1070
|
+
|
|
1071
|
+
| | |
|
|
1072
|
+
|---|---|
|
|
1073
|
+
| Website | [silentbyte-plantforms-inc.zone.id](https://silentbyte-plantforms-inc.zone.id) |
|
|
1074
|
+
| WhatsApp Channel | [Open Channel](https://whatsapp.com/channel/0029Vak32nE4o7qP75htEB3I) |
|
|
1075
|
+
| GitHub | [iconictech-dev/queenruva-socket](https://github.com/iconictech-dev/queenruva-socket) |
|
|
1076
|
+
|
|
1077
|
+
---
|
|
1078
|
+
|
|
1079
|
+
<p align="center">
|
|
1080
|
+
<strong>Queen Ruva Baileys</strong> — crafted with care by <strong>Iconic Tech</strong><br/>
|
|
1081
|
+
<sub>Silentbyte Platforms Inc © 2026</sub>
|
|
1082
|
+
</p>
|