safety-safe
Version:
Sebuah package NPM untuk mendeteksi dan memfilter pesan bug/crash/spam pada bot WhatsApp (Baileys).
144 lines (104 loc) • 6.35 kB
Markdown
# safety-safe
Firewall Cerdas untuk Bot WhatsApp Anda.
[](https://www.npmjs.com/package/safety-safe) [](LICENSE)
Bot Anda sering *crash*, nge-lag, atau tidak responsif karena dikirimi pesan aneh? `safety-safe` adalah solusi yang Anda butuhkan. Ini adalah sebuah package ringan tanpa dependensi yang bertugas menganalisis setiap pesan masuk dan mendeteksi berbagai jenis bug, *crash*, dan eksploit yang berbahaya.
---
### Mengapa `safety-safe`?
* **🛡️ Komprehensif:** Mampu mendeteksi berbagai vektor serangan, mulai dari teks panjang, *mention* masif, hingga bug yang lebih licik seperti `albumMessage`, `liveLocationMessage`, dan `productMessage` berbahaya.
* **⚡ Super Ringan:** **Zero-dependency.** Package ini tidak akan menambah beban pada `node_modules` Anda. Cepat, efisien, dan fokus pada satu tugas.
* **🔧 Fleksibel:** Kami percaya pada kontrol pengguna. `safety-safe` bertugas sebagai **detektor**, bukan eksekutor. Anda yang memutuskan tindakan apa yang akan diambil terhadap pesan berbahaya.
* **🔌 Mudah Diintegrasikan:** Dirancang untuk bekerja mulus dengan `@whiskeysockets/baileys` atau library WhatsApp lainnya, dan mendukung baik CommonJS maupun ES Modules.
### Instalasi
Gak pake ribet. Cukup satu baris di terminal Anda:
```bash
npm install safety-safe
```
---
### Cara Penggunaan
Inti dari package ini adalah fungsi tunggal bernama `analyzeMessage`. Fungsi ini menerima objek `message` dari Baileys dan mengembalikan hasil analisis dalam format: `{ isMalicious: boolean, reason: string | null }`.
#### 1. Impor Package
Pilih metode yang sesuai dengan proyek Anda.
**Untuk proyek CommonJS (`require`):**
```javascript
const { analyzeMessage } = require('safety-safe');
```
**Untuk proyek ES Modules (`import`):**
```javascript
import { analyzeMessage } from 'safety-safe';
```
> *Catatan: Contoh-contoh selanjutnya akan menggunakan sintaks `require`, namun logikanya 100% sama untuk pengguna `import`.*
#### 2. Implementasi di Bot Anda
Berikut adalah contoh paling umum: jika pesan terdeteksi berbahaya, langsung hapus pesannya dan blokir pengirimnya.
```javascript
// Di dalam file utama bot Anda
const { makeWASocket } = require('@whiskeysockets/baileys');
const { analyzeMessage } = require('safety-safe');
const client = makeWASocket({ /* ...konfigurasi Anda */ });
const myNumber = "6281234567890"; // Ganti dengan nomor Admin/Owner
client.ev.on('messages.upsert', async (m) => {
const msg = m.messages[0];
// Abaikan jika pesan tidak valid, dari diri sendiri, atau dari grup
if (!msg.message || msg.key.fromMe || msg.key.remoteJid.endsWith('@g.us')) {
return;
}
// Analisis pesan dengan safety-safe
const { isMalicious, reason } = analyzeMessage(msg.message);
if (isMalicious) {
console.log(`[!] Ancaman Terdeteksi dari ${msg.pushName} (${msg.key.remoteJid}).\n Alasan: ${reason}`);
try {
// CONTOH AKSI: Hapus pesan, blokir, dan kirim notifikasi ke Admin
await client.sendMessage(msg.key.remoteJid, { delete: msg.key });
await client.updateBlockStatus(msg.key.remoteJid, "block");
await client.sendMessage(`${myNumber}@s.whatsapp.net`, {
text: `🔒 User *${msg.pushName}* (${msg.key.remoteJid}) telah diblokir secara otomatis.\nAlasan: *${reason}*.`
});
} catch (err) {
console.error('[!] Gagal melakukan aksi blokir/hapus:', err);
}
return; // Hentikan pemrosesan pesan ini
}
// Jika pesan aman, lanjutkan dengan logika bot normal Anda...
});
```
#### 3. Contoh Aksi Lainnya
Kekuatan `safety-safe` ada pada fleksibilitasnya. Berikut beberapa ide aksi lain yang bisa Anda terapkan di dalam `if (isMalicious) { ... }`:
##### **Hanya Kirim Peringatan**
```javascript
await client.sendMessage(msg.key.remoteJid, {
text: `⚠️ *Peringatan!* Pesan Anda terdeteksi sebagai potensi bug (${reason}). Jangan ulangi lagi!`
});
await client.sendMessage(msg.key.remoteJid, { delete: msg.key });
```
##### **Teruskan Bukti ke Admin dengan Media**
Fitur ini berguna untuk menganalisis bug baru tanpa membuat bot Anda *crash*.
```javascript
// Mengirim thumbnail dan detail ancaman ke admin
await client.sendMessage(`${myNumber}@s.whatsapp.net`, {
image: { url: './path/to/your/warning-image.jpg' }, // Ganti dengan path gambar Anda
caption: `*Ancaman Terdeteksi!*\n\n*Dari:* ${msg.pushName}\n*Nomor:* ${msg.key.remoteJid}\n*Alasan:* ${reason}\n\n*Pesan Asli Diteruskan di bawah ini (hati-hati saat membuka):*`
});
// Forward pesan aslinya untuk diinspeksi
// PERINGATAN: Meneruskan pesan kadang bisa membuat app WhatsApp admin lag jika bug-nya parah.
await client.forwardMessage(`${myNumber}@s.whatsapp.net`, msg, {});
```
---
### Filosofi Desain: Kenapa Aksi Tidak Langsung di Dalam Package?
Kami sengaja memisahkan **deteksi** dari **aksi**. Bayangkan `safety-safe` adalah **detektor asap**. Tugasnya adalah berbunyi nyaring saat ada bahaya. Ia tidak bertugas menyemprotkan air. Anda, sebagai pemilik gedung (bot), yang memutuskan apakah akan menyalakan *sprinkler*, menelepon pemadam kebakaran, atau hanya mengipas-ngipas asapnya.
Pemisahan ini memberikan Anda **kontrol penuh** dan membuat `safety-safe` tetap ringan dan tidak bergantung pada objek `client` dari Baileys.
---
### Daftar Ancaman yang Dideteksi
Versi saat ini mampu mendeteksi berbagai serangan, termasuk:
- [x] Teks/Caption dengan Panjang Ekstrem
- [x] Kepadatan Karakter *Invisible*/Kontrol Unicode
- [x] Jumlah Mention JID yang Masif
- [x] Tipe `ProtocolMessage` yang Tidak Wajar
- [x] Bug `AlbumMessage`, `ListMessage`, `ButtonsMessage`
- [x] Serangan `VideoMessage` dengan `Annotations` Berbahaya
- [x] Bug `externalAdReply` dengan Teks Sangat Panjang
- [x] Pesan Media dengan Properti Mustahil (*fileLength*, *duration*)
- [x] Bug pada `Location`, `Contact`, `LiveLocation`, `Product`, dan `OrderMessage`.
---
### Kontribusi
Punya ide untuk deteksi bug baru? Menemukan celah? Jangan ragu untuk membuat *Pull Request* atau membuka *Issue* di repository GitHub. Kontribusi Anda sangat kami hargai!
### Lisensi
Proyek ini dilisensikan di bawah [Lisensi MIT](LICENSE).