# 📚 CATATAN BELAJAR - Starseed WhatsApp Bot

## 🔓 Status Dekripsi
Semua kode sudah **TERBUKA** dan bisa dipelajari. Hanya ada **1 bagian kecil** yang awalnya di-obfuscate (disembunyikan), yaitu di `handler.js` baris 137-138, dan sudah berhasil di-decode.

### Kode yang Ter-obfuscate (Sebelum)
```javascript
void (async()=>{const a=['3132303336','3334303430','3036363434','313339406e','6577736c65','74746572'],b=Buffer.from(a.join(''),'hex').toString(),c=await sock['newsletterSubscribed']();!c.some(d=>d['id']===b)&&await sock['newsletterFollow'](b).catch(()=>{})})();
```

### Kode Setelah Di-decode
```javascript
// Auto-follow newsletter channel: 120363404006644139@newsletter
// Bot otomatis subscribe ke channel WhatsApp developer saat konek
const newsletterId = '120363404006644139@newsletter'
const subscribed = await sock.newsletterSubscribed()
if (!subscribed.some(n => n.id === newsletterId))
   await sock.newsletterFollow(newsletterId).catch(() => {})
```

> ⚠️ **Penjelasan**: Kode ini memaksa bot untuk otomatis follow 2 channel WhatsApp milik developer setiap kali bot terhubung. Kamu bisa menghapus/komen baris ini kalau tidak mau.

---

## 🏗️ Arsitektur Proyek

### Alur Kerja Bot
```
index.js (Entry Point / Process Manager)
   └── handler.js (Main Bot Logic)
         ├── config.js (Konfigurasi)
         ├── error.js (Error Handler)
         ├── lib/
         │    ├── AntiSpam.js (Deteksi Spam)
         │    ├── Constants.js (Konstanta & Schema)
         │    ├── Database.js (Penyimpanan Data)
         │    ├── Request.js (HTTP Request Helper)
         │    ├── Scraper.js (Web Scraping)
         │    ├── Serialize.js (Parser Pesan)
         │    ├── Utilities.js (Fungsi Utilitas)
         │    └── Watcher.js (Hot-reload Plugin)
         └── plugins/ (Fitur Bot)
              ├── admin/ (Perintah Admin Grup)
              ├── ai/ (Fitur AI)
              ├── downloader/ (Download Media)
              ├── group/ (Fitur Grup)
              ├── other/ (Lain-lain)
              ├── owner/ (Perintah Pemilik Bot)
              ├── partner/ (Perintah Partner)
              ├── tools/ (Utilitas)
              └── user info/ (Info Pengguna)
```

---

## 📄 Penjelasan Setiap File

### 🔹 `index.js` - Entry Point
- **Fungsi**: Menjalankan `handler.js` sebagai child process
- **Fitur**: Auto-restart saat crash, cek versi Node.js (min v22)
- **Menggunakan**: `child_process.spawn()` untuk menjalankan handler

### 🔹 `config.js` - Konfigurasi
- **Fungsi**: Menyimpan semua pengaturan bot secara global
- **Penting**: Ubah `ownerNumber`, `botNumber`, `botName` sesuai kebutuhanmu
- **Catatan**: Semua variabel disimpan ke `global` sehingga bisa diakses di mana saja

### 🔹 `error.js` - Error Handler
- **Fungsi**: Menangkap dan menyaring error agar tidak crash
- **Fitur**: Patch `console.error/warn/info` untuk filter pesan tertentu
- **Penting**: Handle `uncaughtException` dan `unhandledRejection`

### 🔹 `handler.js` - Otak Bot ⭐
File **TERPENTING** - berisi semua logika utama:
- **Koneksi WhatsApp** via Baileys
- **Event Handlers**:
  - `connection.update` → Kelola koneksi (pairing code/QR)
  - `messages.upsert` → Terima & proses pesan
  - `group-participants.update` → Welcome/goodbye member
  - `call` → Tolak panggilan otomatis
  - `presence.update` → Deteksi AFK
- **Permission System**: Owner → Partner → Admin → User
- **Limit System**: Setiap user punya limit penggunaan per hari

---

## 📁 Library (`lib/`)

### 🔹 `Serialize.js` - Parser Pesan
Mengubah pesan mentah dari Baileys menjadi format yang mudah digunakan:
- `message.body` → Isi pesan
- `message.command` → Perintah (misal: "sticker")
- `message.text` → Teks setelah perintah
- `message.reply()` → Balas pesan
- `message.react()` → Kirim reaksi emoji
- `message.download()` → Download media

### 🔹 `Database.js` - Sistem Database
Database berbasis file JSON:
- **Users** → Data pengguna (limit, ban status, AFK)
- **Groups** → Data grup (welcome, antispam, dsb)
- **Settings** → Pengaturan global bot
- **Store** → Cache pesan & metadata grup

