Menambahkan Perintah/Fitur Baru (Plugin)
Bot ini menggunakan sistem plugin modular yang memudahkan penambahan fungsionalitas baru. Setiap fitur atau perintah idealnya diimplementasikan sebagai plugin terpisah.
Struktur Direktori Plugin
- Semua plugin terletak di dalam direktori
plugins/. - Anda dapat mengorganisir plugin lebih lanjut ke dalam sub-direktori di dalam
plugins/jika diperlukan (misalnya,plugins/downloader/,plugins/fun/). Bot akan secara otomatis memuat file.jsdari direktoriplugins/dan sub-direktorinya.
Anatomi Dasar File Plugin
Berikut adalah struktur dasar dari sebuah file plugin (misalnya, plugins/contoh-plugin.js):
// Impor modul yang diperlukan jika ada
// import fs from 'fs';
// Fungsi handler utama untuk plugin
let handler = async (m, { conn, text, args, usedPrefix, command, isOwner, isAdmin, ...otherProps }) => {
// Logika perintah Anda di sini
// Contoh:
if (!text) throw `Masukkan teks setelah perintah! Contoh: ${usedPrefix + command} halo`;
let pesanBalasan = `Anda mengirim: ${text}`;
m.reply(pesanBalasan);
// Untuk pengguna premium saja
if (otherProps.isPrems) {
// lakukan sesuatu
}
};
// Properti untuk mendefinisikan bagaimana plugin bekerja
handler.help = ['contoh <teks>']; // Cara penggunaan yang akan tampil di menu
handler.tags = ['main']; // Kategori plugin untuk pengelompokan di menu
handler.command = ['contoh', 'sample']; // Perintah untuk memicu plugin (bisa string, regex, atau array)
// handler.owner = true; // Hanya untuk pemilik bot
// handler.group = true; // Hanya bisa digunakan di grup
// handler.admin = true; // Hanya untuk admin grup
// handler.botAdmin = true; // Hanya jika bot adalah admin grup
// handler.premium = true; // Hanya untuk pengguna premium
// handler.limit = true; // Mengurangi limit pengguna
// handler.level = 5; // Level minimum pengguna
// handler.register = true; // Pengguna harus terdaftar
// handler.disabled = false; // Set true untuk menonaktifkan plugin
export default handler;
Properti Penting Plugin
Fungsi handler plugin Anda harus memiliki beberapa properti statis yang menjelaskan cara kerjanya:
handler.command: (Wajib)- Tipe:
String|RegExp|Array<String|RegExp> - Deskripsi: Perintah atau pola yang akan memicu plugin ini.
- Contoh:
handler.command = 'ping'atauhandler.command = /^status(bot)?$/iatauhandler.command = ['ytmp3', 'yta'].
- Tipe:
handler.help: (Sangat Direkomendasikan)- Tipe:
Array<String> - Deskripsi: Daftar teks bantuan yang akan ditampilkan di menu. Setiap string biasanya berisi format penggunaan perintah.
- Contoh:
handler.help = ['play <judul lagu>', 'sticker <reply gambar/video>'].
- Tipe:
handler.tags: (Sangat Direkomendasikan)- Tipe:
Array<String> - Deskripsi: Kategori untuk mengelompokkan plugin di menu.
- Contoh:
handler.tags = ['downloader', 'tools'].
- Tipe:
- Fungsi Handler Utama
async (m, { ... }) => { ... }: (Wajib)- Ini adalah fungsi inti yang akan dieksekusi ketika perintah dipanggil.
- Parameter
m: Objek pesan yang telah diserialisasi. Beberapa properti penting:m.sender: JID pengirim pesan.m.chat: JID chat (grup atau pribadi).m.text: Isi teks pesan lengkap.m.reply('balasan'): Metode untuk membalas pesan.m.quoted: Objek pesan yang di-quote (jika ada).m.isGroup: Boolean,truejika pesan dari grup.m.isCommand: Boolean,truejika pesan adalah perintah yang valid.m.exp: Jumlah EXP yang didapat pengguna.m.limit: Jumlah limit yang akan dikurangi.
- Parameter kedua (objek yang di-destructure): Berisi berbagai helper dan data:
conn: Objek koneksi Baileys.text: String, argumen mentah setelah perintah.args: Array, argumen setelah perintah, dipisah spasi.usedPrefix: String, prefix yang digunakan.command: String, perintah yang digunakan.isOwner,isROwner: Boolean, status kepemilikan.isAdmin,isRAdmin: Boolean, status admin di grup.isBotAdmin: Boolean, status bot sebagai admin.isPrems: Boolean, status premium pengguna.user: Objek data pengguna dari database.chat: Objek data chat dari database.participants: Array, partisipan grup.groupMetadata: Objek, metadata grup.
- Properti Pembatasan Akses (Opsional):
handler.owner(Boolean): Hanya untuk pemilik bot.handler.mods(Boolean): Hanya untuk moderator.handler.premium(Boolean): Hanya untuk pengguna premium.handler.group(Boolean): Hanya bisa di grup.handler.private(Boolean): Hanya bisa di chat pribadi.handler.admin(Boolean): Hanya untuk admin grup.handler.botAdmin(Boolean): Bot harus menjadi admin.handler.register(Boolean): Pengguna harus terdaftar.
- Properti Lainnya (Opsional):
handler.limit(Boolean | Number): Mengurangi limit pengguna.handler.level(Number): Level minimum pengguna.handler.exp(Number): EXP yang diberikan.handler.disabled(Boolean): Menonaktifkan plugin.handler.customPrefix(String | RegExp): Prefix khusus.handler.before(Function): Dijalankan sebelum handler utama.handler.after(Function): Dijalankan setelah handler utama.handler.all(Function): Dijalankan untuk setiap pesan.handler.fail(Function): Fungsi error kustom.
Langkah-langkah Membuat Plugin Baru
- Buat File: Buat file
.jsdi direktoriplugins/. Misalnya,plugins/utility-ping.js. - Implementasi Handler: Tulis fungsi handler asinkron.
- Logika Perintah: Implementasikan logika Anda.
- Atur Properti: Definisikan
handler.command,handler.help,handler.tags, dll. - Ekspor Handler:
export default handler;. - Testing: Bot akan memuat plugin baru (terutama jika menggunakan `nodemon`) atau setelah restart.
Mengakses dan Memodifikasi Data Pengguna/Chat
Di dalam plugin, akses data pengguna melalui global.db.data.users[m.sender] atau objek user. Untuk data chat, gunakan global.db.data.chats[m.chat] atau objek chat.
Contoh:
let handler = async (m, { conn, user, chat }) => {
// Menambah EXP pengguna
user.exp += 100;
// Menonaktifkan fitur welcome di grup
if (m.isGroup) {
chat.welcome = false;
}
m.reply(`EXP Anda sekarang: ${user.exp}`);
};
// ... properti lainnya
export default handler;
Perubahan pada global.db.data akan disimpan secara periodik.
Menambahkan Dependensi
Jika plugin Anda memerlukan library eksternal (npm package):
- Instal package:
npm install nama-packageatauyarn add nama-package. - Impor package di file plugin:
import namaPackage from 'nama-package';.
Tips Debugging
- Gunakan
console.log()untuk debugging di terminal. - Periksa log error di terminal jika bot crash.
- Mulai dengan logika sederhana, lalu tingkatkan.