0.3.0 • Published 9 months ago
baileys-decorators v0.3.0
BaileysDecorator
📌 Introduction
BaileysDecorator is a TypeScript library that simplifies event handling for WhatsApp bots using @whiskeysockets/baileys. By leveraging decorators, it provides a structured, maintainable, and scalable approach to handling bot events.
🚀 Features
- Automatic decorator detection from specified directories.
 - Flexible file pattern support for selecting specific decorators (e.g., 
**/*.ts,**/*.controller.ts). - Seamless integration with Baileys for efficient bot automation.
 - Dynamic event binding for streamlined event handling.
 - Customizable decorator loader for different project needs.
 - Instance persistence ensuring correct 
thiscontext in class methods. 
📦 Installation
bun add baileys-decorators🛠 Usage
1. Load Decorators Automatically
import { BaileysDecorator } from 'baileys-decorators';
await BaileysDecorator.loadDecorators([
  './baileys-decorators/example/**/*.action.ts'
]);2. Custom Loader for Decorators
Define a function to handle imported decorators:
await BaileysDecorator.loadDecorators([
  './baileys-decorators/example/**/*.ts'
], (files) => {
  console.log("Loaded Files:");
  Object.keys(files).forEach(file => console.log(`✅ ${file}`));
});3. Binding Baileys Socket to Events
Ensure event handlers work correctly with Baileys:
import makeWASocket from '@whiskeysockets/baileys';
const socket = makeWASocket({ auth: {} });
BaileysDecorator.bind(socket);🎭 Creating Decorators
1. Event Handling with @OnEvent
Bind a method to a Baileys event:
import { OnEvent, Context } from 'baileys-decorators';
class WhatsAppBot {
  @OnEvent('messages.upsert')
  async handleMessage(@Context eventData) {
    console.log('New message received:', eventData);
  }
}2. Text-Based Event Matching with @OnText
Trigger actions based on text patterns:
import { OnText } from 'baileys-decorators';
class BotCommands {
  @OnText('/hello')
  async greetUser(@Context message) {
    console.log('User said hello:', message);
  }
}3. Using @Socket and @Context for Dependency Injection
Inject dependencies into event handlers while maintaining this context:
import { Socket, Context, OnEvent, OnText } from 'baileys-decorators';
class Bot {
  @OnEvent('messages.upsert')
  async handle(@Socket socket, @Context event) {
    console.log('Socket:', socket);
    console.log('Event:', event);
  }
}4. Preserving this Context in Class Methods
BaileysDecorator ensures instance methods maintain this when called within decorators:
class ExampleBot {
  @OnEvent('messages.upsert')
  async handleMessage(@Context eventData) {
    this.processMessage(eventData);
  }
  processMessage(eventData) {
    console.log('Processing:', eventData);
  }
}📝 License
This project is licensed under the MIT License.
👥 Contributors
- Binsar Dwi Jasuma - Creator & Maintainer
 
📩 Contact
For questions, contributions, or feature requests, please open an issue or pull request on GitHub.