@nanazx/baileys 0.0.0-stage → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1547 -2
- package/WAProto/GenerateStatics.sh +3 -0
- package/WAProto/WAProto.proto +8571 -0
- package/WAProto/fix-imports.js +85 -0
- package/WAProto/index.d.ts +100898 -0
- package/WAProto/index.js +305880 -0
- package/engine-requirements.js +10 -0
- package/lib/Defaults/index.d.ts +75 -0
- package/lib/Defaults/index.d.ts.map +1 -0
- package/lib/Defaults/index.js +129 -0
- package/lib/Defaults/index.js.map +1 -0
- package/lib/Signal/Group/ciphertext-message.d.ts +10 -0
- package/lib/Signal/Group/ciphertext-message.d.ts.map +1 -0
- package/lib/Signal/Group/ciphertext-message.js +12 -0
- package/lib/Signal/Group/ciphertext-message.js.map +1 -0
- package/lib/Signal/Group/group-session-builder.d.ts +15 -0
- package/lib/Signal/Group/group-session-builder.d.ts.map +1 -0
- package/lib/Signal/Group/group-session-builder.js +30 -0
- package/lib/Signal/Group/group-session-builder.js.map +1 -0
- package/lib/Signal/Group/group_cipher.d.ts +17 -0
- package/lib/Signal/Group/group_cipher.d.ts.map +1 -0
- package/lib/Signal/Group/group_cipher.js +82 -0
- package/lib/Signal/Group/group_cipher.js.map +1 -0
- package/lib/Signal/Group/index.d.ts +12 -0
- package/lib/Signal/Group/index.d.ts.map +1 -0
- package/lib/Signal/Group/index.js +12 -0
- package/lib/Signal/Group/index.js.map +1 -0
- package/lib/Signal/Group/keyhelper.d.ts +11 -0
- package/lib/Signal/Group/keyhelper.d.ts.map +1 -0
- package/lib/Signal/Group/keyhelper.js +18 -0
- package/lib/Signal/Group/keyhelper.js.map +1 -0
- package/lib/Signal/Group/sender-chain-key.d.ts +14 -0
- package/lib/Signal/Group/sender-chain-key.d.ts.map +1 -0
- package/lib/Signal/Group/sender-chain-key.js +26 -0
- package/lib/Signal/Group/sender-chain-key.js.map +1 -0
- package/lib/Signal/Group/sender-key-distribution-message.d.ts +17 -0
- package/lib/Signal/Group/sender-key-distribution-message.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-distribution-message.js +63 -0
- package/lib/Signal/Group/sender-key-distribution-message.js.map +1 -0
- package/lib/Signal/Group/sender-key-message.d.ts +19 -0
- package/lib/Signal/Group/sender-key-message.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-message.js +66 -0
- package/lib/Signal/Group/sender-key-message.js.map +1 -0
- package/lib/Signal/Group/sender-key-name.d.ts +18 -0
- package/lib/Signal/Group/sender-key-name.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-name.js +48 -0
- package/lib/Signal/Group/sender-key-name.js.map +1 -0
- package/lib/Signal/Group/sender-key-record.d.ts +31 -0
- package/lib/Signal/Group/sender-key-record.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-record.js +41 -0
- package/lib/Signal/Group/sender-key-record.js.map +1 -0
- package/lib/Signal/Group/sender-key-state.d.ts +39 -0
- package/lib/Signal/Group/sender-key-state.d.ts.map +1 -0
- package/lib/Signal/Group/sender-key-state.js +84 -0
- package/lib/Signal/Group/sender-key-state.js.map +1 -0
- package/lib/Signal/Group/sender-message-key.d.ts +12 -0
- package/lib/Signal/Group/sender-message-key.d.ts.map +1 -0
- package/lib/Signal/Group/sender-message-key.js +26 -0
- package/lib/Signal/Group/sender-message-key.js.map +1 -0
- package/lib/Signal/libsignal.d.ts +5 -0
- package/lib/Signal/libsignal.d.ts.map +1 -0
- package/lib/Signal/libsignal.js +431 -0
- package/lib/Signal/libsignal.js.map +1 -0
- package/lib/Signal/lid-mapping.d.ts +23 -0
- package/lib/Signal/lid-mapping.d.ts.map +1 -0
- package/lib/Signal/lid-mapping.js +277 -0
- package/lib/Signal/lid-mapping.js.map +1 -0
- package/lib/Socket/Client/index.d.ts +3 -0
- package/lib/Socket/Client/index.d.ts.map +1 -0
- package/lib/Socket/Client/index.js +3 -0
- package/lib/Socket/Client/index.js.map +1 -0
- package/lib/Socket/Client/types.d.ts +16 -0
- package/lib/Socket/Client/types.d.ts.map +1 -0
- package/lib/Socket/Client/types.js +11 -0
- package/lib/Socket/Client/types.js.map +1 -0
- package/lib/Socket/Client/websocket.d.ts +13 -0
- package/lib/Socket/Client/websocket.d.ts.map +1 -0
- package/lib/Socket/Client/websocket.js +54 -0
- package/lib/Socket/Client/websocket.js.map +1 -0
- package/lib/Socket/aigroups.js +236 -0
- package/lib/Socket/business.d.ts +217 -0
- package/lib/Socket/business.d.ts.map +1 -0
- package/lib/Socket/business.js +379 -0
- package/lib/Socket/business.js.map +1 -0
- package/lib/Socket/chats.d.ts +125 -0
- package/lib/Socket/chats.d.ts.map +1 -0
- package/lib/Socket/chats.js +1198 -0
- package/lib/Socket/chats.js.map +1 -0
- package/lib/Socket/communities.d.ts +273 -0
- package/lib/Socket/communities.d.ts.map +1 -0
- package/lib/Socket/communities.js +431 -0
- package/lib/Socket/communities.js.map +1 -0
- package/lib/Socket/graphql.js +904 -0
- package/lib/Socket/groups.d.ts +161 -0
- package/lib/Socket/groups.d.ts.map +1 -0
- package/lib/Socket/groups.js +347 -0
- package/lib/Socket/groups.js.map +1 -0
- package/lib/Socket/index.d.ts +260 -0
- package/lib/Socket/index.d.ts.map +1 -0
- package/lib/Socket/index.js +32 -0
- package/lib/Socket/index.js.map +1 -0
- package/lib/Socket/interactive-handler.js +577 -0
- package/lib/Socket/interop.js +562 -0
- package/lib/Socket/managed-account.js +210 -0
- package/lib/Socket/messages-recv.d.ts +203 -0
- package/lib/Socket/messages-recv.d.ts.map +1 -0
- package/lib/Socket/messages-recv.js +1772 -0
- package/lib/Socket/messages-recv.js.map +1 -0
- package/lib/Socket/messages-send.d.ts +199 -0
- package/lib/Socket/messages-send.d.ts.map +1 -0
- package/lib/Socket/messages-send.js +1145 -0
- package/lib/Socket/messages-send.js.map +1 -0
- package/lib/Socket/mex.d.ts +3 -0
- package/lib/Socket/mex.d.ts.map +1 -0
- package/lib/Socket/mex.js +4 -0
- package/lib/Socket/mex.js.map +1 -0
- package/lib/Socket/newsletter.d.ts +170 -0
- package/lib/Socket/newsletter.d.ts.map +1 -0
- package/lib/Socket/newsletter.js +181 -0
- package/lib/Socket/newsletter.js.map +1 -0
- package/lib/Socket/privacy.js +448 -0
- package/lib/Socket/registration.js +430 -0
- package/lib/Socket/socket.d.ts +59 -0
- package/lib/Socket/socket.d.ts.map +1 -0
- package/lib/Socket/socket.js +970 -0
- package/lib/Socket/socket.js.map +1 -0
- package/lib/Socket/username.js +227 -0
- package/lib/Store/index.js +4 -0
- package/lib/Store/make-cache-manager-store.js +87 -0
- package/lib/Store/make-in-memory-store.js +201 -0
- package/lib/Store/make-ordered-dictionary.js +47 -0
- package/lib/Store/object-repository.js +12 -0
- package/lib/Types/Auth.d.ts +117 -0
- package/lib/Types/Auth.d.ts.map +1 -0
- package/lib/Types/Auth.js +2 -0
- package/lib/Types/Auth.js.map +1 -0
- package/lib/Types/Bussines.d.ts +25 -0
- package/lib/Types/Bussines.d.ts.map +1 -0
- package/lib/Types/Bussines.js +2 -0
- package/lib/Types/Bussines.js.map +1 -0
- package/lib/Types/Call.d.ts +15 -0
- package/lib/Types/Call.d.ts.map +1 -0
- package/lib/Types/Call.js +2 -0
- package/lib/Types/Call.js.map +1 -0
- package/lib/Types/Chat.d.ts +124 -0
- package/lib/Types/Chat.d.ts.map +1 -0
- package/lib/Types/Chat.js +8 -0
- package/lib/Types/Chat.js.map +1 -0
- package/lib/Types/Contact.d.ts +26 -0
- package/lib/Types/Contact.d.ts.map +1 -0
- package/lib/Types/Contact.js +2 -0
- package/lib/Types/Contact.js.map +1 -0
- package/lib/Types/Events.d.ts +256 -0
- package/lib/Types/Events.d.ts.map +1 -0
- package/lib/Types/Events.js +2 -0
- package/lib/Types/Events.js.map +1 -0
- package/lib/Types/GroupMetadata.d.ts +71 -0
- package/lib/Types/GroupMetadata.d.ts.map +1 -0
- package/lib/Types/GroupMetadata.js +2 -0
- package/lib/Types/GroupMetadata.js.map +1 -0
- package/lib/Types/Label.d.ts +47 -0
- package/lib/Types/Label.d.ts.map +1 -0
- package/lib/Types/Label.js +25 -0
- package/lib/Types/Label.js.map +1 -0
- package/lib/Types/LabelAssociation.d.ts +30 -0
- package/lib/Types/LabelAssociation.d.ts.map +1 -0
- package/lib/Types/LabelAssociation.js +7 -0
- package/lib/Types/LabelAssociation.js.map +1 -0
- package/lib/Types/Message.d.ts +320 -0
- package/lib/Types/Message.d.ts.map +1 -0
- package/lib/Types/Message.js +11 -0
- package/lib/Types/Message.js.map +1 -0
- package/lib/Types/Mex.d.ts +141 -0
- package/lib/Types/Mex.d.ts.map +1 -0
- package/lib/Types/Mex.js +37 -0
- package/lib/Types/Mex.js.map +1 -0
- package/lib/Types/Newsletter.js +165 -0
- package/lib/Types/Product.d.ts +79 -0
- package/lib/Types/Product.d.ts.map +1 -0
- package/lib/Types/Product.js +2 -0
- package/lib/Types/Product.js.map +1 -0
- package/lib/Types/Signal.d.ts +87 -0
- package/lib/Types/Signal.d.ts.map +1 -0
- package/lib/Types/Signal.js +2 -0
- package/lib/Types/Signal.js.map +1 -0
- package/lib/Types/Socket.d.ts +136 -0
- package/lib/Types/Socket.d.ts.map +1 -0
- package/lib/Types/Socket.js +3 -0
- package/lib/Types/Socket.js.map +1 -0
- package/lib/Types/State.d.ts +97 -0
- package/lib/Types/State.d.ts.map +1 -0
- package/lib/Types/State.js +56 -0
- package/lib/Types/State.js.map +1 -0
- package/lib/Types/USync.d.ts +26 -0
- package/lib/Types/USync.d.ts.map +1 -0
- package/lib/Types/USync.js +2 -0
- package/lib/Types/USync.js.map +1 -0
- package/lib/Types/index.d.ts +66 -0
- package/lib/Types/index.d.ts.map +1 -0
- package/lib/Types/index.js +28 -0
- package/lib/Types/index.js.map +1 -0
- package/lib/Utils/auth-utils.d.ts +24 -0
- package/lib/Utils/auth-utils.d.ts.map +1 -0
- package/lib/Utils/auth-utils.js +302 -0
- package/lib/Utils/auth-utils.js.map +1 -0
- package/lib/Utils/browser-utils.d.ts +4 -0
- package/lib/Utils/browser-utils.d.ts.map +1 -0
- package/lib/Utils/browser-utils.js +29 -0
- package/lib/Utils/browser-utils.js.map +1 -0
- package/lib/Utils/business.d.ts +23 -0
- package/lib/Utils/business.d.ts.map +1 -0
- package/lib/Utils/business.js +231 -0
- package/lib/Utils/business.js.map +1 -0
- package/lib/Utils/chat-utils.d.ts +100 -0
- package/lib/Utils/chat-utils.d.ts.map +1 -0
- package/lib/Utils/chat-utils.js +872 -0
- package/lib/Utils/chat-utils.js.map +1 -0
- package/lib/Utils/companion-reg-client-utils.d.ts +17 -0
- package/lib/Utils/companion-reg-client-utils.d.ts.map +1 -0
- package/lib/Utils/companion-reg-client-utils.js +35 -0
- package/lib/Utils/companion-reg-client-utils.js.map +1 -0
- package/lib/Utils/consumer-application.js +108 -0
- package/lib/Utils/crypto.d.ts +37 -0
- package/lib/Utils/crypto.d.ts.map +1 -0
- package/lib/Utils/crypto.js +118 -0
- package/lib/Utils/crypto.js.map +1 -0
- package/lib/Utils/decode-wa-message.d.ts +66 -0
- package/lib/Utils/decode-wa-message.d.ts.map +1 -0
- package/lib/Utils/decode-wa-message.js +317 -0
- package/lib/Utils/decode-wa-message.js.map +1 -0
- package/lib/Utils/event-buffer.d.ts +36 -0
- package/lib/Utils/event-buffer.d.ts.map +1 -0
- package/lib/Utils/event-buffer.js +622 -0
- package/lib/Utils/event-buffer.js.map +1 -0
- package/lib/Utils/generics.d.ts +92 -0
- package/lib/Utils/generics.d.ts.map +1 -0
- package/lib/Utils/generics.js +393 -0
- package/lib/Utils/generics.js.map +1 -0
- package/lib/Utils/group-history.js +55 -0
- package/lib/Utils/history.d.ts +24 -0
- package/lib/Utils/history.d.ts.map +1 -0
- package/lib/Utils/history.js +134 -0
- package/lib/Utils/history.js.map +1 -0
- package/lib/Utils/identity-change-handler.d.ts +44 -0
- package/lib/Utils/identity-change-handler.d.ts.map +1 -0
- package/lib/Utils/identity-change-handler.js +50 -0
- package/lib/Utils/identity-change-handler.js.map +1 -0
- package/lib/Utils/index.d.ts +22 -0
- package/lib/Utils/index.d.ts.map +1 -0
- package/lib/Utils/index.js +29 -0
- package/lib/Utils/index.js.map +1 -0
- package/lib/Utils/jid-display-normalization.js +171 -0
- package/lib/Utils/link-preview.d.ts +21 -0
- package/lib/Utils/link-preview.d.ts.map +1 -0
- package/lib/Utils/link-preview.js +85 -0
- package/lib/Utils/link-preview.js.map +1 -0
- package/lib/Utils/logger.d.ts +12 -0
- package/lib/Utils/logger.d.ts.map +1 -0
- package/lib/Utils/logger.js +3 -0
- package/lib/Utils/logger.js.map +1 -0
- package/lib/Utils/lt-hash.d.ts +8 -0
- package/lib/Utils/lt-hash.d.ts.map +1 -0
- package/lib/Utils/lt-hash.js +8 -0
- package/lib/Utils/lt-hash.js.map +1 -0
- package/lib/Utils/make-mutex.d.ts +9 -0
- package/lib/Utils/make-mutex.d.ts.map +1 -0
- package/lib/Utils/make-mutex.js +33 -0
- package/lib/Utils/make-mutex.js.map +1 -0
- package/lib/Utils/message-composer.js +241 -0
- package/lib/Utils/message-inspect.js +180 -0
- package/lib/Utils/message-retry-manager.d.ts +115 -0
- package/lib/Utils/message-retry-manager.d.ts.map +1 -0
- package/lib/Utils/message-retry-manager.js +265 -0
- package/lib/Utils/message-retry-manager.js.map +1 -0
- package/lib/Utils/messages-media.d.ts +133 -0
- package/lib/Utils/messages-media.d.ts.map +1 -0
- package/lib/Utils/messages-media.js +788 -0
- package/lib/Utils/messages-media.js.map +1 -0
- package/lib/Utils/messages.d.ts +91 -0
- package/lib/Utils/messages.d.ts.map +1 -0
- package/lib/Utils/messages.js +893 -0
- package/lib/Utils/messages.js.map +1 -0
- package/lib/Utils/meta-ai-msmsg.js +225 -0
- package/lib/Utils/noise-handler.d.ts +20 -0
- package/lib/Utils/noise-handler.d.ts.map +1 -0
- package/lib/Utils/noise-handler.js +201 -0
- package/lib/Utils/noise-handler.js.map +1 -0
- package/lib/Utils/offline-node-processor.d.ts +17 -0
- package/lib/Utils/offline-node-processor.d.ts.map +1 -0
- package/lib/Utils/offline-node-processor.js +40 -0
- package/lib/Utils/offline-node-processor.js.map +1 -0
- package/lib/Utils/pre-key-manager.d.ts +28 -0
- package/lib/Utils/pre-key-manager.d.ts.map +1 -0
- package/lib/Utils/pre-key-manager.js +106 -0
- package/lib/Utils/pre-key-manager.js.map +1 -0
- package/lib/Utils/process-message.d.ts +60 -0
- package/lib/Utils/process-message.d.ts.map +1 -0
- package/lib/Utils/process-message.js +630 -0
- package/lib/Utils/process-message.js.map +1 -0
- package/lib/Utils/reporting-utils.d.ts +11 -0
- package/lib/Utils/reporting-utils.d.ts.map +1 -0
- package/lib/Utils/reporting-utils.js +258 -0
- package/lib/Utils/reporting-utils.js.map +1 -0
- package/lib/Utils/signal.d.ts +47 -0
- package/lib/Utils/signal.d.ts.map +1 -0
- package/lib/Utils/signal.js +201 -0
- package/lib/Utils/signal.js.map +1 -0
- package/lib/Utils/stanza-ack.d.ts +11 -0
- package/lib/Utils/stanza-ack.d.ts.map +1 -0
- package/lib/Utils/stanza-ack.js +38 -0
- package/lib/Utils/stanza-ack.js.map +1 -0
- package/lib/Utils/sync-action-utils.d.ts +19 -0
- package/lib/Utils/sync-action-utils.d.ts.map +1 -0
- package/lib/Utils/sync-action-utils.js +49 -0
- package/lib/Utils/sync-action-utils.js.map +1 -0
- package/lib/Utils/tc-token-utils.d.ts +37 -0
- package/lib/Utils/tc-token-utils.d.ts.map +1 -0
- package/lib/Utils/tc-token-utils.js +164 -0
- package/lib/Utils/tc-token-utils.js.map +1 -0
- package/lib/Utils/use-multi-file-auth-state.d.ts +13 -0
- package/lib/Utils/use-multi-file-auth-state.d.ts.map +1 -0
- package/lib/Utils/use-multi-file-auth-state.js +121 -0
- package/lib/Utils/use-multi-file-auth-state.js.map +1 -0
- package/lib/Utils/validate-connection.d.ts +11 -0
- package/lib/Utils/validate-connection.d.ts.map +1 -0
- package/lib/Utils/validate-connection.js +210 -0
- package/lib/Utils/validate-connection.js.map +1 -0
- package/lib/Utils/voip-rekey.js +24 -0
- package/lib/WABinary/constants.d.ts +28 -0
- package/lib/WABinary/constants.d.ts.map +1 -0
- package/lib/WABinary/constants.js +1301 -0
- package/lib/WABinary/constants.js.map +1 -0
- package/lib/WABinary/decode.d.ts +7 -0
- package/lib/WABinary/decode.d.ts.map +1 -0
- package/lib/WABinary/decode.js +262 -0
- package/lib/WABinary/decode.js.map +1 -0
- package/lib/WABinary/encode.d.ts +3 -0
- package/lib/WABinary/encode.d.ts.map +1 -0
- package/lib/WABinary/encode.js +220 -0
- package/lib/WABinary/encode.js.map +1 -0
- package/lib/WABinary/generic-utils.d.ts +15 -0
- package/lib/WABinary/generic-utils.d.ts.map +1 -0
- package/lib/WABinary/generic-utils.js +113 -0
- package/lib/WABinary/generic-utils.js.map +1 -0
- package/lib/WABinary/index.d.ts +6 -0
- package/lib/WABinary/index.d.ts.map +1 -0
- package/lib/WABinary/index.js +6 -0
- package/lib/WABinary/index.js.map +1 -0
- package/lib/WABinary/jid-utils.d.ts +48 -0
- package/lib/WABinary/jid-utils.d.ts.map +1 -0
- package/lib/WABinary/jid-utils.js +96 -0
- package/lib/WABinary/jid-utils.js.map +1 -0
- package/lib/WABinary/types.d.ts +19 -0
- package/lib/WABinary/types.d.ts.map +1 -0
- package/lib/WABinary/types.js +2 -0
- package/lib/WABinary/types.js.map +1 -0
- package/lib/WAM/BinaryInfo.d.ts +9 -0
- package/lib/WAM/BinaryInfo.d.ts.map +1 -0
- package/lib/WAM/BinaryInfo.js +10 -0
- package/lib/WAM/BinaryInfo.js.map +1 -0
- package/lib/WAM/constants.d.ts +40 -0
- package/lib/WAM/constants.d.ts.map +1 -0
- package/lib/WAM/constants.js +22853 -0
- package/lib/WAM/constants.js.map +1 -0
- package/lib/WAM/encode.d.ts +3 -0
- package/lib/WAM/encode.d.ts.map +1 -0
- package/lib/WAM/encode.js +150 -0
- package/lib/WAM/encode.js.map +1 -0
- package/lib/WAM/index.d.ts +4 -0
- package/lib/WAM/index.d.ts.map +1 -0
- package/lib/WAM/index.js +4 -0
- package/lib/WAM/index.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncBusinessProtocol.js +90 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +10 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +52 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +23 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +54 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +13 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +27 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncFeatureProtocol.js +53 -0
- package/lib/WAUSync/Protocols/USyncPictureProtocol.js +29 -0
- package/lib/WAUSync/Protocols/USyncSidelistProtocol.js +26 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +13 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +38 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/USyncTextStatusProtocol.js +29 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +10 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +25 -0
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +26 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +51 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +10 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +29 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +1 -0
- package/lib/WAUSync/Protocols/index.d.ts +6 -0
- package/lib/WAUSync/Protocols/index.d.ts.map +1 -0
- package/lib/WAUSync/Protocols/index.js +11 -0
- package/lib/WAUSync/Protocols/index.js.map +1 -0
- package/lib/WAUSync/USyncBackoff.js +35 -0
- package/lib/WAUSync/USyncQuery.d.ts +30 -0
- package/lib/WAUSync/USyncQuery.d.ts.map +1 -0
- package/lib/WAUSync/USyncQuery.js +98 -0
- package/lib/WAUSync/USyncQuery.js.map +1 -0
- package/lib/WAUSync/USyncUser.d.ts +17 -0
- package/lib/WAUSync/USyncUser.d.ts.map +1 -0
- package/lib/WAUSync/USyncUser.js +31 -0
- package/lib/WAUSync/USyncUser.js.map +1 -0
- package/lib/WAUSync/index.d.ts +4 -0
- package/lib/WAUSync/index.d.ts.map +1 -0
- package/lib/WAUSync/index.js +5 -0
- package/lib/WAUSync/index.js.map +1 -0
- package/lib/index.d.ts +12 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +12 -0
- package/lib/index.js.map +1 -0
- package/package.json +134 -4
package/README.md
CHANGED
|
@@ -1,3 +1,1548 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<img src="https://raw.githubusercontent.com/Nazril0/dataaaaaaa/refs/heads/main/nazx.jpg" height="150" style="border-radius:50%" alt="nazx"/>
|
|
4
|
+
|
|
5
|
+
# @nanazx/baileys
|
|
6
|
+
|
|
7
|
+
**WhatsApp Web API library — Original Baileys diperkuat dengan fitur tambahan oleh nazx.**
|
|
8
|
+
|
|
9
|
+
[](https://github.com/Nazril0/nanazxbaileys)
|
|
10
|
+
[](https://nodejs.org)
|
|
11
|
+
[](LICENSE)
|
|
12
|
+
[](https://github.com/Nazril0)
|
|
13
|
+
[](https://instagram.com/nazzxx._0)
|
|
14
|
+
[](https://tiktok.com/@nazxtampan__)
|
|
15
|
+
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 📋 Index
|
|
21
|
+
|
|
22
|
+
- [Tentang](#-tentang)
|
|
23
|
+
- [Instalasi](#️-instalasi)
|
|
24
|
+
- [Quick Start](#-quick-start)
|
|
25
|
+
- [QR Code](#connect-via-qr-code)
|
|
26
|
+
- [Pairing Code](#connect-via-pairing-code)
|
|
27
|
+
- [Full History](#receive-full-history)
|
|
28
|
+
- [Socket Config](#️-socket-config)
|
|
29
|
+
- [Simpan Session](#-simpan-session)
|
|
30
|
+
- [Handling Events](#-handling-events)
|
|
31
|
+
- [Sending Messages](#-sending-messages)
|
|
32
|
+
- [Teks & Dasar](#teks--dasar)
|
|
33
|
+
- [Quote / Reply](#quote--reply)
|
|
34
|
+
- [Mention](#mention)
|
|
35
|
+
- [Forward](#forward)
|
|
36
|
+
- [Lokasi](#lokasi)
|
|
37
|
+
- [Live Location](#live-location)
|
|
38
|
+
- [Kontak](#kontak)
|
|
39
|
+
- [Reaksi](#reaksi)
|
|
40
|
+
- [Pin Pesan](#pin-pesan)
|
|
41
|
+
- [Poll](#poll)
|
|
42
|
+
- [Hapus Pesan](#hapus-pesan)
|
|
43
|
+
- [Edit Pesan](#edit-pesan)
|
|
44
|
+
- [Pesan Menghilang](#pesan-menghilang)
|
|
45
|
+
- [Group Invite](#group-invite)
|
|
46
|
+
- [Event / Jadwal](#event--jadwal)
|
|
47
|
+
- [Share / Request Phone Number](#share--request-phone-number)
|
|
48
|
+
- [Gambar](#gambar)
|
|
49
|
+
- [Video](#video)
|
|
50
|
+
- [Audio](#audio)
|
|
51
|
+
- [Voice Note (PTT)](#voice-note-ptt)
|
|
52
|
+
- [GIF](#gif)
|
|
53
|
+
- [Video Note (PTV)](#video-note-ptv)
|
|
54
|
+
- [Dokumen](#dokumen)
|
|
55
|
+
- [Stiker](#stiker)
|
|
56
|
+
- [View Once](#view-once)
|
|
57
|
+
- [Album](#album)
|
|
58
|
+
- [Status / Stories](#status--stories)
|
|
59
|
+
- [Status dengan Mention](#status-dengan-mention)
|
|
60
|
+
- [Group Story](#group-story)
|
|
61
|
+
- [Link Preview](#link-preview)
|
|
62
|
+
- [Buttons & Interactive](#-buttons--interactive)
|
|
63
|
+
- [Reply Buttons](#reply-buttons)
|
|
64
|
+
- [List Message](#list-message)
|
|
65
|
+
- [Template Buttons](#template-buttons)
|
|
66
|
+
- [Interactive Message (nativeFlow)](#interactive-message-nativeflow)
|
|
67
|
+
- [Interactive Buttons (Baron)](#interactive-buttons-baron)
|
|
68
|
+
- [Payment Request](#payment-request)
|
|
69
|
+
- [Product Message](#product-message)
|
|
70
|
+
- [Poll Result](#poll-result)
|
|
71
|
+
- [Button Reply](#button-reply)
|
|
72
|
+
- [List Reply](#list-reply)
|
|
73
|
+
- [relayMessage](#-relaymessage)
|
|
74
|
+
- [Download Media](#-download-media)
|
|
75
|
+
- [Re-upload Media](#-re-upload-media)
|
|
76
|
+
- [Read Messages](#-read-messages)
|
|
77
|
+
- [Presence](#-presence)
|
|
78
|
+
- [Groups](#-groups)
|
|
79
|
+
- [Newsletter (Channel)](#-newsletter-channel)
|
|
80
|
+
- [Community](#-community)
|
|
81
|
+
- [AI Groups](#-ai-groups)
|
|
82
|
+
- [Username WA](#-username-wa)
|
|
83
|
+
- [Privacy](#-privacy)
|
|
84
|
+
- [User & Profile](#-user--profile)
|
|
85
|
+
- [Modifikasi Chat](#-modifikasi-chat)
|
|
86
|
+
- [Panggilan](#-panggilan)
|
|
87
|
+
- [Decrypt Poll Votes](#-decrypt-poll-votes)
|
|
88
|
+
- [Custom Functionality](#-custom-functionality)
|
|
89
|
+
- [Struktur Library](#-struktur-library)
|
|
90
|
+
- [Credits](#-credits)
|
|
91
|
+
- [Kontak](#-kontak)
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 📖 Tentang
|
|
96
|
+
|
|
97
|
+
**@nanazx/baileys** adalah library WhatsApp Web API berbasis [Baileys](https://github.com/WhiskeySockets/Baileys), dengan tambahan layer socket ekstra yang dirancang untuk kebutuhan bot WA modern.
|
|
98
|
+
|
|
99
|
+
Library ini terhubung langsung ke WhatsApp Web lewat **WebSocket** — tanpa Selenium, tanpa browser, ringan dan cepat.
|
|
100
|
+
|
|
101
|
+
**Fitur tambahan dibanding Baileys standar:**
|
|
102
|
+
|
|
103
|
+
| Fitur | Keterangan |
|
|
104
|
+
|-------|-----------|
|
|
105
|
+
| `makePrivacySocket` | MEX GraphQL privacy settings |
|
|
106
|
+
| `makeUsernameSocket` | WA username (`@username`) |
|
|
107
|
+
| `makeAIGroupsSocket` | AI Groups (Meta AI di grup) |
|
|
108
|
+
| `makeInteropSocket` | Interoperability FB/IG |
|
|
109
|
+
| `makeGraphQLSocket` | HTTPS GraphQL (Meta AI, Events, Payments) |
|
|
110
|
+
| `makeManagedAccountSocket` | Managed accounts |
|
|
111
|
+
| `makeRegistrationSocket` | Registrasi & passkeys |
|
|
112
|
+
| `Baron` class | Album, Event, InteractiveButtons, Payment, Product, GroupStory, PollResult, Status |
|
|
113
|
+
|
|
114
|
+
> ⚠️ Tidak berafiliasi dengan WhatsApp. Gunakan dengan bijak sesuai ToS WhatsApp.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## ⚙️ Instalasi
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
npm install github:Nazril0/nanazxbaileys
|
|
122
|
+
# atau
|
|
123
|
+
yarn add github:Nazril0/nanazxbaileys
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Requirement:** Node.js ≥ 20
|
|
127
|
+
|
|
128
|
+
**Optional peer dependencies:**
|
|
129
|
+
|
|
130
|
+
| Package | Fungsi |
|
|
131
|
+
|---------|--------|
|
|
132
|
+
| `sharp` | Image processing / thumbnail otomatis |
|
|
133
|
+
| `jimp` | Fallback image processing |
|
|
134
|
+
| `audio-decode` | Metadata voice note |
|
|
135
|
+
| `link-preview-js` | Generate link preview |
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
npm install sharp jimp link-preview-js audio-decode
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## 🚀 Quick Start
|
|
144
|
+
|
|
145
|
+
### Connect via QR Code
|
|
146
|
+
|
|
147
|
+
```js
|
|
148
|
+
import makeWASocket, { useMultiFileAuthState, DisconnectReason } from '@nanazx/baileys'
|
|
149
|
+
import { Boom } from '@hapi/boom'
|
|
150
|
+
|
|
151
|
+
async function connect() {
|
|
152
|
+
const { state, saveCreds } = await useMultiFileAuthState('./auth')
|
|
153
|
+
|
|
154
|
+
const sock = makeWASocket({
|
|
155
|
+
auth: state,
|
|
156
|
+
printQRInTerminal: true,
|
|
157
|
+
markOnlineOnConnect: false
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
sock.ev.on('creds.update', saveCreds)
|
|
161
|
+
|
|
162
|
+
sock.ev.on('connection.update', ({ connection, lastDisconnect }) => {
|
|
163
|
+
if (connection === 'close') {
|
|
164
|
+
const shouldReconnect =
|
|
165
|
+
new Boom(lastDisconnect?.error)?.output?.statusCode !== DisconnectReason.loggedOut
|
|
166
|
+
if (shouldReconnect) connect()
|
|
167
|
+
} else if (connection === 'open') {
|
|
168
|
+
console.log('✅ Terhubung!')
|
|
169
|
+
}
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
sock.ev.on('messages.upsert', async ({ messages, type }) => {
|
|
173
|
+
if (type !== 'notify') return
|
|
174
|
+
const msg = messages[0]
|
|
175
|
+
if (!msg.message) return
|
|
176
|
+
const jid = msg.key.remoteJid
|
|
177
|
+
const text = msg.message?.conversation || msg.message?.extendedTextMessage?.text || ''
|
|
178
|
+
if (text === 'ping') await sock.sendMessage(jid, { text: 'pong 🏓' }, { quoted: msg })
|
|
179
|
+
})
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
connect()
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Connect via Pairing Code
|
|
186
|
+
|
|
187
|
+
```js
|
|
188
|
+
const sock = makeWASocket({ auth: state, printQRInTerminal: false })
|
|
189
|
+
|
|
190
|
+
if (!state.creds.registered) {
|
|
191
|
+
const code = await sock.requestPairingCode('628xxxxxxxxx') // nomor tanpa +
|
|
192
|
+
console.log('Pairing code:', code)
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Receive Full History
|
|
197
|
+
|
|
198
|
+
```js
|
|
199
|
+
const sock = makeWASocket({
|
|
200
|
+
auth: state,
|
|
201
|
+
syncFullHistory: true
|
|
202
|
+
})
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## ⚙️ Socket Config
|
|
208
|
+
|
|
209
|
+
```js
|
|
210
|
+
const sock = makeWASocket({
|
|
211
|
+
auth: state,
|
|
212
|
+
|
|
213
|
+
// Cache metadata grup agar tidak sering query ke WA server (recommended)
|
|
214
|
+
cachedGroupMetadata: async (jid) => groupCache.get(jid),
|
|
215
|
+
|
|
216
|
+
// Untuk retry pesan & decrypt poll votes — perlu store
|
|
217
|
+
getMessage: async (key) => store.getMsg(key),
|
|
218
|
+
|
|
219
|
+
// Supaya notif HP tidak terganggu saat bot aktif
|
|
220
|
+
markOnlineOnConnect: false,
|
|
221
|
+
|
|
222
|
+
// Link preview resolusi tinggi
|
|
223
|
+
generateHighQualityLinkPreview: true
|
|
224
|
+
})
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## 💾 Simpan Session
|
|
230
|
+
|
|
231
|
+
```js
|
|
232
|
+
import { useMultiFileAuthState } from '@nanazx/baileys'
|
|
233
|
+
|
|
234
|
+
const { state, saveCreds } = await useMultiFileAuthState('./auth')
|
|
235
|
+
sock.ev.on('creds.update', saveCreds)
|
|
236
|
+
// session tersimpan di folder ./auth — jangan di-share!
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## 📅 Handling Events
|
|
242
|
+
|
|
243
|
+
```js
|
|
244
|
+
// ─── Pesan ───────────────────────────────────────────────────────
|
|
245
|
+
sock.ev.on('messages.upsert', ({ messages, type }) => {}) // pesan masuk/baru
|
|
246
|
+
sock.ev.on('messages.update', updates => {}) // update status pesan
|
|
247
|
+
sock.ev.on('messages.delete', ({ keys }) => {}) // pesan dihapus
|
|
248
|
+
sock.ev.on('messages.reaction', reactions => {}) // reaksi pada pesan
|
|
249
|
+
sock.ev.on('messages.media-update', updates => {}) // update media key
|
|
250
|
+
sock.ev.on('message.comment', ({ message, comment }) => {}) // komentar pesan
|
|
251
|
+
sock.ev.on('message.quarantined', ({ message }) => {}) // pesan dikarantina
|
|
252
|
+
sock.ev.on('poll.add-option', ({ key }) => {}) // opsi poll ditambah
|
|
253
|
+
|
|
254
|
+
// ─── Chat & Kontak ────────────────────────────────────────────────
|
|
255
|
+
sock.ev.on('chats.upsert', chats => {})
|
|
256
|
+
sock.ev.on('chats.update', chats => {})
|
|
257
|
+
sock.ev.on('chats.delete', ids => {})
|
|
258
|
+
sock.ev.on('chats.lock', ({ id, locked }) => {})
|
|
259
|
+
sock.ev.on('contacts.upsert', contacts => {})
|
|
260
|
+
sock.ev.on('contacts.update', contacts => {})
|
|
261
|
+
sock.ev.on('blocklist.update', ({ blocklist, type }) => {})
|
|
262
|
+
|
|
263
|
+
// ─── Grup ────────────────────────────────────────────────────────
|
|
264
|
+
sock.ev.on('groups.upsert', groups => {})
|
|
265
|
+
sock.ev.on('groups.update', updates => {})
|
|
266
|
+
sock.ev.on('group-participants.update', ({ id, participants, action }) => {})
|
|
267
|
+
sock.ev.on('group.join-request', ({ id, participant, action }) => {})
|
|
268
|
+
sock.ev.on('group.member-tag.update', ({ id, participant }) => {})
|
|
269
|
+
|
|
270
|
+
// ─── Newsletter ───────────────────────────────────────────────────
|
|
271
|
+
sock.ev.on('newsletter-settings.update', update => {})
|
|
272
|
+
sock.ev.on('newsletter-participants.update', update => {})
|
|
273
|
+
sock.ev.on('newsletter.reaction', update => {})
|
|
274
|
+
sock.ev.on('newsletter.view', update => {})
|
|
275
|
+
sock.ev.on('newsletter.live-update', update => {})
|
|
276
|
+
sock.ev.on('newsletter.pin', update => {})
|
|
277
|
+
sock.ev.on('newsletter.invite', update => {})
|
|
278
|
+
|
|
279
|
+
// ─── Koneksi & Auth ──────────────────────────────────────────────
|
|
280
|
+
sock.ev.on('connection.update', ({ connection, qr, lastDisconnect, isOnline }) => {})
|
|
281
|
+
sock.ev.on('creds.update', saveCreds)
|
|
282
|
+
sock.ev.on('security.alert', data => {})
|
|
283
|
+
sock.ev.on('identity.update', ({ jid }) => {})
|
|
284
|
+
sock.ev.on('server.config', config => {})
|
|
285
|
+
|
|
286
|
+
// ─── Panggilan ────────────────────────────────────────────────────
|
|
287
|
+
sock.ev.on('call', calls => {})
|
|
288
|
+
sock.ev.on('call.scheduled', ({ call }) => {})
|
|
289
|
+
sock.ev.on('call.schedule-cancelled', ({ call }) => {})
|
|
290
|
+
sock.ev.on('coexistence.update', u => {})
|
|
291
|
+
|
|
292
|
+
// ─── Presence & Label ────────────────────────────────────────────
|
|
293
|
+
sock.ev.on('presence.update', ({ id, presences }) => {})
|
|
294
|
+
sock.ev.on('devices.update', ({ id, devices, isSelf }) => {})
|
|
295
|
+
sock.ev.on('labels.edit', ({ label }) => {})
|
|
296
|
+
sock.ev.on('labels.association', ({ association, type }) => {})
|
|
297
|
+
sock.ev.on('labels.reorder', ({ labelIds }) => {})
|
|
298
|
+
|
|
299
|
+
// ─── Sinkronisasi & Settings ─────────────────────────────────────
|
|
300
|
+
sock.ev.on('messaging-history.set', ({ chats, contacts, messages, isLatest }) => {})
|
|
301
|
+
sock.ev.on('messaging-history.status', ({ progress, hasMore }) => {})
|
|
302
|
+
sock.ev.on('settings.update', ({ setting, value }) => {})
|
|
303
|
+
sock.ev.on('lid-mapping.update', ({ lid, pn }) => {})
|
|
304
|
+
sock.ev.on('status.psa', ({ message }) => {})
|
|
305
|
+
sock.ev.on('status.mention', ({ message }) => {})
|
|
306
|
+
sock.ev.on('payment.split', ({ message }) => {})
|
|
307
|
+
sock.ev.on('payment.reminder', ({ message }) => {})
|
|
308
|
+
sock.ev.on('reminder.update', ({ message }) => {})
|
|
309
|
+
sock.ev.on('media.notify', ({ message }) => {})
|
|
310
|
+
sock.ev.on('cloud.thread.control', ({ message }) => {})
|
|
311
|
+
sock.ev.on('galaxy.flow.completed', ({ message }) => {})
|
|
312
|
+
|
|
313
|
+
// ─── Bot / Meta AI ────────────────────────────────────────────────
|
|
314
|
+
sock.ev.on('bot.feedback', ({ message }) => {})
|
|
315
|
+
sock.ev.on('bot.stop-generation', ({ message }) => {})
|
|
316
|
+
sock.ev.on('bot.welcome-request', ({ message }) => {})
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
## 💬 Sending Messages
|
|
322
|
+
|
|
323
|
+
### Teks & Dasar
|
|
324
|
+
|
|
325
|
+
```js
|
|
326
|
+
await sock.sendMessage(jid, { text: 'Halo!' })
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
### Quote / Reply
|
|
330
|
+
|
|
331
|
+
```js
|
|
332
|
+
await sock.sendMessage(jid, { text: 'Ini balasan' }, { quoted: msg })
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
### Mention
|
|
336
|
+
|
|
337
|
+
```js
|
|
338
|
+
await sock.sendMessage(jid, {
|
|
339
|
+
text: '@628xxx halo!',
|
|
340
|
+
mentions: ['628xxx@s.whatsapp.net']
|
|
341
|
+
})
|
|
342
|
+
|
|
343
|
+
// Mention semua (@everyone)
|
|
344
|
+
await sock.sendMessage(jid, {
|
|
345
|
+
text: '@everyone',
|
|
346
|
+
mentionAll: true
|
|
347
|
+
})
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### Forward
|
|
351
|
+
|
|
352
|
+
```js
|
|
353
|
+
await sock.sendMessage(jid, { forward: msg })
|
|
354
|
+
|
|
355
|
+
// Force forward (tambah tanda forward)
|
|
356
|
+
await sock.sendMessage(jid, { forward: msg, force: true })
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
### Lokasi
|
|
360
|
+
|
|
361
|
+
```js
|
|
362
|
+
await sock.sendMessage(jid, {
|
|
363
|
+
location: {
|
|
364
|
+
degreesLatitude: -6.200000,
|
|
365
|
+
degreesLongitude: 106.816666,
|
|
366
|
+
name: 'Jakarta', // opsional
|
|
367
|
+
address: 'Indonesia' // opsional
|
|
368
|
+
}
|
|
369
|
+
})
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
### Live Location
|
|
373
|
+
|
|
374
|
+
```js
|
|
375
|
+
await sock.sendMessage(jid, {
|
|
376
|
+
liveLocation: {
|
|
377
|
+
degreesLatitude: -6.200000,
|
|
378
|
+
degreesLongitude: 106.816666
|
|
379
|
+
},
|
|
380
|
+
accuracyInMeters: 10,
|
|
381
|
+
speedInMps: 0,
|
|
382
|
+
degreesClockwisefromMagneticNorth: 0,
|
|
383
|
+
caption: 'Lokasi saya',
|
|
384
|
+
sequenceNumber: 1
|
|
385
|
+
})
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
### Kontak
|
|
389
|
+
|
|
390
|
+
```js
|
|
391
|
+
const vcard = `BEGIN:VCARD\nVERSION:3.0\nFN:Nama Kontak\nTEL;type=CELL;waid=628xxx:+62 8xx xxxx xxxx\nEND:VCARD`
|
|
392
|
+
|
|
393
|
+
// Satu kontak
|
|
394
|
+
await sock.sendMessage(jid, {
|
|
395
|
+
contacts: {
|
|
396
|
+
displayName: 'Nama',
|
|
397
|
+
contacts: [{ vcard }]
|
|
398
|
+
}
|
|
399
|
+
})
|
|
400
|
+
|
|
401
|
+
// Banyak kontak sekaligus
|
|
402
|
+
await sock.sendMessage(jid, {
|
|
403
|
+
contacts: {
|
|
404
|
+
displayName: '2 Kontak',
|
|
405
|
+
contacts: [{ vcard }, { vcard: vcard2 }]
|
|
406
|
+
}
|
|
407
|
+
})
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
### Reaksi
|
|
411
|
+
|
|
412
|
+
```js
|
|
413
|
+
// Tambah reaksi
|
|
414
|
+
await sock.sendMessage(jid, { react: { text: '🔥', key: msg.key } })
|
|
415
|
+
|
|
416
|
+
// Hapus reaksi
|
|
417
|
+
await sock.sendMessage(jid, { react: { text: '', key: msg.key } })
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
### Pin Pesan
|
|
421
|
+
|
|
422
|
+
```js
|
|
423
|
+
// Pin pesan (type: 1 = pin, 0 = unpin)
|
|
424
|
+
// time: 86400 = 24 jam | 604800 = 7 hari | 2592000 = 30 hari
|
|
425
|
+
await sock.sendMessage(jid, {
|
|
426
|
+
pin: msg.key,
|
|
427
|
+
type: 1,
|
|
428
|
+
time: 86400
|
|
429
|
+
})
|
|
430
|
+
|
|
431
|
+
// Unpin
|
|
432
|
+
await sock.sendMessage(jid, { pin: msg.key, type: 0, time: 0 })
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
### Poll
|
|
436
|
+
|
|
437
|
+
```js
|
|
438
|
+
// Poll pilih satu
|
|
439
|
+
await sock.sendMessage(jid, {
|
|
440
|
+
poll: {
|
|
441
|
+
name: 'Pilih satu!',
|
|
442
|
+
values: ['Opsi A', 'Opsi B', 'Opsi C'],
|
|
443
|
+
selectableCount: 1
|
|
444
|
+
}
|
|
445
|
+
})
|
|
446
|
+
|
|
447
|
+
// Poll pilih banyak
|
|
448
|
+
await sock.sendMessage(jid, {
|
|
449
|
+
poll: {
|
|
450
|
+
name: 'Pilih bebas!',
|
|
451
|
+
values: ['A', 'B', 'C'],
|
|
452
|
+
selectableCount: 0 // 0 = bebas pilih semua
|
|
453
|
+
}
|
|
454
|
+
})
|
|
455
|
+
|
|
456
|
+
// Poll di community announcement group (v2)
|
|
457
|
+
await sock.sendMessage(jid, {
|
|
458
|
+
poll: {
|
|
459
|
+
name: 'Voting komunitas',
|
|
460
|
+
values: ['Ya', 'Tidak'],
|
|
461
|
+
selectableCount: 1,
|
|
462
|
+
toAnnouncementGroup: true
|
|
463
|
+
}
|
|
464
|
+
})
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
### Hapus Pesan
|
|
468
|
+
|
|
469
|
+
```js
|
|
470
|
+
// Hapus for everyone
|
|
471
|
+
await sock.sendMessage(jid, { delete: msg.key })
|
|
472
|
+
|
|
473
|
+
// Hapus pesan orang lain di grup (admin)
|
|
474
|
+
await sock.sendMessage(groupJid, { delete: otherPersonMsg.key })
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
### Edit Pesan
|
|
478
|
+
|
|
479
|
+
```js
|
|
480
|
+
await sock.sendMessage(jid, {
|
|
481
|
+
edit: msg.key,
|
|
482
|
+
text: 'Teks yang sudah diedit'
|
|
483
|
+
})
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
### Pesan Menghilang
|
|
487
|
+
|
|
488
|
+
```js
|
|
489
|
+
// Aktifkan di chat / grup
|
|
490
|
+
// 86400 = 24h | 604800 = 7d | 7776000 = 90d | false / 0 = off
|
|
491
|
+
await sock.sendMessage(jid, { disappearingMessagesInChat: 86400 })
|
|
492
|
+
await sock.sendMessage(jid, { disappearingMessagesInChat: false })
|
|
493
|
+
|
|
494
|
+
// Kirim pesan sebagai ephemeral
|
|
495
|
+
await sock.sendMessage(jid, { text: 'pesan ini menghilang' }, { ephemeralExpiration: 86400 })
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
### Group Invite
|
|
499
|
+
|
|
500
|
+
```js
|
|
501
|
+
await sock.sendMessage(jid, {
|
|
502
|
+
groupInvite: {
|
|
503
|
+
jid: 'groupjid@g.us',
|
|
504
|
+
subject: 'Nama Grup',
|
|
505
|
+
inviteCode: 'xxxxxxxx',
|
|
506
|
+
inviteExpiration: Date.now() + 86400000,
|
|
507
|
+
text: 'Gabung yuk!'
|
|
508
|
+
}
|
|
509
|
+
})
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
### Event / Jadwal
|
|
513
|
+
|
|
514
|
+
```js
|
|
515
|
+
await sock.sendMessage(jid, {
|
|
516
|
+
event: {
|
|
517
|
+
name: 'Nama Event',
|
|
518
|
+
description: 'Deskripsi event',
|
|
519
|
+
startDate: new Date('2025-01-01T10:00:00'),
|
|
520
|
+
endDate: new Date('2025-01-01T12:00:00'),
|
|
521
|
+
location: {
|
|
522
|
+
degreesLatitude: -6.2,
|
|
523
|
+
degreesLongitude: 106.8,
|
|
524
|
+
name: 'Jakarta'
|
|
525
|
+
},
|
|
526
|
+
extraGuestsAllowed: true,
|
|
527
|
+
isCancelled: false
|
|
528
|
+
}
|
|
529
|
+
})
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
### Share / Request Phone Number
|
|
533
|
+
|
|
534
|
+
```js
|
|
535
|
+
// Bagikan nomor HP kamu ke lawan chat
|
|
536
|
+
await sock.sendMessage(jid, { sharePhoneNumber: true })
|
|
537
|
+
|
|
538
|
+
// Minta nomor HP dari lawan chat
|
|
539
|
+
await sock.sendMessage(jid, { requestPhoneNumber: true })
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
### Gambar
|
|
543
|
+
|
|
544
|
+
```js
|
|
545
|
+
// Dari URL
|
|
546
|
+
await sock.sendMessage(jid, { image: { url: './img.jpg' }, caption: 'Caption' })
|
|
547
|
+
|
|
548
|
+
// Dari Buffer
|
|
549
|
+
import { readFileSync } from 'fs'
|
|
550
|
+
await sock.sendMessage(jid, { image: readFileSync('./img.jpg'), caption: 'Caption' })
|
|
551
|
+
|
|
552
|
+
// Dengan mention di caption
|
|
553
|
+
await sock.sendMessage(jid, {
|
|
554
|
+
image: { url: './img.jpg' },
|
|
555
|
+
caption: 'Halo @628xxx',
|
|
556
|
+
mentions: ['628xxx@s.whatsapp.net']
|
|
557
|
+
})
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
### Video
|
|
561
|
+
|
|
562
|
+
```js
|
|
563
|
+
await sock.sendMessage(jid, { video: { url: './video.mp4' }, caption: 'Video' })
|
|
564
|
+
```
|
|
565
|
+
|
|
566
|
+
### Audio
|
|
567
|
+
|
|
568
|
+
```js
|
|
569
|
+
await sock.sendMessage(jid, {
|
|
570
|
+
audio: { url: './audio.mp3' },
|
|
571
|
+
mimetype: 'audio/mp4'
|
|
572
|
+
})
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
### Voice Note (PTT)
|
|
576
|
+
|
|
577
|
+
```js
|
|
578
|
+
// PTT = Push To Talk (pesan suara, buble bundar)
|
|
579
|
+
await sock.sendMessage(jid, {
|
|
580
|
+
audio: { url: './audio.ogg' },
|
|
581
|
+
mimetype: 'audio/ogg; codecs=opus',
|
|
582
|
+
ptt: true
|
|
583
|
+
})
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
### GIF
|
|
587
|
+
|
|
588
|
+
> WA tidak support `.gif` asli — kirim sebagai video mp4 dengan flag `gifPlayback`
|
|
589
|
+
|
|
590
|
+
```js
|
|
591
|
+
await sock.sendMessage(jid, {
|
|
592
|
+
video: { url: './animasi.mp4' },
|
|
593
|
+
gifPlayback: true,
|
|
594
|
+
caption: 'GIF lucu'
|
|
595
|
+
})
|
|
596
|
+
```
|
|
597
|
+
|
|
598
|
+
### Video Note (PTV)
|
|
599
|
+
|
|
600
|
+
```js
|
|
601
|
+
// Video note = video bulat seperti voice note
|
|
602
|
+
await sock.sendMessage(jid, {
|
|
603
|
+
video: { url: './clip.mp4' },
|
|
604
|
+
ptv: true
|
|
605
|
+
})
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
### Dokumen
|
|
609
|
+
|
|
610
|
+
```js
|
|
611
|
+
await sock.sendMessage(jid, {
|
|
612
|
+
document: { url: './file.pdf' },
|
|
613
|
+
mimetype: 'application/pdf',
|
|
614
|
+
fileName: 'dokumen.pdf',
|
|
615
|
+
caption: 'Ini file PDF'
|
|
616
|
+
})
|
|
617
|
+
```
|
|
618
|
+
|
|
619
|
+
### Stiker
|
|
620
|
+
|
|
621
|
+
```js
|
|
622
|
+
await sock.sendMessage(jid, { sticker: { url: './sticker.webp' } })
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
### View Once
|
|
626
|
+
|
|
627
|
+
```js
|
|
628
|
+
// Gambar/video hanya bisa dilihat sekali
|
|
629
|
+
await sock.sendMessage(jid, {
|
|
630
|
+
image: { url: './rahasia.jpg' },
|
|
631
|
+
viewOnce: true
|
|
632
|
+
})
|
|
633
|
+
|
|
634
|
+
// View once video
|
|
635
|
+
await sock.sendMessage(jid, {
|
|
636
|
+
video: { url: './rahasia.mp4' },
|
|
637
|
+
viewOnce: true
|
|
638
|
+
})
|
|
639
|
+
```
|
|
640
|
+
|
|
641
|
+
### Album
|
|
642
|
+
|
|
643
|
+
> Kirim banyak foto/video sekaligus sebagai album (Baron feature)
|
|
644
|
+
|
|
645
|
+
```js
|
|
646
|
+
// album berisi array gambar/video
|
|
647
|
+
await sock.sendMessage(jid, {
|
|
648
|
+
albumMessage: [
|
|
649
|
+
{ image: { url: './foto1.jpg' }, caption: 'Foto 1' },
|
|
650
|
+
{ image: { url: './foto2.jpg' }, caption: 'Foto 2' },
|
|
651
|
+
{ video: { url: './video.mp4' }, caption: 'Video' }
|
|
652
|
+
]
|
|
653
|
+
})
|
|
654
|
+
|
|
655
|
+
// Alias singkat
|
|
656
|
+
await sock.sendMessage(jid, {
|
|
657
|
+
album: [
|
|
658
|
+
{ image: { url: './1.jpg' } },
|
|
659
|
+
{ image: { url: './2.jpg' } }
|
|
660
|
+
]
|
|
661
|
+
})
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
### Status / Stories
|
|
665
|
+
|
|
666
|
+
```js
|
|
667
|
+
// Status teks
|
|
668
|
+
await sock.sendMessage('status@broadcast', {
|
|
669
|
+
text: 'Status saya hari ini 🔥',
|
|
670
|
+
backgroundColor: '#000000',
|
|
671
|
+
font: 2,
|
|
672
|
+
statusJidList: ['628xxx@s.whatsapp.net'] // daftar orang yang lihat
|
|
673
|
+
})
|
|
674
|
+
|
|
675
|
+
// Status gambar
|
|
676
|
+
await sock.sendMessage('status@broadcast', {
|
|
677
|
+
image: { url: './cover.jpg' },
|
|
678
|
+
caption: 'Caption status',
|
|
679
|
+
statusJidList: ['628xxx@s.whatsapp.net']
|
|
680
|
+
})
|
|
681
|
+
|
|
682
|
+
// Status video
|
|
683
|
+
await sock.sendMessage('status@broadcast', {
|
|
684
|
+
video: { url: './story.mp4' },
|
|
685
|
+
caption: 'Video status',
|
|
686
|
+
statusJidList: ['628xxx@s.whatsapp.net']
|
|
687
|
+
})
|
|
688
|
+
|
|
689
|
+
// Pakai Baron — sendStatusWhatsApp (otomatis handle statusJidList dari grup/personal)
|
|
690
|
+
// Kirim status ke semua anggota grup tertentu sekaligus:
|
|
691
|
+
await baron.sendStatusWhatsApp(
|
|
692
|
+
{ text: 'Status ke grup', backgroundColor: '#1a1a2e' },
|
|
693
|
+
['groupjid@g.us', '628xxx@s.whatsapp.net']
|
|
694
|
+
)
|
|
695
|
+
```
|
|
696
|
+
|
|
697
|
+
### Status dengan Mention
|
|
698
|
+
|
|
699
|
+
```js
|
|
700
|
+
await sock.sendMessage('status@broadcast', {
|
|
701
|
+
text: 'Halo @628xxx 👋',
|
|
702
|
+
mentions: ['628xxx@s.whatsapp.net'],
|
|
703
|
+
statusMentionedJids: ['628xxx@s.whatsapp.net']
|
|
704
|
+
})
|
|
705
|
+
```
|
|
706
|
+
|
|
707
|
+
### Group Story
|
|
708
|
+
|
|
709
|
+
> Kirim story/status ke grup (Baron feature)
|
|
710
|
+
|
|
711
|
+
```js
|
|
712
|
+
await sock.sendMessage(groupJid, {
|
|
713
|
+
groupStatusMessage: {
|
|
714
|
+
text: 'Story grup kita',
|
|
715
|
+
backgroundColor: '#ff6b6b'
|
|
716
|
+
}
|
|
717
|
+
})
|
|
718
|
+
|
|
719
|
+
// Atau dengan media
|
|
720
|
+
await sock.sendMessage(groupJid, {
|
|
721
|
+
groupStatusMessage: {
|
|
722
|
+
image: { url: './foto.jpg' },
|
|
723
|
+
caption: 'Story grup!'
|
|
724
|
+
}
|
|
725
|
+
})
|
|
726
|
+
```
|
|
727
|
+
|
|
728
|
+
### Link Preview
|
|
729
|
+
|
|
730
|
+
```js
|
|
731
|
+
// Link preview otomatis jika ada link-preview-js terinstall
|
|
732
|
+
await sock.sendMessage(jid, {
|
|
733
|
+
text: 'Cek ini: https://github.com/Nazril0/nanazxbaileys'
|
|
734
|
+
})
|
|
735
|
+
|
|
736
|
+
// Nonaktifkan link preview
|
|
737
|
+
await sock.sendMessage(jid, {
|
|
738
|
+
text: 'https://example.com',
|
|
739
|
+
linkPreview: null
|
|
740
|
+
})
|
|
741
|
+
```
|
|
742
|
+
|
|
743
|
+
---
|
|
744
|
+
|
|
745
|
+
## 🎛️ Buttons & Interactive
|
|
746
|
+
|
|
747
|
+
### Reply Buttons
|
|
748
|
+
|
|
749
|
+
```js
|
|
750
|
+
await sock.sendMessage(jid, {
|
|
751
|
+
buttonsMessage: {
|
|
752
|
+
text: 'Pilih salah satu:',
|
|
753
|
+
footer: 'Footer teks',
|
|
754
|
+
buttons: [
|
|
755
|
+
{ buttonId: 'id1', buttonText: { displayText: 'Tombol 1' }, type: 1 },
|
|
756
|
+
{ buttonId: 'id2', buttonText: { displayText: 'Tombol 2' }, type: 1 },
|
|
757
|
+
{ buttonId: 'id3', buttonText: { displayText: 'Tombol 3' }, type: 1 }
|
|
758
|
+
],
|
|
759
|
+
headerType: 1
|
|
760
|
+
}
|
|
761
|
+
})
|
|
762
|
+
```
|
|
763
|
+
|
|
764
|
+
### List Message
|
|
765
|
+
|
|
766
|
+
```js
|
|
767
|
+
await sock.sendMessage(jid, {
|
|
768
|
+
listMessage: {
|
|
769
|
+
title: 'Menu Bot',
|
|
770
|
+
description: 'Pilih fitur yang kamu mau',
|
|
771
|
+
buttonText: 'Buka Menu',
|
|
772
|
+
listType: 1,
|
|
773
|
+
sections: [
|
|
774
|
+
{
|
|
775
|
+
title: 'Kategori 1',
|
|
776
|
+
rows: [
|
|
777
|
+
{ title: 'Fitur A', description: 'Deskripsi A', rowId: 'fitur_a' },
|
|
778
|
+
{ title: 'Fitur B', description: 'Deskripsi B', rowId: 'fitur_b' }
|
|
779
|
+
]
|
|
780
|
+
},
|
|
781
|
+
{
|
|
782
|
+
title: 'Kategori 2',
|
|
783
|
+
rows: [
|
|
784
|
+
{ title: 'Fitur C', description: 'Deskripsi C', rowId: 'fitur_c' }
|
|
785
|
+
]
|
|
786
|
+
}
|
|
787
|
+
]
|
|
788
|
+
}
|
|
789
|
+
})
|
|
790
|
+
```
|
|
791
|
+
|
|
792
|
+
### Template Buttons
|
|
793
|
+
|
|
794
|
+
```js
|
|
795
|
+
await sock.sendMessage(jid, {
|
|
796
|
+
templateMessage: {
|
|
797
|
+
hydratedTemplate: {
|
|
798
|
+
hydratedContentText: 'Halo! Ada yang bisa dibantu?',
|
|
799
|
+
hydratedFooterText: 'Footer',
|
|
800
|
+
hydratedButtons: [
|
|
801
|
+
{ quickReplyButton: { displayText: 'Ya', id: 'ya' } },
|
|
802
|
+
{ quickReplyButton: { displayText: 'Tidak', id: 'tidak' } },
|
|
803
|
+
{ urlButton: { displayText: 'Kunjungi Web', url: 'https://github.com/Nazril0' } },
|
|
804
|
+
{ callButton: { displayText: 'Hubungi', phoneNumber: '+628xxx' } }
|
|
805
|
+
]
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
})
|
|
809
|
+
```
|
|
810
|
+
|
|
811
|
+
### Interactive Message (nativeFlow)
|
|
812
|
+
|
|
813
|
+
```js
|
|
814
|
+
// Tombol quick reply
|
|
815
|
+
await sock.sendMessage(jid, {
|
|
816
|
+
interactiveMessage: {
|
|
817
|
+
body: { text: 'Pilih aksi:' },
|
|
818
|
+
footer: { text: 'Footer teks' },
|
|
819
|
+
nativeFlowMessage: {
|
|
820
|
+
buttons: [
|
|
821
|
+
{
|
|
822
|
+
name: 'quick_reply',
|
|
823
|
+
buttonParamsJson: JSON.stringify({ display_text: 'Balas', id: 'balas' })
|
|
824
|
+
},
|
|
825
|
+
{
|
|
826
|
+
name: 'cta_url',
|
|
827
|
+
buttonParamsJson: JSON.stringify({
|
|
828
|
+
display_text: 'Kunjungi',
|
|
829
|
+
url: 'https://github.com/Nazril0',
|
|
830
|
+
merchant_url: 'https://github.com/Nazril0'
|
|
831
|
+
})
|
|
832
|
+
},
|
|
833
|
+
{
|
|
834
|
+
name: 'cta_call',
|
|
835
|
+
buttonParamsJson: JSON.stringify({ display_text: 'Telepon', phone_number: '+628xxx' })
|
|
836
|
+
},
|
|
837
|
+
{
|
|
838
|
+
name: 'cta_copy',
|
|
839
|
+
buttonParamsJson: JSON.stringify({
|
|
840
|
+
display_text: 'Salin Kode',
|
|
841
|
+
copy_code: 'NAZX2025'
|
|
842
|
+
})
|
|
843
|
+
}
|
|
844
|
+
]
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
})
|
|
848
|
+
|
|
849
|
+
// Dengan gambar di header
|
|
850
|
+
await sock.sendMessage(jid, {
|
|
851
|
+
interactiveMessage: {
|
|
852
|
+
image: { url: './thumb.jpg' },
|
|
853
|
+
title: 'Header',
|
|
854
|
+
body: { text: 'Deskripsi' },
|
|
855
|
+
footer: { text: 'Footer' },
|
|
856
|
+
nativeFlowMessage: {
|
|
857
|
+
buttons: [
|
|
858
|
+
{ name: 'quick_reply', buttonParamsJson: JSON.stringify({ display_text: 'Ok', id: 'ok' }) }
|
|
859
|
+
]
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
})
|
|
863
|
+
```
|
|
864
|
+
|
|
865
|
+
### Interactive Buttons (Baron)
|
|
866
|
+
|
|
867
|
+
> Wrapper Baron untuk interactiveMessage — support media di header
|
|
868
|
+
|
|
869
|
+
```js
|
|
870
|
+
await sock.sendMessage(jid, {
|
|
871
|
+
interactiveButtons: [
|
|
872
|
+
{ name: 'quick_reply', buttonParamsJson: JSON.stringify({ display_text: 'Ya', id: 'ya' }) },
|
|
873
|
+
{ name: 'quick_reply', buttonParamsJson: JSON.stringify({ display_text: 'Tidak', id: 'tidak' }) }
|
|
874
|
+
],
|
|
875
|
+
text: 'Pilih jawaban:',
|
|
876
|
+
footer: 'Footer teks',
|
|
877
|
+
title: 'Header Judul',
|
|
878
|
+
image: { url: './thumb.jpg' } // opsional: image/video/document
|
|
879
|
+
})
|
|
880
|
+
|
|
881
|
+
// Dengan externalAdReply (iklan/preview eksternal)
|
|
882
|
+
await sock.sendMessage(jid, {
|
|
883
|
+
interactiveButtons: [
|
|
884
|
+
{ name: 'quick_reply', buttonParamsJson: JSON.stringify({ display_text: 'Cek', id: 'cek' }) }
|
|
885
|
+
],
|
|
886
|
+
text: 'Lihat penawaran ini!',
|
|
887
|
+
externalAdReply: {
|
|
888
|
+
title: 'Judul Iklan',
|
|
889
|
+
body: 'Deskripsi iklan',
|
|
890
|
+
thumbnailUrl: 'https://example.com/thumb.jpg',
|
|
891
|
+
sourceUrl: 'https://example.com',
|
|
892
|
+
mediaType: 1,
|
|
893
|
+
renderLargerThumbnail: true,
|
|
894
|
+
showAdAttribution: true
|
|
895
|
+
}
|
|
896
|
+
})
|
|
897
|
+
```
|
|
898
|
+
|
|
899
|
+
### Payment Request
|
|
900
|
+
|
|
901
|
+
```js
|
|
902
|
+
await sock.sendMessage(jid, {
|
|
903
|
+
requestPaymentMessage: {
|
|
904
|
+
amount: 50000, // dalam satuan 1/1000 (50000 = Rp 50)
|
|
905
|
+
currency: 'IDR',
|
|
906
|
+
from: '628xxx@s.whatsapp.net',
|
|
907
|
+
expiry: Date.now() + 86400000,
|
|
908
|
+
note: 'Pembayaran untuk ...' // atau sticker
|
|
909
|
+
}
|
|
910
|
+
})
|
|
911
|
+
```
|
|
912
|
+
|
|
913
|
+
### Product Message
|
|
914
|
+
|
|
915
|
+
```js
|
|
916
|
+
await sock.sendMessage(jid, {
|
|
917
|
+
productMessage: {
|
|
918
|
+
title: 'Nama Produk',
|
|
919
|
+
description: 'Deskripsi produk',
|
|
920
|
+
thumbnail: { url: './produk.jpg' }, // atau Buffer
|
|
921
|
+
productId: 'PROD123',
|
|
922
|
+
retailerId: 'SKU-001',
|
|
923
|
+
url: 'https://toko.com/produk',
|
|
924
|
+
priceAmount1000: 50000000, // Rp 50.000 (dalam 1/1000)
|
|
925
|
+
currencyCode: 'IDR',
|
|
926
|
+
body: 'Teks body pesan',
|
|
927
|
+
footer: 'Teks footer',
|
|
928
|
+
buttons: [
|
|
929
|
+
{ name: 'quick_reply', buttonParamsJson: JSON.stringify({ display_text: 'Pesan', id: 'pesan' }) }
|
|
930
|
+
]
|
|
931
|
+
}
|
|
932
|
+
})
|
|
933
|
+
```
|
|
934
|
+
|
|
935
|
+
### Poll Result
|
|
936
|
+
|
|
937
|
+
```js
|
|
938
|
+
// Kirim hasil poll (snapshot)
|
|
939
|
+
await sock.sendMessage(jid, {
|
|
940
|
+
pollResultMessage: {
|
|
941
|
+
name: 'Nama Poll',
|
|
942
|
+
pollVotes: [
|
|
943
|
+
{ optionName: 'Opsi A', optionVoteCount: 10 },
|
|
944
|
+
{ optionName: 'Opsi B', optionVoteCount: 5 }
|
|
945
|
+
]
|
|
946
|
+
}
|
|
947
|
+
})
|
|
948
|
+
```
|
|
949
|
+
|
|
950
|
+
### Button Reply
|
|
951
|
+
|
|
952
|
+
```js
|
|
953
|
+
// Balas template button
|
|
954
|
+
await sock.sendMessage(jid, {
|
|
955
|
+
buttonReply: { displayText: 'Ya', id: 'ya', index: 0 },
|
|
956
|
+
type: 'template'
|
|
957
|
+
})
|
|
958
|
+
|
|
959
|
+
// Balas plain button
|
|
960
|
+
await sock.sendMessage(jid, {
|
|
961
|
+
buttonReply: { displayText: 'Ya', id: 'ya' },
|
|
962
|
+
type: 'plain'
|
|
963
|
+
})
|
|
964
|
+
```
|
|
965
|
+
|
|
966
|
+
### List Reply
|
|
967
|
+
|
|
968
|
+
```js
|
|
969
|
+
await sock.sendMessage(jid, {
|
|
970
|
+
listReply: {
|
|
971
|
+
singleSelectReply: { selectedRowId: 'fitur_a' },
|
|
972
|
+
title: 'Fitur A',
|
|
973
|
+
description: 'Kamu pilih Fitur A'
|
|
974
|
+
}
|
|
975
|
+
})
|
|
976
|
+
```
|
|
977
|
+
|
|
978
|
+
---
|
|
979
|
+
|
|
980
|
+
## 📡 relayMessage
|
|
981
|
+
|
|
982
|
+
> `relayMessage` adalah fungsi low-level untuk mengirim pesan langsung (tanpa generate ulang). Digunakan untuk kasus custom.
|
|
983
|
+
|
|
984
|
+
```js
|
|
985
|
+
// Relay pesan biasa
|
|
986
|
+
await sock.relayMessage(jid, fullMsg.message, {
|
|
987
|
+
messageId: fullMsg.key.id
|
|
988
|
+
})
|
|
989
|
+
|
|
990
|
+
// Relay ke status (stories)
|
|
991
|
+
await sock.relayMessage('status@broadcast', msg.message, {
|
|
992
|
+
messageId: msg.key.id,
|
|
993
|
+
statusJidList: ['628xxx@s.whatsapp.net', '628yyy@s.whatsapp.net']
|
|
994
|
+
})
|
|
995
|
+
|
|
996
|
+
// Relay ke newsletter
|
|
997
|
+
await sock.relayMessage('xxxxxxxxxxx@newsletter', msg.message, {
|
|
998
|
+
messageId: msg.key.id
|
|
999
|
+
})
|
|
1000
|
+
|
|
1001
|
+
// Relay dengan participant tertentu (di grup)
|
|
1002
|
+
await sock.relayMessage(groupJid, msg.message, {
|
|
1003
|
+
messageId: msg.key.id,
|
|
1004
|
+
participant: '628xxx@s.whatsapp.net'
|
|
1005
|
+
})
|
|
1006
|
+
|
|
1007
|
+
// Relay dengan attribute tambahan (mis. untuk delete/edit)
|
|
1008
|
+
await sock.relayMessage(jid, msg.message, {
|
|
1009
|
+
messageId: msg.key.id,
|
|
1010
|
+
additionalAttributes: { edit: '7' } // 7=hapus sendiri, 8=hapus admin grup, 1=edit, 2=pin
|
|
1011
|
+
})
|
|
1012
|
+
```
|
|
1013
|
+
|
|
1014
|
+
---
|
|
1015
|
+
|
|
1016
|
+
## 📥 Download Media
|
|
1017
|
+
|
|
1018
|
+
```js
|
|
1019
|
+
import { downloadMediaMessage, getContentType } from '@nanazx/baileys'
|
|
1020
|
+
|
|
1021
|
+
sock.ev.on('messages.upsert', async ({ messages }) => {
|
|
1022
|
+
const msg = messages[0]
|
|
1023
|
+
if (!msg.message) return
|
|
1024
|
+
|
|
1025
|
+
const type = getContentType(msg.message)
|
|
1026
|
+
// 'imageMessage' | 'videoMessage' | 'audioMessage' | 'documentMessage' | 'stickerMessage' | ...
|
|
1027
|
+
|
|
1028
|
+
if (type === 'imageMessage') {
|
|
1029
|
+
// Download sebagai buffer
|
|
1030
|
+
const buffer = await downloadMediaMessage(msg, 'buffer', {})
|
|
1031
|
+
require('fs').writeFileSync('./hasil.jpg', buffer)
|
|
1032
|
+
|
|
1033
|
+
// Atau sebagai stream
|
|
1034
|
+
const stream = await downloadMediaMessage(msg, 'stream', {})
|
|
1035
|
+
stream.pipe(require('fs').createWriteStream('./hasil.jpg'))
|
|
1036
|
+
}
|
|
1037
|
+
})
|
|
1038
|
+
```
|
|
1039
|
+
|
|
1040
|
+
---
|
|
1041
|
+
|
|
1042
|
+
## 🔄 Re-upload Media
|
|
1043
|
+
|
|
1044
|
+
```js
|
|
1045
|
+
// WA kadang hapus media lama — re-upload dari device lain
|
|
1046
|
+
await sock.updateMediaMessage(msg)
|
|
1047
|
+
```
|
|
1048
|
+
|
|
1049
|
+
---
|
|
1050
|
+
|
|
1051
|
+
## 📖 Read Messages
|
|
1052
|
+
|
|
1053
|
+
```js
|
|
1054
|
+
// Tandai pesan sudah dibaca (satu atau banyak sekaligus)
|
|
1055
|
+
await sock.readMessages([msg.key])
|
|
1056
|
+
await sock.readMessages([msg1.key, msg2.key, msg3.key])
|
|
1057
|
+
```
|
|
1058
|
+
|
|
1059
|
+
---
|
|
1060
|
+
|
|
1061
|
+
## 👁️ Presence
|
|
1062
|
+
|
|
1063
|
+
```js
|
|
1064
|
+
// Pantau presence orang lain (typing, online)
|
|
1065
|
+
await sock.presenceSubscribe(jid)
|
|
1066
|
+
sock.ev.on('presence.update', ({ id, presences }) => {
|
|
1067
|
+
console.log(id, presences)
|
|
1068
|
+
// presences = { '628xxx@s.whatsapp.net': { lastKnownPresence: 'composing' } }
|
|
1069
|
+
})
|
|
1070
|
+
|
|
1071
|
+
// Update presence kamu sendiri
|
|
1072
|
+
// 'available' | 'unavailable' | 'composing' | 'recording' | 'paused'
|
|
1073
|
+
await sock.sendPresenceUpdate('composing', jid) // tampil "mengetik..."
|
|
1074
|
+
await sock.sendPresenceUpdate('recording', jid) // tampil "merekam..."
|
|
1075
|
+
await sock.sendPresenceUpdate('available') // online
|
|
1076
|
+
await sock.sendPresenceUpdate('unavailable') // offline
|
|
1077
|
+
```
|
|
1078
|
+
|
|
1079
|
+
---
|
|
1080
|
+
|
|
1081
|
+
## 👥 Groups
|
|
1082
|
+
|
|
1083
|
+
```js
|
|
1084
|
+
// Buat grup
|
|
1085
|
+
const group = await sock.groupCreate('Nama Grup', ['628xxx@s.whatsapp.net'])
|
|
1086
|
+
console.log('ID Grup:', group.gid)
|
|
1087
|
+
|
|
1088
|
+
// Add / Kick / Promote / Demote
|
|
1089
|
+
await sock.groupParticipantsUpdate(jid, ['628xxx@s.whatsapp.net'], 'add')
|
|
1090
|
+
// action: 'add' | 'remove' | 'promote' | 'demote'
|
|
1091
|
+
|
|
1092
|
+
// Ganti nama grup
|
|
1093
|
+
await sock.groupUpdateSubject(jid, 'Nama Baru')
|
|
1094
|
+
|
|
1095
|
+
// Ganti deskripsi
|
|
1096
|
+
await sock.groupUpdateDescription(jid, 'Deskripsi baru')
|
|
1097
|
+
|
|
1098
|
+
// Ubah setting
|
|
1099
|
+
await sock.groupSettingUpdate(jid, 'announcement') // hanya admin yang bisa kirim
|
|
1100
|
+
await sock.groupSettingUpdate(jid, 'not_announcement') // semua bisa kirim
|
|
1101
|
+
await sock.groupSettingUpdate(jid, 'locked') // hanya admin yang ubah info
|
|
1102
|
+
await sock.groupSettingUpdate(jid, 'unlocked') // semua bisa ubah info
|
|
1103
|
+
|
|
1104
|
+
// Keluar dari grup
|
|
1105
|
+
await sock.groupLeave(jid)
|
|
1106
|
+
|
|
1107
|
+
// Invite link
|
|
1108
|
+
const code = await sock.groupInviteCode(jid)
|
|
1109
|
+
console.log('https://chat.whatsapp.com/' + code)
|
|
1110
|
+
await sock.groupRevokeInvite(jid) // reset link
|
|
1111
|
+
await sock.groupAcceptInvite('kode') // join via kode
|
|
1112
|
+
const info = await sock.groupGetInviteInfo('kode') // info grup via kode
|
|
1113
|
+
|
|
1114
|
+
// Metadata grup
|
|
1115
|
+
const meta = await sock.groupMetadata(jid)
|
|
1116
|
+
console.log(meta.subject, meta.participants)
|
|
1117
|
+
|
|
1118
|
+
// Semua grup yang diikuti
|
|
1119
|
+
const all = await sock.groupFetchAllParticipating()
|
|
1120
|
+
|
|
1121
|
+
// Join request (grup dengan approval)
|
|
1122
|
+
const requests = await sock.groupRequestParticipantsList(jid)
|
|
1123
|
+
await sock.groupRequestParticipantsUpdate(jid, ['628xxx@s.whatsapp.net'], 'approve')
|
|
1124
|
+
// action: 'approve' | 'reject'
|
|
1125
|
+
|
|
1126
|
+
// Pesan menghilang (0 = off)
|
|
1127
|
+
await sock.groupToggleEphemeral(jid, 86400)
|
|
1128
|
+
|
|
1129
|
+
// Mode tambah anggota
|
|
1130
|
+
await sock.groupMemberAddMode(jid, 'all_member_add') // atau 'admin_add'
|
|
1131
|
+
|
|
1132
|
+
// Join approval mode
|
|
1133
|
+
await sock.groupJoinApprovalMode(jid, 'on') // 'on' | 'off'
|
|
1134
|
+
|
|
1135
|
+
// Acknowledge grup (tandai grup sudah dibaca)
|
|
1136
|
+
await sock.groupAcknowledge(jid)
|
|
1137
|
+
```
|
|
1138
|
+
|
|
1139
|
+
---
|
|
1140
|
+
|
|
1141
|
+
## 📡 Newsletter (Channel)
|
|
1142
|
+
|
|
1143
|
+
```js
|
|
1144
|
+
// Buat channel
|
|
1145
|
+
await sock.newsletterCreate('Nama Channel', 'Deskripsi')
|
|
1146
|
+
|
|
1147
|
+
// Metadata channel
|
|
1148
|
+
const meta = await sock.newsletterMetadata('invite', 'kode_atau_jid')
|
|
1149
|
+
|
|
1150
|
+
// Update channel
|
|
1151
|
+
await sock.newsletterUpdateName(jid, 'Nama Baru')
|
|
1152
|
+
await sock.newsletterUpdateDescription(jid, 'Deskripsi baru')
|
|
1153
|
+
await sock.newsletterUpdatePicture(jid, { url: './foto.jpg' })
|
|
1154
|
+
await sock.newsletterRemovePicture(jid)
|
|
1155
|
+
|
|
1156
|
+
// Ambil pesan channel
|
|
1157
|
+
const msgs = await sock.newsletterFetchMessages(jid, 10)
|
|
1158
|
+
|
|
1159
|
+
// Reaksi pada pesan channel
|
|
1160
|
+
await sock.newsletterReactMessage(jid, serverId, '🔥')
|
|
1161
|
+
|
|
1162
|
+
// Subscribe update channel (realtime)
|
|
1163
|
+
await sock.subscribeNewsletterUpdates(jid)
|
|
1164
|
+
|
|
1165
|
+
// Info admin & ganti owner
|
|
1166
|
+
const count = await sock.newsletterAdminCount(jid)
|
|
1167
|
+
await sock.newsletterChangeOwner(jid, newOwnerJid)
|
|
1168
|
+
await sock.newsletterDemote(jid, userJid)
|
|
1169
|
+
|
|
1170
|
+
// Daftar subscribers
|
|
1171
|
+
const subs = await sock.newsletterSubscribers(jid)
|
|
1172
|
+
|
|
1173
|
+
// Hapus channel
|
|
1174
|
+
await sock.newsletterDelete(jid)
|
|
1175
|
+
```
|
|
1176
|
+
|
|
1177
|
+
---
|
|
1178
|
+
|
|
1179
|
+
## 🌐 Community
|
|
1180
|
+
|
|
1181
|
+
```js
|
|
1182
|
+
// Buat community
|
|
1183
|
+
const community = await sock.communityCreate('Nama Community', 'Deskripsi')
|
|
1184
|
+
|
|
1185
|
+
// Buat grup di dalam community
|
|
1186
|
+
await sock.communityCreateGroup('Nama Grup', ['628xxx@s.whatsapp.net'], communityJid)
|
|
1187
|
+
|
|
1188
|
+
// Link / unlink grup ke community
|
|
1189
|
+
await sock.communityLinkGroup(groupJid, communityJid)
|
|
1190
|
+
await sock.communityUnlinkGroup(groupJid, communityJid)
|
|
1191
|
+
|
|
1192
|
+
// Ambil semua linked groups
|
|
1193
|
+
const linked = await sock.communityFetchLinkedGroups(communityJid)
|
|
1194
|
+
|
|
1195
|
+
// Update community
|
|
1196
|
+
await sock.communityUpdateSubject(communityJid, 'Nama Baru')
|
|
1197
|
+
await sock.communityUpdateDescription(communityJid, 'Deskripsi')
|
|
1198
|
+
|
|
1199
|
+
// Invite link
|
|
1200
|
+
const code = await sock.communityInviteCode(communityJid)
|
|
1201
|
+
await sock.communityRevokeInvite(communityJid)
|
|
1202
|
+
await sock.communityAcceptInvite('kode')
|
|
1203
|
+
|
|
1204
|
+
// Kelola anggota
|
|
1205
|
+
await sock.communityParticipantsUpdate(communityJid, ['628xxx@s.whatsapp.net'], 'add')
|
|
1206
|
+
// action: 'add' | 'remove' | 'promote' | 'demote'
|
|
1207
|
+
|
|
1208
|
+
// Join request
|
|
1209
|
+
const reqs = await sock.communityRequestParticipantsList(communityJid)
|
|
1210
|
+
await sock.communityRequestParticipantsUpdate(communityJid, ['628xxx@s.whatsapp.net'], 'approve')
|
|
1211
|
+
|
|
1212
|
+
// Keluar dari community
|
|
1213
|
+
await sock.communityLeave(communityJid)
|
|
1214
|
+
```
|
|
1215
|
+
|
|
1216
|
+
---
|
|
1217
|
+
|
|
1218
|
+
## 🤖 AI Groups
|
|
1219
|
+
|
|
1220
|
+
```js
|
|
1221
|
+
// Buat AI Group
|
|
1222
|
+
const aiGroup = await sock.aiGroupCreate('Nama AI Group', ['628xxx@s.whatsapp.net'])
|
|
1223
|
+
|
|
1224
|
+
// Tambah bot ke AI group (default: Meta AI)
|
|
1225
|
+
await sock.aiGroupAddBot(jid)
|
|
1226
|
+
await sock.aiGroupAddBot(jid, '867051314767696') // explicit bot ID
|
|
1227
|
+
|
|
1228
|
+
// Update subjek
|
|
1229
|
+
await sock.aiGroupUpdateSubject(jid, 'Subjek Baru')
|
|
1230
|
+
|
|
1231
|
+
// Get invite code & join
|
|
1232
|
+
const code = await sock.aiGroupInviteCode(jid)
|
|
1233
|
+
await sock.aiGroupAcceptInvite('kode')
|
|
1234
|
+
await sock.aiGroupRevokeInvite(jid)
|
|
1235
|
+
|
|
1236
|
+
// Kelola anggota
|
|
1237
|
+
await sock.aiGroupParticipantsUpdate(jid, ['628xxx@s.whatsapp.net'], 'add')
|
|
1238
|
+
|
|
1239
|
+
// Setting & ephemeral
|
|
1240
|
+
await sock.aiGroupSettingUpdate(jid, 'announcement')
|
|
1241
|
+
await sock.aiGroupToggleEphemeral(jid, 86400)
|
|
1242
|
+
|
|
1243
|
+
// Keluar
|
|
1244
|
+
await sock.aiGroupLeave(jid)
|
|
1245
|
+
```
|
|
1246
|
+
|
|
1247
|
+
---
|
|
1248
|
+
|
|
1249
|
+
## 🔗 Username WA
|
|
1250
|
+
|
|
1251
|
+
```js
|
|
1252
|
+
// Cek ketersediaan username
|
|
1253
|
+
const result = await sock.checkUsername('nazxtampan')
|
|
1254
|
+
// { available: true, username: 'nazxtampan' }
|
|
1255
|
+
|
|
1256
|
+
// Set username
|
|
1257
|
+
await sock.setUsername('nazxtampan')
|
|
1258
|
+
|
|
1259
|
+
// Get username kamu
|
|
1260
|
+
const me = await sock.getMyUsername()
|
|
1261
|
+
|
|
1262
|
+
// Cari user berdasarkan username
|
|
1263
|
+
const user = await sock.findUserByUsername('nazxtampan')
|
|
1264
|
+
// { jid: '628xxx@s.whatsapp.net', contact: false } atau null
|
|
1265
|
+
|
|
1266
|
+
// Ambil username dari daftar JID
|
|
1267
|
+
const usernames = await sock.fetchContactUsernames('628xxx@s.whatsapp.net')
|
|
1268
|
+
|
|
1269
|
+
// Cek banyak username sekaligus
|
|
1270
|
+
const results = await sock.checkUsernameMulti(['nazx', 'nazxtampan', 'nazxbot'])
|
|
1271
|
+
|
|
1272
|
+
// Rekomendasi username
|
|
1273
|
+
const recs = await sock.getUsernameRecommendations()
|
|
1274
|
+
|
|
1275
|
+
// Set PIN username
|
|
1276
|
+
await sock.setUsernamePin('123456')
|
|
1277
|
+
|
|
1278
|
+
// Hapus username
|
|
1279
|
+
await sock.deleteUsername()
|
|
1280
|
+
```
|
|
1281
|
+
|
|
1282
|
+
---
|
|
1283
|
+
|
|
1284
|
+
## 🔒 Privacy
|
|
1285
|
+
|
|
1286
|
+
```js
|
|
1287
|
+
// Blokir / Unblokir
|
|
1288
|
+
await sock.updateBlockStatus(jid, 'block')
|
|
1289
|
+
await sock.updateBlockStatus(jid, 'unblock')
|
|
1290
|
+
|
|
1291
|
+
// Ambil privacy settings
|
|
1292
|
+
const privacy = await sock.fetchPrivacySettings()
|
|
1293
|
+
const freshPrivacy = await sock.fetchPrivacySettings(true) // force refresh
|
|
1294
|
+
|
|
1295
|
+
// Ambil blocklist
|
|
1296
|
+
const blocklist = await sock.fetchBlocklist()
|
|
1297
|
+
|
|
1298
|
+
// Update privacy (IQ-based)
|
|
1299
|
+
await sock.updateLastSeenPrivacy('contacts') // 'all' | 'contacts' | 'contact_blacklist' | 'none'
|
|
1300
|
+
await sock.updateOnlinePrivacy('all') // 'all' | 'match_last_seen'
|
|
1301
|
+
await sock.updateProfilePicturePrivacy('contacts') // 'all' | 'contacts' | 'contact_blacklist' | 'none'
|
|
1302
|
+
await sock.updateStatusPrivacy('contacts')
|
|
1303
|
+
await sock.updateReadReceiptsPrivacy('all') // 'all' | 'none'
|
|
1304
|
+
await sock.updateGroupsAddPrivacy('contacts') // 'all' | 'contacts' | 'contact_blacklist'
|
|
1305
|
+
await sock.updateCallPrivacy('all')
|
|
1306
|
+
await sock.updateDefaultDisappearingMode(86400) // 0 = off
|
|
1307
|
+
|
|
1308
|
+
// Set via MEX GraphQL (lowercase feature & setting)
|
|
1309
|
+
await sock.setPrivacySetting('last', 'contacts')
|
|
1310
|
+
await sock.setPrivacySetting('online', 'all')
|
|
1311
|
+
await sock.setPrivacySetting('profile', 'contacts')
|
|
1312
|
+
await sock.setPrivacySetting('status', 'contacts')
|
|
1313
|
+
await sock.setPrivacySetting('readreceipts', 'all')
|
|
1314
|
+
await sock.setPrivacySetting('groupadd', 'contact_blacklist')
|
|
1315
|
+
await sock.setPrivacySetting('calladd', 'contacts')
|
|
1316
|
+
await sock.setPrivacySetting('defense', 'on_standard') // anti-scraping
|
|
1317
|
+
|
|
1318
|
+
// Kelola contact list untuk blacklist
|
|
1319
|
+
await sock.updatePrivacyContactList('groupadd', 'contact_blacklist', [jid1, jid2])
|
|
1320
|
+
const current = await sock.getPrivacyContactList('groupadd', 'contact_blacklist')
|
|
1321
|
+
|
|
1322
|
+
// Block pesan dari akun tidak dikenal
|
|
1323
|
+
const status = await sock.getChatBlockingStatus() // 'blocked' | 'unblocked'
|
|
1324
|
+
await sock.updateChatBlockingStatus('block')
|
|
1325
|
+
```
|
|
1326
|
+
|
|
1327
|
+
---
|
|
1328
|
+
|
|
1329
|
+
## 👤 User & Profile
|
|
1330
|
+
|
|
1331
|
+
```js
|
|
1332
|
+
// Cek apakah nomor terdaftar di WA
|
|
1333
|
+
const [result] = await sock.onWhatsApp('628xxxxxxxxx')
|
|
1334
|
+
console.log(result.exists, result.jid)
|
|
1335
|
+
|
|
1336
|
+
// Foto profil
|
|
1337
|
+
const pp = await sock.profilePictureUrl(jid, 'preview') // resolusi rendah
|
|
1338
|
+
const ppHD = await sock.profilePictureUrl(jid, 'image') // resolusi tinggi
|
|
1339
|
+
|
|
1340
|
+
// Status teks (legacy)
|
|
1341
|
+
const status = await sock.fetchStatus(jid)
|
|
1342
|
+
|
|
1343
|
+
// About text via MEX
|
|
1344
|
+
const abouts = await sock.getTextStatusList([jid])
|
|
1345
|
+
// [{ jid, text: 'Hey there!', emoji: '👋', timestamp: 1234567890 }]
|
|
1346
|
+
|
|
1347
|
+
// Profil bisnis
|
|
1348
|
+
const biz = await sock.getBusinessProfile(jid)
|
|
1349
|
+
|
|
1350
|
+
// Update profil
|
|
1351
|
+
await sock.updateProfileName('Nama Baru')
|
|
1352
|
+
await sock.updateProfileStatus('Bot aktif 24/7 🤖')
|
|
1353
|
+
await sock.updateProfilePicture(jid, { url: './foto.jpg' })
|
|
1354
|
+
await sock.removeProfilePicture(jid)
|
|
1355
|
+
|
|
1356
|
+
// History chat
|
|
1357
|
+
await sock.fetchMessageHistory(50, oldestMsg.key, oldestMsg.messageTimestamp)
|
|
1358
|
+
|
|
1359
|
+
// Verifikasi JID sebelum buka chat
|
|
1360
|
+
const integrity = await sock.contactIntegrityQuery([jid])
|
|
1361
|
+
```
|
|
1362
|
+
|
|
1363
|
+
---
|
|
1364
|
+
|
|
1365
|
+
## 💬 Modifikasi Chat
|
|
1366
|
+
|
|
1367
|
+
```js
|
|
1368
|
+
// Archive / Unarchive
|
|
1369
|
+
await sock.chatModify({ archive: true, lastMessages: [msg] }, jid)
|
|
1370
|
+
await sock.chatModify({ archive: false, lastMessages: [msg] }, jid)
|
|
1371
|
+
|
|
1372
|
+
// Mute (dalam ms) | null = unmute
|
|
1373
|
+
await sock.chatModify({ mute: 8 * 60 * 60 * 1000 }, jid) // mute 8 jam
|
|
1374
|
+
await sock.chatModify({ mute: 7 * 24 * 60 * 60 * 1000 }, jid) // mute 7 hari
|
|
1375
|
+
await sock.chatModify({ mute: null }, jid) // unmute
|
|
1376
|
+
|
|
1377
|
+
// Tandai belum/sudah dibaca
|
|
1378
|
+
await sock.chatModify({ markRead: false, lastMessages: [msg] }, jid)
|
|
1379
|
+
await sock.chatModify({ markRead: true, lastMessages: [msg] }, jid)
|
|
1380
|
+
|
|
1381
|
+
// Hapus pesan untuk saya saja
|
|
1382
|
+
await sock.chatModify({
|
|
1383
|
+
clear: {
|
|
1384
|
+
messages: [{ id: msg.key.id, fromMe: msg.key.fromMe, timestamp: msg.messageTimestamp }]
|
|
1385
|
+
}
|
|
1386
|
+
}, jid)
|
|
1387
|
+
|
|
1388
|
+
// Hapus seluruh chat
|
|
1389
|
+
await sock.chatModify({ delete: true, lastMessages: [msg] }, jid)
|
|
1390
|
+
|
|
1391
|
+
// Pin / Unpin chat
|
|
1392
|
+
await sock.chatModify({ pin: true }, jid)
|
|
1393
|
+
await sock.chatModify({ pin: false }, jid)
|
|
1394
|
+
|
|
1395
|
+
// Bintangi / Hapus bintang pesan
|
|
1396
|
+
await sock.chatModify({
|
|
1397
|
+
star: {
|
|
1398
|
+
messages: [{ id: msg.key.id, fromMe: msg.key.fromMe }],
|
|
1399
|
+
star: true // false = hapus bintang
|
|
1400
|
+
}
|
|
1401
|
+
}, jid)
|
|
1402
|
+
|
|
1403
|
+
// Pesan menghilang di chat
|
|
1404
|
+
await sock.sendMessage(jid, { disappearingMessagesInChat: 86400 }) // aktifkan
|
|
1405
|
+
await sock.sendMessage(jid, { disappearingMessagesInChat: false }) // nonaktifkan
|
|
1406
|
+
```
|
|
1407
|
+
|
|
1408
|
+
---
|
|
1409
|
+
|
|
1410
|
+
## 📞 Panggilan
|
|
1411
|
+
|
|
1412
|
+
```js
|
|
1413
|
+
// Tolak panggilan masuk
|
|
1414
|
+
await sock.rejectCall(callId, callFrom)
|
|
1415
|
+
|
|
1416
|
+
// Buat call link
|
|
1417
|
+
const token = await sock.createCallLink('audio') // 'audio' | 'video'
|
|
1418
|
+
|
|
1419
|
+
// Toggle waiting room di call link
|
|
1420
|
+
await sock.toggleCallLinkWaitingRoom(token, true, 'audio')
|
|
1421
|
+
|
|
1422
|
+
// Event panggilan
|
|
1423
|
+
sock.ev.on('call', (calls) => {
|
|
1424
|
+
for (const call of calls) {
|
|
1425
|
+
console.log('Panggilan dari:', call.from, 'status:', call.status)
|
|
1426
|
+
// Tolak otomatis
|
|
1427
|
+
if (call.status === 'offer') {
|
|
1428
|
+
sock.rejectCall(call.id, call.from)
|
|
1429
|
+
}
|
|
1430
|
+
}
|
|
1431
|
+
})
|
|
1432
|
+
```
|
|
1433
|
+
|
|
1434
|
+
---
|
|
1435
|
+
|
|
1436
|
+
## 🗳️ Decrypt Poll Votes
|
|
1437
|
+
|
|
1438
|
+
```js
|
|
1439
|
+
import { getAggregateVotesInPollMessage } from '@nanazx/baileys'
|
|
1440
|
+
|
|
1441
|
+
sock.ev.on('messages.update', async (updates) => {
|
|
1442
|
+
for (const { key, update } of updates) {
|
|
1443
|
+
if (update.pollUpdates) {
|
|
1444
|
+
const pollCreation = await getMessage(key) // ambil dari store
|
|
1445
|
+
if (pollCreation) {
|
|
1446
|
+
const votes = getAggregateVotesInPollMessage({
|
|
1447
|
+
message: pollCreation,
|
|
1448
|
+
pollUpdates: update.pollUpdates
|
|
1449
|
+
})
|
|
1450
|
+
console.log('Hasil poll:', votes)
|
|
1451
|
+
// [{ name: 'Opsi A', voters: ['628xxx@s.whatsapp.net'] }, ...]
|
|
1452
|
+
}
|
|
1453
|
+
}
|
|
1454
|
+
}
|
|
1455
|
+
})
|
|
1456
|
+
```
|
|
1457
|
+
|
|
1458
|
+
---
|
|
1459
|
+
|
|
1460
|
+
## 🔧 Custom Functionality
|
|
1461
|
+
|
|
1462
|
+
```js
|
|
1463
|
+
import P from 'pino'
|
|
1464
|
+
|
|
1465
|
+
// Enable debug logs
|
|
1466
|
+
const sock = makeWASocket({ logger: P({ level: 'debug' }) })
|
|
1467
|
+
|
|
1468
|
+
// Raw WebSocket events
|
|
1469
|
+
sock.ws.on('CB:message', node => console.log(node))
|
|
1470
|
+
|
|
1471
|
+
// Register callback untuk WA node tertentu
|
|
1472
|
+
sock.ws.on('CB:edge_routing', node => {})
|
|
1473
|
+
sock.ws.on('CB:ib,,dirty', node => {})
|
|
1474
|
+
sock.ws.on('CB:iq,,result', node => {})
|
|
1475
|
+
|
|
1476
|
+
// Raw WebSocket callback dengan filter atribut
|
|
1477
|
+
sock.ws.on('CB:edge_routing,id:abcd', node => {})
|
|
1478
|
+
sock.ws.on('CB:edge_routing,id:abcd,routing_info', node => {})
|
|
1479
|
+
```
|
|
1480
|
+
|
|
1481
|
+
---
|
|
1482
|
+
|
|
1483
|
+
## 📁 Struktur Library
|
|
1484
|
+
|
|
1485
|
+
```
|
|
1486
|
+
@nanazx/baileys/
|
|
1487
|
+
├── lib/
|
|
1488
|
+
│ ├── Socket/
|
|
1489
|
+
│ │ ├── socket.js # core websocket
|
|
1490
|
+
│ │ ├── messages-send.js # sendMessage, relayMessage, readMessages
|
|
1491
|
+
│ │ ├── messages-recv.js # terima & decode pesan
|
|
1492
|
+
│ │ ├── interactive-handler.js # Baron class (album, event, interactive, dll)
|
|
1493
|
+
│ │ ├── chats.js # chat modifier, presence, profile, user queries
|
|
1494
|
+
│ │ ├── groups.js # group management
|
|
1495
|
+
│ │ ├── newsletter.js # channel/newsletter WA
|
|
1496
|
+
│ │ ├── communities.js # community WA
|
|
1497
|
+
│ │ ├── aigroups.js # AI Groups ★ nanazx
|
|
1498
|
+
│ │ ├── username.js # WA username ★ nanazx
|
|
1499
|
+
│ │ ├── privacy.js # MEX privacy ★ nanazx
|
|
1500
|
+
│ │ ├── interop.js # FB/IG interop ★ nanazx
|
|
1501
|
+
│ │ ├── graphql.js # HTTPS GraphQL ★ nanazx
|
|
1502
|
+
│ │ ├── managed-account.js # managed account ★ nanazx
|
|
1503
|
+
│ │ ├── registration.js # registrasi & passkeys ★ nanazx
|
|
1504
|
+
│ │ └── mex.js # MEX protocol core ★ nanazx
|
|
1505
|
+
│ ├── Utils/
|
|
1506
|
+
│ │ ├── messages.js # generateWAMessage & semua content types
|
|
1507
|
+
│ │ ├── messages-media.js # upload, download, thumbnail media
|
|
1508
|
+
│ │ ├── auth-utils.js # auth state utilities
|
|
1509
|
+
│ │ ├── crypto.js # enkripsi/dekripsi
|
|
1510
|
+
│ │ └── ...
|
|
1511
|
+
│ ├── Types/ # TypeScript type definitions
|
|
1512
|
+
│ ├── Store/ # in-memory store
|
|
1513
|
+
│ └── Defaults/ # konfigurasi default
|
|
1514
|
+
└── WAProto/ # protobuf WhatsApp
|
|
1515
|
+
```
|
|
1516
|
+
|
|
1517
|
+
---
|
|
1518
|
+
|
|
1519
|
+
## 🙏 Credits
|
|
1520
|
+
|
|
1521
|
+
| Project | Link |
|
|
1522
|
+
|---------|------|
|
|
1523
|
+
| **Baileys** (by WhiskeySockets) | [github.com/WhiskeySockets/Baileys](https://github.com/WhiskeySockets/Baileys) |
|
|
1524
|
+
| **baron-baileys-v2** (by 7ucg) | [github.com/7ucg/baron-baileys-v2](https://github.com/7ucg/baron-baileys-v2) |
|
|
1525
|
+
|
|
1526
|
+
Terima kasih besar kepada seluruh kontributor dan maintainer kedua proyek luar biasa tersebut 🫶
|
|
1527
|
+
|
|
1528
|
+
---
|
|
1529
|
+
|
|
1530
|
+
## 📱 Kontak
|
|
1531
|
+
|
|
1532
|
+
| Platform | Link |
|
|
1533
|
+
|----------|------|
|
|
1534
|
+
| 🐙 GitHub | [@Nazril0](https://github.com/Nazril0) |
|
|
1535
|
+
| 📸 Instagram | [@nazzxx._0](https://instagram.com/nazzxx._0) |
|
|
1536
|
+
| 🎵 TikTok | [@nazxtampan__](https://tiktok.com/@nazxtampan__) |
|
|
1537
|
+
|
|
1538
|
+
---
|
|
1539
|
+
|
|
1540
|
+
<div align="center">
|
|
1541
|
+
|
|
1542
|
+
Made with ❤️ by **nazx**
|
|
1543
|
+
|
|
1544
|
+
Built on top of [WhiskeySockets/Baileys](https://github.com/WhiskeySockets/Baileys) & [7ucg/baron-baileys-v2](https://github.com/7ucg/baron-baileys-v2)
|
|
1545
|
+
|
|
1546
|
+
⚠️ Tidak berafiliasi dengan WhatsApp. Gunakan dengan tanggung jawab.
|
|
1547
|
+
|
|
1548
|
+
</div>
|