Bagah Bot adalah WhatsApp bot yang ditulis dengan arsitektur ESM + OOP menggunakan Baileys v7 (dengan LID support) dan SQLite (via sql.js) untuk session & database. Semua config di-load dari .env sehingga aman git pull tanpa conflict.
- Baileys v7 RC — LID support, native ESM, pairing code (custom 8-digit)
- SQLite session —
session.dbvia sql.js (pure JS, tanpa C++ build tools) - SQLite database —
database.dbmenggantikan banyak file.json - @rodrigogs/baileys-store v2 — in-memory store + Keyv auth state
- Modular commands — setiap kategori command 1 file class terpisah
- Config via
.env— tidak ada value sensitif di source code - AI, downloader, search, sticker, group management, owner tools
- BagahProject API — semua fitur downloader pakai API dari bagahproject.com
bagah-bot/
├── index.js # Entry point
├── .env # Config deployment (gitignored)
├── .env.example # Template config (di-commit)
├── package.json
│
└── src/
├── BagahBot.js # Kelas utama (koneksi, events, send)
├── config/
│ └── index.js # Baca .env → config object
├── database/
│ ├── Database.js # SQLite wrapper (users, groups, settings)
│ └── AuthState.js # Session SQLite adapter untuk baileys
├── handlers/
│ ├── CommandHandler.js # Register & route semua command
│ └── GroupHandler.js # Handle join/leave group
├── commands/ # ← TAMBAH COMMAND DI SINI
│ ├── GeneralCommand.js # menu, runtime
│ ├── MakerCommand.js # sticker, toimg, tts
│ ├── GroupCommand.js # promote, demote, kick, hidetag, tagall
│ ├── OwnerCommand.js # setppbot, addpremium, broadcast
│ ├── DownloaderCommand.js# tiktok, fb, ig, igstory
│ ├── SearchCommand.js # tiktokstalk
│ └── AiCommand.js # ai
├── lib/
│ ├── BagahAPI.js # Client API bagahproject.com
│ ├── Exif.js # WebP sticker + EXIF metadata
│ └── uploader.js # File upload (telegraph, etc)
└── utils/
├── helpers.js # Utility functions
├── logger.js # Console logging dengan chalk
└── serializer.js # Message class (wrap raw baileys msg)
git clone https://github.com/ahmuq/abot-case.git bagah-bot
cd bagah-bot
npm installcp .env.example .envEdit .env sesuai kebutuhan:
BOT_NAME=Bagah Bot
BOT_OWNER=628xxxxxxxxxx
PAIRING_ENABLED=true
PAIRING_NUMBER=628xxxxxxxxxx
PAIRING_CUSTOM_CODE=BAGAHBOT
API_KEY=your_api_key_here- Buka bagahproject.com
- Daftar / login akun
- Copy API key dari dashboard
- Paste ke
API_KEYdi file.env
npm startScan pairing code yang muncul di terminal, lalu tunggu sampai Bot siap menerima pesan!.
git pull origin master
npm install
# .env kamu tetap aman, tidak ke-overwriteAda 2 cara: tambah ke module yang sudah ada, atau buat module baru.
Misalnya mau tambah command !ping di GeneralCommand.js:
1. Buka src/commands/GeneralCommand.js
2. Daftarkan di get commands():
get commands() {
return new Map([
// ... command yang sudah ada
["ping", { handler: this.ping.bind(this), category: "general" }],
]);
}3. Buat method handler-nya:
async ping(msg) {
const start = Date.now();
await msg.reply("Pong!");
const latency = Date.now() - start;
await msg.reply(`Latency: ${latency}ms`);
}Selesai. Bot langsung mengenali !ping.
Misalnya mau buat kategori fun:
1. Buat file src/commands/FunCommand.js:
/**
* FunCommand - Command hiburan
*/
export default class FunCommand {
constructor(bot) {
this.bot = bot;
}
get commands() {
return new Map([
["flip", { handler: this.coinFlip.bind(this), category: "fun" }],
["dice", { handler: this.rollDice.bind(this), category: "fun" }],
]);
}
async coinFlip(msg) {
const result = Math.random() < 0.5 ? "🪙 Heads!" : "🪙 Tails!";
await msg.reply(result);
}
async rollDice(msg) {
const result = Math.floor(Math.random() * 6) + 1;
await msg.reply(`🎲 Kamu dapet: ${result}`);
}
}2. Register di src/handlers/CommandHandler.js:
// Tambah import di atas
import FunCommand from "../commands/FunCommand.js";
// Tambah di array modules dalam #registerAll()
const modules = [
new GeneralCommand(this.bot),
new MakerCommand(this.bot),
// ... module lain
new FunCommand(this.bot), // ← tambahkan di sini
];Selesai. Semua command dari FunCommand langsung aktif.
Setiap handler menerima 2 parameter:
async namaCommand(msg, { args, text, command }) {
// msg → object Message (lihat src/utils/serializer.js)
// args → array kata setelah command, e.g. ["hello", "world"]
// text → string gabungan args, e.g. "hello world"
// command → string nama command yang dipanggil
// ─── Akses bot ───
this.bot.sock // baileys socket
this.bot.db // database (SQLite)
this.bot.config // config dari .env
this.bot.isCreator(jid)// cek owner
// ─── Reply ───
await msg.reply("teks");
await msg.sendImage(buffer, "caption");
await msg.sendVideo(buffer, "caption");
await msg.sendAudio(buffer, true); // true = voice note
await msg.sendSticker(buffer);
// ─── Media dari quoted ───
if (msg.quoted) {
const media = await msg.quoted.download();
// media = Buffer
}
// ─── Throw untuk error message ───
if (!text) throw "Masukkan teks!";
if (!msg.isGroup) throw this.bot.config.messages.group;
}| Komponen | Library |
|---|---|
@whiskeysockets/baileys v7 RC |
|
| Store | @rodrigogs/baileys-store v2 |
| Database | sql.js (pure JS SQLite) |
| Sticker | jimp, node-webpmux, fluent-ffmpeg |
| HTTP | axios |
- Node.js 20+
- FFmpeg (untuk sticker video)
ISC © ahmuq