Berikut adalah panduan lengkap untuk membuat plugin dengan sistem plugin saya pada bot WhatsApp yang menggunakan Whiskeysockets/baileys.
Whiskeysockets atau baileys adalah library Node.js, berbasis TypeScript yang di gunakan untuk berkomunikasi dengan Web Api WhatsApp.
Setiap plugin memiliki struktur dasar sebagai berikut:
const fs = require('fs');
const path = require('path');
module.exports = {
name: 'Nama Plugin',
command: ['command1', 'command2'],
tags: 'Kategori Plugin',
desc: 'Deskripsi Singkat Plugin',
// mode Owner dan Premium true/false
isOwner: false || true,
isPremium: false || true,
run: async (conn, message, {
chatInfo,
prefix,
commandText,
args,
textMessage
}) => {
try {
const { chatId, senderId, isGroup } = chatInfo;
// Fungsi penanganan hanya owner
if (!(await onlyOwner(module.exports, conn, message))) return;
// Fungsi penanganan untuk pengguna premium
if (!(await onlyPremium(module.exports, conn, message))) return;
// Fungsi tag pengguna
let targetId = target(message, senderId);
const mentionTarget = targetId;
// Eksekusi logika plugin di sini
await conn.sendMessage(chatId, {
text: '✅ Plugin Berjalan!',
mentions: [`${targetId}@s.whatsapp.net`]
}, { quoted: message });
} catch (error) {
console.error('Error:', error);
conn.sendMessage(message.key.remoteJid, {
text: `Error: ${error.message || error}`,
quoted: message,
});
}
}
};conn--> Objek utama dari Baileys untuk mengirim pesan.message--> Data pesan yang diterima oleh bot.
Berikut adalah contoh implementasi untuk plugin menu.js yang memiliki fungsi sebagai tampilan menu:
- Import module
const fs = require('fs');
const path = require('path');- Menggunakan @whiskeysockets/baileys untuk pengiriman pesan.
- Menggunakan config.json sebagai sumber data seperti nama bot, owner, dll.
- Properti Plugin
module.exports = {
name: 'menu',
command: ['menu'],
tags: 'Info Menu',
desc: 'Deskripsi menu',
isOwner: true,
isPremium: false,
run: async (conn, message, {
chatInfo,
prefix,
commandText,
args
}) => { ... }
};name--> Nama unik plugin yang digunakan untuk identifikasi.command--> Array berisi daftar command yang dapat digunakan untuk memanggil plugin.tags--> Kategori untuk pengelompokan plugin pada menu bot.desc--> Deskripsi singkat mengenai fungsi plugin.isOwner--> Fungsi untuk menangani hanya owner.isPremium--> Fungsi untuk menangani pengguna Premium.run--> Fungsi utama yang dijalankan saat plugin dipanggil.
- Ekstraksi Data Pesan
run: async (conn, message, {
chatInfo,
prefix,
commandText,
textMessage,
args
}) => { ... }chatId--> ID chat, dapat berupa personal atau grup.prefix--> Array yang berisi semua prefix yang didukung.isGroup--> Mengecek apakah pesan berasal dari grup.senderId--> ID pengirim pesan.textMessage--> Teks yang dikirim oleh pengguna.commandText--> Mengambil perintah setelah prefix.
message.message?.conversationUntuk penanganan pesan teks biasamessage.message?.extendedTextMessage?.textuntuk pesan yang merupakan reply atau mengutip pesan lain.- Jika tidak ditemukan teks, maka nilainya adalah string kosong (' ').
biasanya tidak memiliki conversation atau extendedTextMessage.text. Formatnya tergantung jenis media.
contoh:
- message.message?.imageMessage
- message.message?.videoMessage
- message.message?.audioMessage
- message.message?.documentMessage
- message.message?.stickerMessage
Pesan media dapat dikenali dari adanya properti tersebut.
Jika kamu ingin menangani media, kamu bisa melakukan pengecekan seperti ini:
const isMedia = !!(
message.message?.imageMessage ||
message.message?.videoMessage ||
message.message?.audioMessage ||
message.message?.documentMessage ||
message.message?.stickerMessage
);isMedia --> Menentukan apakah pesan tersebut berisi media (gambar, video, audio, dokumen, atau stiker).
- Tips pengembangan
- gunakan
conn.sendMessageuntuk mengirim pesan. - Gunakan
quoted: messagejika ingin membalas langsung ke pesan pengguna. - Pastikan semua error ditangani dengan baik menggunakan
try-catch
- Buat file baru di folder yang sesuai (misalnya
plugins/Menu_Info/menu.js). - Pastikan struktur seperti contoh di atas.
- Sesuaikan
name,command,tags, danrun. - Jika ingin menambahkan fungsi tambahan, buat fungsi baru di dalam file yang sama.
laporkan Bug ke sini
