safety-safe
Version:
Firewall cerdas untuk Bot WhatsApp untuk mendeteksi dan memfilter pesan bug/crash/spam (Baileys).
132 lines (96 loc) • 5.69 kB
Markdown
# safety-safe
Firewall Cerdas buat Bot WhatsApp Lu.
[](https://www.npmjs.com/package/safety-safe) [](LICENSE)
Bot lu sering *crash* atau nge-lag parah gara-gara dikirimin pesan aneh? Sering mati total diserang orang iseng? Tenang, `safety-safe` ini gue bikin buat jadi tameng bot lu. Ini *firewall* super ringan yang bakal nyaring semua pesan masuk dari berbagai macem bug, spam, atau pesan perusak lainnya.
---
### Kenapa Lu Wajib Pake Ini?
* **🛡️ Keamanan Berlapis:** Gue udah tanamkan deteksi buat macem-macem serangan, dari teks super panjang, *mention* ribuan orang, sampe bug `dokumen` dan `lokasi` yang paling sering bikin aplikasi WhatsApp crash.
* **⚡ Enteng Banget:** Gak ada dependensi sama sekali. Gak bakal bikin folder `node_modules` lu jadi bengkak. Fokusnya cuma satu: keamanan.
* **🔧 Atur Sendiri Aturannya:** Bosen sama paket yang kaku? Di sini, lu yang jadi bos. Atur sendiri batas toleransi bot lu buat tiap jenis serangan.
* **🔌 Langsung Pasang:** Didesain khusus buat nyambung mulus sama `@whiskeysockets/baileys`.
### Instalasi
Gak pake ribet, cukup satu baris di terminal lu:
```bash
npm install safety-safe
```
---
### Cara Kerjanya Gimana?
Gini, `safety-safe` itu ibarat alarm mobil. Tugasnya cuma **teriak sekenceng-kencengnya** kalo ada maling (`isMalicious: true`). Dia gak bertugas buat nangkep malingnya. Nah, **lu sebagai pemilik mobil (bot)**, yang mutusin mau ngapain: mau ngejar malingnya, mau nelpon polisi, atau mau cuekin aja.
Pemisahan tugas ini bikin `safety-safe` tetep enteng dan ngasih lu **kontrol penuh** buat nentuin aksi apa yang paling pas buat bot lu.
### Cara Pake Paling Gampang (Copy-Paste Aja)
Ini contoh paling umum. Kalo ada pesan bahaya, kita langsung hapus pesannya, blokir pengirimnya, dan lapor ke nomor admin (nomor lu sendiri).
```javascript
import { makeWASocket } from '@whiskeysockets/baileys';
import { analyzeMessage } from 'safety-safe';
// 1. Setup client Baileys lu kayak biasa
const client = makeWASocket({ /* ...konfigurasi lu di sini */ });
const myNumber = "6281234567890"; // Ganti pake nomor admin/owner
// 2. Terapkan di dalam event 'messages.upsert'
client.ev.on('messages.upsert', async (m) => {
const msg = m.messages;
// Cek dasar, abaikan kalo pesan gak valid, dari diri sendiri, atau dari grup
if (!msg.message || msg.key.fromMe || msg.key.remoteJid.endsWith('@g.us')) {
return;
}
// 3. Analisis pesannya pake safety-safe
const { isMalicious, reason, severity } = analyzeMessage(msg.message);
// 4. Kalo ternyata berbahaya, ambil tindakan!
if (isMalicious) {
console.log(`[!] Ancaman Terdeteksi dari ${msg.pushName} (${msg.key.remoteJid})`);
console.log(` Alasan: ${reason} | Level Bahaya: ${severity}`);
try {
// CONTOH AKSI: Hapus pesan, blokir, dan lapor 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}) udah gue blokir otomatis.\nAlasan: *${reason}*.`
});
} catch (err) {
console.error('[!] Gagal ngambil tindakan blokir/hapus:', err);
}
return; // Penting: Hentikan pemrosesan pesan ini lebih lanjut
}
// Kalo pesan aman, lanjutkan logika bot normal lu di sini...
console.log(`[+] Pesan aman dari ${msg.pushName}`);
// ...
});
```
### Mau Lebih Canggih? Pake Konfigurasi!
Lu bisa atur sendiri "tingkat kesabaran" bot lu. Cukup kasih objek konfigurasi di argumen kedua. Gampang kan?
```javascript
import { analyzeMessage } from 'safety-safe';
// Aturan custom yang lebih ketat dari default
const myRules = {
maxTextLength: 4096,
maxMentions: 25
};
const { isMalicious } = analyzeMessage(msg.message, myRules);
```
**Daftar Konfigurasi Lengkap:**
| Opsi | Default | Deskripsi |
| :--- | :--- | :--- |
| `maxTextLength` | `10000` | Panjang teks/caption maksimal yang diizinkan. |
| `maxMentions` | `100` | Jumlah mention maksimal dalam satu pesan. |
| `maxFileLength` | `2147483648` (2 GB) | Ukuran file (dalam byte) maksimal yang tertera di properti pesan. |
| `maxPageCount` | `10000` | Jumlah halaman maksimal di properti dokumen. |
| `maxCharacterFlood` | `20000` | Jumlah karakter maksimal di pesan interaktif (buat nangkal bug flood). |
### Pahamin Hasil Analisisnya
Fungsi `analyzeMessage` ngasih lu objek berisi info penting:
| Properti | Tipe | Penjelasan |
| :--- | :--- | :--- |
| `isMalicious`| `boolean` | `true` kalo berbahaya, `false` kalo aman. Ini yang paling penting. |
| `reason` | `string` | Alasan kenapa pesan ditandai berbahaya. |
| `severity` | `string` | Tingkat bahayanya: `CRITICAL`, `HIGH`, atau `MEDIUM`. |
| `threatType`| `string` | Jenis ancamannya: `CRASH`, `LAG`, atau `SPAM`. |
### Daftar Ancaman yang Gue Tangkal
- [x] Teks atau Caption yang Panjangnya Gak Wajar
- [x] Banjir Karakter di Pesan Interaktif
- [x] Mention Massal (Ribuan Orang)
- [x] Dokumen dengan Properti Palsu (`fileLength`, `pageCount`)
- [x] Lokasi dengan Koordinat Gak Valid (Bikin Crash)
- [x] Dan berbagai bug perusak lainnya.
### Kontribusi
Nemuin bug baru yang lolos? Atau punya ide buat bikin ini lebih GG? Langsung aja buka *Issue* atau kirim *Pull Request* di GitHub. Bantuan dari lu sangat gue hargai!
### Lisensi
Proyek ini pake [Lisensi MIT](LICENSE). Santai aja pakenya.
---