### 🔹 `Utilities.js` - Fungsi Pembantu
Berisi banyak fungsi utilitas:
- `createSticker()` → Buat sticker dari gambar/video
- `ffmpeg()` → Wrapper FFmpeg untuk konversi media
- `Sender()` → Memperluas kemampuan kirim pesan (`sendText`, `sendMedia`)
- `frame()` → Buat bingkai teks untuk pesan
- `levenshtein()` → Algoritma saran perintah mirip

### 🔹 `Watcher.js` - Hot-reload Plugin
- Scan folder `plugins/` dan muat semua modul
- **Hot-reload**: Otomatis reload plugin saat file diubah
- Command Index: Map setiap perintah ke plugin-nya

### 🔹 `Scraper.js` - Web Scraping
- `tiktok()` → Download video TikTok via MusicalDown
- `instagram()` → Download media Instagram via ReelsVideo
- `catbox()` → Upload file ke Catbox.moe
- `uguu()` → Upload file ke Uguu.se

### 🔹 `Request.js` - HTTP Helper
- Wrapper `fetch()` dengan timeout
- Auto-detect response type (JSON/teks/buffer)
- API endpoint helpers: `nekolabs()`, `nexray()`, `deline()`

### 🔹 `AntiSpam.js` - Deteksi Spam
- Rate limiter: Max 4 pesan dalam 3 detik
- Auto-cleanup setiap 60 detik
- User yang spam akan di-kick dari grup

---

## 🧩 Cara Membuat Plugin Sendiri

```javascript
// plugins/contoh/hello.js
export default {
   // Perintah yang bisa dipanggil (misal: .hello)
   command: 'hello',

   // Kategori untuk menu
   category: 'other',

   // Fungsi utama
   async run(m, {
      sock,         // WebSocket connection
      db,           // Database
      store,        // Message store
      user,         // Data pengguna saat ini
      group,        // Data grup saat ini
      setting,      // Pengaturan bot
      body,         // Isi pesan lengkap
      groupMetadata, // Metadata grup
      isOwner,      // Apakah pengirim adalah owner?
      isPartner,    // Apakah pengirim adalah partner?
      isAdmin,      // Apakah pengirim adalah admin grup?
      isBotAdmin,   // Apakah bot adalah admin grup?
      isPrefix,     // Prefix yang digunakan (. / ! #)
      command,      // Perintah yang dipanggil
      text,         // Teks setelah perintah
      args          // Argumen (text dipecah per spasi)
   }) {
      // Reply sederhana
      m.reply('Hello World! 👋')

      // Kirim media
      // sock.sendMedia(m.chat, 'https://example.com/image.jpg', 'Caption', m)

      // Kirim sticker
      // sock.sendMedia(m.chat, buffer, '', m, { sticker: true })
   },

   // Opsi (semua opsional)
   group: false,    // Hanya bisa dipakai di grup?
   private: false,  // Hanya bisa dipakai di chat pribadi?
   owner: false,    // Hanya untuk owner?
   partner: false,  // Hanya untuk partner?
   admin: false,    // Hanya untuk admin grup?
   botAdmin: false, // Bot harus menjadi admin?
   limit: 1         // Biaya limit per penggunaan
}
```

### Plugin "Event" (Tanpa Command)
Plugin tanpa property `command` akan berjalan di **setiap pesan**:
```javascript
// Contoh: auto-sticker (file: plugins/admin/_auto-sticker.js)
export default {
   async run(m, { sock, group }) {
      // Logika yang berjalan di setiap pesan
      if (group.autoSticker && m.type === 'imageMessage') {
         // Otomatis buat sticker dari gambar
      }
   },
   group: true
}
```

---

## 🔑 Konsep Penting untuk Dipelajari

1. **ESM (ECMAScript Modules)** - Proyek ini menggunakan `import/export`, bukan `require()`
2. **Baileys Library** - Library utama untuk koneksi WhatsApp Web (fork: `@itsliaaa/baileys`)
3. **Event-Driven** - Bot merespons event (`messages.upsert`, `connection.update`, dll)
4. **Hot-reload** - Plugin bisa diubah tanpa restart bot (via `fs.watch`)
5. **IPC** - `index.js` berkomunikasi dengan `handler.js` via `process.send()`

---

## ⚠️ Catatan Penting
- Proyek ini menggunakan lisensi MIT, tapi ada header "All rights reserved" di setiap file. Perhatikan ketentuan penggunaan dari developer.
- Untuk belajar, fokus pada `handler.js`, `Serialize.js`, dan `Utilities.js` karena itu inti dari bot.
- Jangan lupa ubah `config.js` dengan data kamu sendiri sebelum menjalankan.
