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.
Files changed (205) hide show
  1. package/LICENSE +31 -0
  2. package/README.md +1082 -0
  3. package/WAProto/GenerateStatics.sh +3 -0
  4. package/WAProto/WAProto.proto +5479 -0
  5. package/WAProto/fix-imports.js +85 -0
  6. package/WAProto/index.d.ts +14017 -0
  7. package/WAProto/index.js +97691 -0
  8. package/engine-requirements.js +11 -0
  9. package/lib/Defaults/index.d.ts +75 -0
  10. package/lib/Defaults/index.js +129 -0
  11. package/lib/Signal/Group/ciphertext-message.d.ts +10 -0
  12. package/lib/Signal/Group/ciphertext-message.js +12 -0
  13. package/lib/Signal/Group/group-session-builder.d.ts +15 -0
  14. package/lib/Signal/Group/group-session-builder.js +30 -0
  15. package/lib/Signal/Group/group_cipher.d.ts +17 -0
  16. package/lib/Signal/Group/group_cipher.js +82 -0
  17. package/lib/Signal/Group/index.d.ts +12 -0
  18. package/lib/Signal/Group/index.js +12 -0
  19. package/lib/Signal/Group/keyhelper.d.ts +11 -0
  20. package/lib/Signal/Group/keyhelper.js +18 -0
  21. package/lib/Signal/Group/sender-chain-key.d.ts +14 -0
  22. package/lib/Signal/Group/sender-chain-key.js +26 -0
  23. package/lib/Signal/Group/sender-key-distribution-message.d.ts +17 -0
  24. package/lib/Signal/Group/sender-key-distribution-message.js +63 -0
  25. package/lib/Signal/Group/sender-key-message.d.ts +19 -0
  26. package/lib/Signal/Group/sender-key-message.js +66 -0
  27. package/lib/Signal/Group/sender-key-name.d.ts +18 -0
  28. package/lib/Signal/Group/sender-key-name.js +48 -0
  29. package/lib/Signal/Group/sender-key-record.d.ts +31 -0
  30. package/lib/Signal/Group/sender-key-record.js +41 -0
  31. package/lib/Signal/Group/sender-key-state.d.ts +39 -0
  32. package/lib/Signal/Group/sender-key-state.js +84 -0
  33. package/lib/Signal/Group/sender-message-key.d.ts +12 -0
  34. package/lib/Signal/Group/sender-message-key.js +26 -0
  35. package/lib/Signal/libsignal.d.ts +5 -0
  36. package/lib/Signal/libsignal.js +431 -0
  37. package/lib/Signal/lid-mapping.d.ts +23 -0
  38. package/lib/Signal/lid-mapping.js +277 -0
  39. package/lib/Socket/Client/index.d.ts +3 -0
  40. package/lib/Socket/Client/index.js +3 -0
  41. package/lib/Socket/Client/types.d.ts +16 -0
  42. package/lib/Socket/Client/types.js +11 -0
  43. package/lib/Socket/Client/websocket.d.ts +13 -0
  44. package/lib/Socket/Client/websocket.js +54 -0
  45. package/lib/Socket/business.d.ts +217 -0
  46. package/lib/Socket/business.js +379 -0
  47. package/lib/Socket/chats.d.ts +124 -0
  48. package/lib/Socket/chats.js +1193 -0
  49. package/lib/Socket/communities.d.ts +273 -0
  50. package/lib/Socket/communities.js +431 -0
  51. package/lib/Socket/groups.d.ts +161 -0
  52. package/lib/Socket/groups.js +347 -0
  53. package/lib/Socket/index.d.ts +260 -0
  54. package/lib/Socket/index.js +12 -0
  55. package/lib/Socket/messages-recv.d.ts +203 -0
  56. package/lib/Socket/messages-recv.js +1772 -0
  57. package/lib/Socket/messages-send.d.ts +199 -0
  58. package/lib/Socket/messages-send.js +1160 -0
  59. package/lib/Socket/mex.d.ts +3 -0
  60. package/lib/Socket/mex.js +42 -0
  61. package/lib/Socket/newsletter.d.ts +170 -0
  62. package/lib/Socket/newsletter.js +181 -0
  63. package/lib/Socket/socket.d.ts +59 -0
  64. package/lib/Socket/socket.js +1029 -0
  65. package/lib/Types/Auth.d.ts +117 -0
  66. package/lib/Types/Auth.js +2 -0
  67. package/lib/Types/Bussines.d.ts +25 -0
  68. package/lib/Types/Bussines.js +2 -0
  69. package/lib/Types/Call.d.ts +15 -0
  70. package/lib/Types/Call.js +2 -0
  71. package/lib/Types/Chat.d.ts +124 -0
  72. package/lib/Types/Chat.js +8 -0
  73. package/lib/Types/Contact.d.ts +26 -0
  74. package/lib/Types/Contact.js +2 -0
  75. package/lib/Types/Events.d.ts +256 -0
  76. package/lib/Types/Events.js +2 -0
  77. package/lib/Types/GroupMetadata.d.ts +71 -0
  78. package/lib/Types/GroupMetadata.js +2 -0
  79. package/lib/Types/Label.d.ts +47 -0
  80. package/lib/Types/Label.js +25 -0
  81. package/lib/Types/LabelAssociation.d.ts +30 -0
  82. package/lib/Types/LabelAssociation.js +7 -0
  83. package/lib/Types/Message.d.ts +320 -0
  84. package/lib/Types/Message.js +11 -0
  85. package/lib/Types/Mex.d.ts +141 -0
  86. package/lib/Types/Mex.js +37 -0
  87. package/lib/Types/Product.d.ts +79 -0
  88. package/lib/Types/Product.js +2 -0
  89. package/lib/Types/Signal.d.ts +87 -0
  90. package/lib/Types/Signal.js +2 -0
  91. package/lib/Types/Socket.d.ts +136 -0
  92. package/lib/Types/Socket.js +3 -0
  93. package/lib/Types/State.d.ts +97 -0
  94. package/lib/Types/State.js +56 -0
  95. package/lib/Types/USync.d.ts +26 -0
  96. package/lib/Types/USync.js +2 -0
  97. package/lib/Types/index.d.ts +65 -0
  98. package/lib/Types/index.js +26 -0
  99. package/lib/Utils/auth-utils.d.ts +24 -0
  100. package/lib/Utils/auth-utils.js +302 -0
  101. package/lib/Utils/browser-utils.d.ts +4 -0
  102. package/lib/Utils/browser-utils.js +28 -0
  103. package/lib/Utils/business.d.ts +23 -0
  104. package/lib/Utils/business.js +231 -0
  105. package/lib/Utils/chat-utils.d.ts +100 -0
  106. package/lib/Utils/chat-utils.js +872 -0
  107. package/lib/Utils/companion-reg-client-utils.d.ts +17 -0
  108. package/lib/Utils/companion-reg-client-utils.js +35 -0
  109. package/lib/Utils/crypto.d.ts +37 -0
  110. package/lib/Utils/crypto.js +118 -0
  111. package/lib/Utils/decode-wa-message.d.ts +66 -0
  112. package/lib/Utils/decode-wa-message.js +311 -0
  113. package/lib/Utils/event-buffer.d.ts +36 -0
  114. package/lib/Utils/event-buffer.js +622 -0
  115. package/lib/Utils/generics.d.ts +91 -0
  116. package/lib/Utils/generics.js +378 -0
  117. package/lib/Utils/history.d.ts +24 -0
  118. package/lib/Utils/history.js +134 -0
  119. package/lib/Utils/identity-change-handler.d.ts +44 -0
  120. package/lib/Utils/identity-change-handler.js +50 -0
  121. package/lib/Utils/index.d.ts +22 -0
  122. package/lib/Utils/index.js +22 -0
  123. package/lib/Utils/link-preview.d.ts +21 -0
  124. package/lib/Utils/link-preview.js +85 -0
  125. package/lib/Utils/logger.d.ts +12 -0
  126. package/lib/Utils/logger.js +3 -0
  127. package/lib/Utils/lt-hash.d.ts +8 -0
  128. package/lib/Utils/lt-hash.js +8 -0
  129. package/lib/Utils/make-mutex.d.ts +9 -0
  130. package/lib/Utils/make-mutex.js +33 -0
  131. package/lib/Utils/message-retry-manager.d.ts +115 -0
  132. package/lib/Utils/message-retry-manager.js +265 -0
  133. package/lib/Utils/messages-media.d.ts +133 -0
  134. package/lib/Utils/messages-media.js +786 -0
  135. package/lib/Utils/messages.d.ts +91 -0
  136. package/lib/Utils/messages.js +893 -0
  137. package/lib/Utils/noise-handler.d.ts +20 -0
  138. package/lib/Utils/noise-handler.js +201 -0
  139. package/lib/Utils/offline-node-processor.d.ts +17 -0
  140. package/lib/Utils/offline-node-processor.js +40 -0
  141. package/lib/Utils/pre-key-manager.d.ts +28 -0
  142. package/lib/Utils/pre-key-manager.js +106 -0
  143. package/lib/Utils/process-message.d.ts +60 -0
  144. package/lib/Utils/process-message.js +597 -0
  145. package/lib/Utils/reporting-utils.d.ts +11 -0
  146. package/lib/Utils/reporting-utils.js +258 -0
  147. package/lib/Utils/signal.d.ts +47 -0
  148. package/lib/Utils/signal.js +201 -0
  149. package/lib/Utils/stanza-ack.d.ts +11 -0
  150. package/lib/Utils/stanza-ack.js +38 -0
  151. package/lib/Utils/sync-action-utils.d.ts +19 -0
  152. package/lib/Utils/sync-action-utils.js +49 -0
  153. package/lib/Utils/tc-token-utils.d.ts +37 -0
  154. package/lib/Utils/tc-token-utils.js +163 -0
  155. package/lib/Utils/use-multi-file-auth-state.d.ts +13 -0
  156. package/lib/Utils/use-multi-file-auth-state.js +121 -0
  157. package/lib/Utils/validate-connection.d.ts +11 -0
  158. package/lib/Utils/validate-connection.js +203 -0
  159. package/lib/WABinary/constants.d.ts +28 -0
  160. package/lib/WABinary/constants.js +1301 -0
  161. package/lib/WABinary/decode.d.ts +7 -0
  162. package/lib/WABinary/decode.js +262 -0
  163. package/lib/WABinary/encode.d.ts +3 -0
  164. package/lib/WABinary/encode.js +220 -0
  165. package/lib/WABinary/generic-utils.d.ts +15 -0
  166. package/lib/WABinary/generic-utils.js +113 -0
  167. package/lib/WABinary/index.d.ts +6 -0
  168. package/lib/WABinary/index.js +6 -0
  169. package/lib/WABinary/jid-utils.d.ts +48 -0
  170. package/lib/WABinary/jid-utils.js +96 -0
  171. package/lib/WABinary/types.d.ts +19 -0
  172. package/lib/WABinary/types.js +2 -0
  173. package/lib/WAM/BinaryInfo.d.ts +9 -0
  174. package/lib/WAM/BinaryInfo.js +10 -0
  175. package/lib/WAM/constants.d.ts +40 -0
  176. package/lib/WAM/constants.js +22853 -0
  177. package/lib/WAM/encode.d.ts +3 -0
  178. package/lib/WAM/encode.js +150 -0
  179. package/lib/WAM/index.d.ts +4 -0
  180. package/lib/WAM/index.js +4 -0
  181. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +10 -0
  182. package/lib/WAUSync/Protocols/USyncContactProtocol.js +52 -0
  183. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +23 -0
  184. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +54 -0
  185. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +13 -0
  186. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +27 -0
  187. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +13 -0
  188. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +38 -0
  189. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +10 -0
  190. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +25 -0
  191. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +26 -0
  192. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +51 -0
  193. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +10 -0
  194. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +29 -0
  195. package/lib/WAUSync/Protocols/index.d.ts +6 -0
  196. package/lib/WAUSync/Protocols/index.js +6 -0
  197. package/lib/WAUSync/USyncQuery.d.ts +30 -0
  198. package/lib/WAUSync/USyncQuery.js +98 -0
  199. package/lib/WAUSync/USyncUser.d.ts +17 -0
  200. package/lib/WAUSync/USyncUser.js +31 -0
  201. package/lib/WAUSync/index.d.ts +4 -0
  202. package/lib/WAUSync/index.js +4 -0
  203. package/lib/index.d.ts +12 -0
  204. package/lib/index.js +11 -0
  205. 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 &copy; 2026</sub>
1082
+ </p>