@aetherzcode/baileyszx
v1.0.9
Published
WhatsApp API
Maintainers
Readme
🚀 WhatsApp Web API
A powerful WebSockets-based TypeScript library for interacting with the WhatsApp Web API
📖 Documentation • 🚀 Quick Start • 💬 Support • 🤝 Contributing
⚠️ Important Disclaimer
[!WARNING] This project is not affiliated with WhatsApp Inc. Use responsibly and comply with WhatsApp's Terms of Service.
We strongly discourage:
- Spam messaging
- Bulk messaging
- Stalkerware usage
- Any automated abuse
✨ Features
| 🔐 Multi-Device Support | 📱 QR & Pairing Code | 🎨 Rich Messages | 🔄 Real-time Events | |:---:|:---:|:---:|:---:| | Connect as secondary device | Multiple connection methods | Buttons, polls, media, etc. | Live message updates |
| 👥 Group Management | 🔒 Privacy Controls | 📊 Message History | 🎯 Custom Functions | |:---:|:---:|:---:|:---:| | Full admin capabilities | Block, privacy settings | Fetch chat history | Extensible architecture |
🚀 Quick Start
📦 Installation
Choose your preferred package manager:
# Using npm (stable version) **not available**
npm install @aetherzcode/baileyszx
# Using yarn (edge version)
yarn add @aetherzcode/baileyszx🔌 Basic Usage
const { default: makeWASocket, DisconnectReason, useMultiFileAuthState } = require("@aetherzcode/baileyszx");
const { Boom } = require('@hapi/boom');
async function connectToWhatsApp() {
const { state, saveCreds } = await useMultiFileAuthState('auth_info_baileys');
const sock = makeWASocket({
auth: state,
printQRInTerminal: true
});
sock.ev.on('connection.update', (update) => {
const { connection, lastDisconnect } = update;
if(connection === 'close') {
const shouldReconnect = (lastDisconnect.error as Boom)?.output?.statusCode !== DisconnectReason.loggedOut;
console.log('Connection closed, reconnecting...', shouldReconnect);
if(shouldReconnect) {
connectToWhatsApp();
}
} else if(connection === 'open') {
console.log('✅ Connected to WhatsApp!');
}
});
sock.ev.on('messages.upsert', async (m) => {
console.log('📩 New message:', JSON.stringify(m, undefined, 2));
// Echo received messages
const msg = m.messages[0];
if (!msg.key.fromMe && msg.message) {
await sock.sendMessage(msg.key.remoteJid, { text: 'Hello! 👋' });
}
});
sock.ev.on('creds.update', saveCreds);
}
connectToWhatsApp();📚 Table of Contents
🏗️ Setup & Connection
📨 Messaging
👥 Groups & Privacy
🔧 Advanced
🔌 Connecting Account
📱 Starting socket with QR-CODE
[!TIP] Customize browser name using the
Browserconstant. See available browsers.
const { default: makeWASocket, Browsers } = require("@aetherzcode/baileyszx");
const sock = makeWASocket({
browser: Browsers.ubuntu('My App'),
printQRInTerminal: true
});🔢 Starting socket with Pairing Code
[!IMPORTANT] Pairing Code connects WhatsApp Web without QR-CODE. Phone number format: country code + number (no +, (), or -)
const sock = makeWASocket({
printQRInTerminal: false // Must be false for pairing code
});
// Standard pairing
if (!sock.authState.creds.registered) {
const number = '1234567890'; // Your phone number
const code = await sock.requestPairingCode(number);
console.log('🔑 Pairing Code:', code);
}
// Custom pairing (8 digits/letters)
if (!sock.authState.creds.registered) {
const customPair = "12345678";
const number = '1234567890';
const code = await sock.requestPairingCode(number, customPair);
console.log('🔑 Custom Pairing Code:', code);
}💾 Saving & Restoring Sessions
Never scan QR codes again! Save your session:
const { useMultiFileAuthState } = require("@aetherzcode/baileyszx");
const { state, saveCreds } = await useMultiFileAuthState('auth_info_baileys');
const sock = makeWASocket({ auth: state });
// Auto-save credentials when they update
sock.ev.on('creds.update', saveCreds);[!WARNING] Always save auth keys when they update (
authState.keys.set()is called) to ensure message delivery!
📤 Sending Messages
📝 Text Message
await sock.sendMessage(jid, { text: 'Hello World! 🌍' });🔘 Button Message
await sock.sendMessage(jid, {
text: "Choose an option:",
footer: "© 2025 Your Bot",
buttons: [
{
buttonId: 'btn1',
buttonText: { displayText: '✅ Option 1' },
type: 1
},
{
buttonId: 'btn2',
buttonText: { displayText: '❌ Option 2' },
type: 1
}
],
headerType: 1
});🎯 Interactive Message with Flow
await sock.sendMessage(jid, {
text: "Interactive Menu",
footer: "© 2025 Bot",
buttons: [
{
buttonId: 'menu',
buttonText: { displayText: '📋 Show Menu' },
type: 4,
nativeFlowInfo: {
name: 'single_select',
paramsJson: JSON.stringify({
title: 'Select Option',
sections: [{
title: 'Available Options',
highlight_label: '⭐',
rows: [
{
header: 'OPTION 1',
title: 'First Choice',
description: 'Description for option 1',
id: 'opt1'
},
{
header: 'OPTION 2',
title: 'Second Choice',
description: 'Description for option 2',
id: 'opt2'
}
]
}]
})
}
}
]
});📋 Poll Message
await sock.sendMessage(jid, {
poll: {
name: 'What\'s your favorite color? 🎨',
values: ['🔴 Red', '🔵 Blue', '🟢 Green', '🟡 Yellow'],
selectableCount: 1
}
});🖼️ Image Message
await sock.sendMessage(jid, {
image: { url: './path/to/image.jpg' },
caption: 'Beautiful image! 📸'
});🎥 Video Message
await sock.sendMessage(jid, {
video: { url: './path/to/video.mp4' },
caption: 'Check this out! 🎬',
ptv: false // Set to true for video note
});🎵 Audio Message
await sock.sendMessage(jid, {
audio: { url: './path/to/audio.mp3' },
mimetype: 'audio/mp4'
});📊 Implementing a Data Store
[!IMPORTANT] Build your own data store for production. The in-memory store is just for testing!
const { makeInMemoryStore } = require("@aetherzcode/baileyszx");
const store = makeInMemoryStore({});
// Load from file
store.readFromFile('./baileys_store.json');
// Auto-save every 10 seconds
setInterval(() => {
store.writeToFile('./baileys_store.json');
}, 10_000);
// Bind to socket
const sock = makeWASocket({});
store.bind(sock.ev);
// Access stored data
sock.ev.on('chats.upsert', () => {
console.log('💬 Chats:', store.chats.all());
});👥 Groups
🆕 Create a Group
const group = await sock.groupCreate('🎉 My Awesome Group', [
'[email protected]',
'[email protected]'
]);
console.log('✅ Group created:', group.id);
await sock.sendMessage(group.id, { text: 'Welcome everyone! 👋' });👤 Add/Remove Participants
await sock.groupParticipantsUpdate(
groupJid,
['[email protected]'],
'add' // 'remove', 'promote', 'demote'
);⚙️ Change Group Settings
// Update group name
await sock.groupUpdateSubject(groupJid, '🚀 New Group Name');
// Update description
await sock.groupUpdateDescription(groupJid, '📝 New group description');
// Admin-only messages
await sock.groupSettingUpdate(groupJid, 'announcement');
// Everyone can send messages
await sock.groupSettingUpdate(groupJid, 'not_announcement');🔒 Privacy
🚫 Block/Unblock Users
// Block user
await sock.updateBlockStatus(jid, 'block');
// Unblock user
await sock.updateBlockStatus(jid, 'unblock');⚙️ Privacy Settings
// Update various privacy settings
await sock.updateLastSeenPrivacy('contacts'); // 'all', 'contacts', 'none'
await sock.updateOnlinePrivacy('all'); // 'all', 'match_last_seen'
await sock.updateProfilePicturePrivacy('contacts');
await sock.updateStatusPrivacy('contacts');
await sock.updateReadReceiptsPrivacy('all'); // 'all', 'none'🐛 Debugging
Enable debug mode to see all WhatsApp communications:
const sock = makeWASocket({
logger: P({ level: 'debug' }),
});🎯 Custom Event Handlers
// Listen for specific WebSocket events
sock.ws.on('CB:edge_routing', (node) => {
console.log('📡 Edge routing message:', node);
});
// Listen with specific attributes
sock.ws.on('CB:edge_routing,id:abcd', (node) => {
console.log('🎯 Specific edge routing message:', node);
});💬 Support
🆘 Need Help?
| 📞 Contact | 💬 WhatsApp | 📧 Issues | |:---:|:---:|:---:| | 6285798045817 | For Baileys support | GitHub Issues |
🤝 Contributing
We welcome contributions! Here's how you can help:
- 🍴 Fork the repository
- 🌟 Create your feature branch (
git checkout -b feature/AmazingFeature) - 💻 Commit your changes (
git commit -m 'Add some AmazingFeature') - 📤 Push to the branch (
git push origin feature/AmazingFeature) - 🔄 Open a Pull Request
📄 License
This project is licensed under the GPL v3 License - see the LICENSE file for details.
🙏 Acknowledgments
- Built with ❤️ using libsignal-node
- Special thanks to the WhatsApp Web reverse engineering community
⭐ Star this repo if it helped you!
Made with 💻 and ☕ by the community
