whatsauto.js
Version:
Easy WhatsApp Automation with Session
211 lines (159 loc) • 7.05 kB
Markdown
# WhatsAuto.js - Lightweight WhatsApp Automation
**WhatsAuto.js** is a powerful, lightweight, and easy-to-use library for building WhatsApp automation applications using Node.js. Built on top of the robust [Baileys](https://github.com/WhiskeySockets/Baileys) library, it provides a high-level, Object-Oriented interface to interact with WhatsApp without the overhead of browser automation tools like Selenium or Puppeteer.
## ✨ Features
- **🚀 Lightweight & Fast**: Runs directly on Node.js using WebSocket connections. No browser required.
- **🔑 Flexible Authentication**: Supports both **QR Code** scanning and **Pairing Code** (phone number) login methods.
- **📦 Object-Oriented Design**: Clean class-based architecture (`AutoWA`) making it easy to manage sessions and logic.
- **💬 Rich Message Support**: Send and receive Text, Images, Videos, Audio (Voice Notes), Documents, and Stickers easily.
- **⚡ Event-Driven**: Listen to real-time events like `message`, `group-participants.update`, `connection.update`, etc.
- **👥 Group Management**: Create tools to manage groups (add, remove, promote, demote members).
- **🛠️ Developer Friendly**: Written in TypeScript with full type definitions included.
---
## 📥 Installation
Install the package via npm:
```bash
npm install whatsauto.js
```
---
## 🚀 Quick Start
### 1. Initialize a Client
You can start a session using either a QR Code (default) or a Pairing Code.
**Option A: Using QR Code**
```ts
import { AutoWA } from "whatsauto.js";
const client = new AutoWA("my-session", {
printQR: true, // Prints QR code in the terminal
logging: true, // Enable logs
});
client.initialize();
client.on("connected", () => {
console.log("✅ Client is ready!");
});
```
**Option B: Using Pairing Code**
```ts
import { AutoWA } from "whatsauto.js";
const client = new AutoWA("my-session", {
phoneNumber: "6281234567890", // Your phone number (Country Code + Number)
});
client.initialize();
client.on("pairing-code", (code) => {
console.log(`🔑 Pairing Code: ${code}`);
});
client.on("connected", () => {
console.log("✅ Client is ready!");
});
```
### 2. Handling Messages
Listen to the `message` event to handle incoming messages. The `msg` object comes with built-in helper methods!
```ts
client.on("message", async (msg) => {
if (msg.key.fromMe) return; // Ignore messages from yourself
console.log(`📩 New Message from ${msg.from}: ${msg.text}`);
if (msg.text === "!ping") {
// Reply directly using the message object
await msg.replyWithText("Pong! 🏓");
}
if (msg.text === "!sticker" && msg.hasMedia) {
// Convert received image/video to sticker
const [stickerBuffer] = await msg.toSticker({ pack: "MyBot", author: "Me" });
if (stickerBuffer) {
await msg.replyWithSticker(stickerBuffer);
}
}
});
```
---
## 📚 Core Concepts & API
### `AutoWA` Class
The main entry point for the library.
**Constructor**
`new AutoWA(sessionId: string, options?: IWAutoSessionConfig)`
- `sessionId`: Unique identifier for the session (auth credentials will be saved under this name).
- `options`:
- `printQR`: (boolean) Auto-print QR in terminal.
- `phoneNumber`: (string) Use pairing code with this number.
- `logging`: (boolean) Enable/disable console logs.
**Main Methods**
| Method | Description |
| :--- | :--- |
| `initialize()` | Starts the WhatsApp connection. |
| `destroy(full?)` | Stops the session. If `full` is true, deletes session files. |
| `sendText({ to, text })` | Sends a text message. |
| `sendImage({ to, media, text })` | Sends an image (URL or Buffer). |
| `sendVideo({ to, media, text })` | Sends a video. |
| `sendAudio({ to, media, voiceNote })` | Sends audio. Set `voiceNote: true` for PTT (Push-to-Talk). |
| `sendDocument({ to, media, filename })` | Sends a file/document. |
| `sendSticker({ to, sticker })` | Sends a sticker (Buffer). |
| `getProfileInfo(jid)` | Get status and profile picture of a user. |
| `getGroupInfo(jid)` | Get group metadata (participants, description, etc.). |
**Group Management Methods**
- `addMemberToGroup({ to, participants })`
- `removeMemberFromGroup({ to, participants })`
- `promoteMemberGroup({ to, participants })`
- `demoteMemberGroup({ to, participants })`
---
### `IWAutoMessage` Object
When an event triggers, you receive an `IWAutoMessage` object. It wraps the raw Baileys message with useful properties and methods.
**Properties**
- `from`: Sender's JID.
- `text`: Message content (Text/Caption).
- `hasMedia`: Boolean, true if message contains media.
- `mediaType`: 'image', 'video', 'audio', etc.
- `isGroup`: Boolean.
- `isStory`: Boolean.
- `quotedMessage`: The message this message is replying to (if any).
**Helper Methods (Context-Aware)**
These methods automatically reply to the current message (quote it).
- `msg.replyWithText("Hello")`
- `msg.replyWithImage("http://...", { text: "Caption" })`
- `msg.replyWithSticker(buffer)`
- `msg.react("❤️")`
- `msg.read()` - Mark as read.
- `msg.downloadMedia()` - Downloads media to disk or buffer.
- `msg.toSticker()` - Converts the message's media to a sticker buffer.
---
## ⚡ Events (`client.on`)
| Event Name | Description |
| :--- | :--- |
| `qr` | Emitted when a new QR code is generated. Access the QR string as the first argument. |
| `pairing-code` | Emitted when a pairing code is requested. |
| `connecting` | Connection is being established. |
| `connected` | Client is successfully connected to WhatsApp. |
| `disconnected` | Client disconnected. |
| `message` | Emitted for **ALL** incoming messages (private, group, status). |
| `group-message` | Emitted only for group messages. |
| `private-message` | Emitted only for private chats. |
| `message-deleted` | Emitted when a message is deleted (Revoke). |
| `group-participants.update`| Emitted when members join, leave, or are promoted/demoted in a group. |
---
## 🛠️ Advanced Usage
### Handling Media
Downloading media from a message is simple:
```ts
client.on("message", async (msg) => {
if (msg.hasMedia) {
// defaults: saves to 'my_media.{ext}' in current dir
const filePath = await msg.downloadMedia();
console.log(`Media saved at: ${filePath}`);
// OR get as buffer
// const buffer = await msg.downloadMedia({ asBuffer: true });
}
});
```
### Group Member Updates
Welcome new members:
```ts
client.on("group-member-update", async (update) => {
if (update.action === "add") {
// update.id = Group JID
// update.participants = Array of new members
// You can reply directly to the update event!
await update.replyWithText(`Welcome to the group! 👋`);
}
});
```
---
## 📄 License
This library is essentially a wrapper around Baileys and is provided for educational purposes. Use responsibly.
ISC License.