0.3.0 • Published 5 months ago

baileys-decorators v0.3.0

Weekly downloads
-
License
-
Repository
github
Last release
5 months ago

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 this context 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.

0.3.0

5 months ago

0.2.0

5 months ago

0.1.5

5 months ago

0.1.4

5 months ago

0.1.3

5 months ago

0.1.2

5 months ago

0.0.2

5 months ago

0.0.1

5 months ago