Skip to content

Z-150/test

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

4 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

custom-baileys

Custom WhatsApp Multi-Device Bot Library β€” built from scratch, architecturally compatible with @whiskeysockets/baileys.


✨ Fitur

Fitur Status
WebSocket WA Multi-Device βœ…
QR Code login βœ…
Multi-file auth state βœ…
Kirim pesan teks βœ…
Kirim gambar / video / audio βœ…
Kirim dokumen / stiker βœ…
Button Message (patched) βœ…
List Message (patched) βœ…
Template Message β€” URL & Call (patched) βœ…
Reaction message βœ…
Location message βœ…
Manajemen grup βœ…
Auto-reconnect βœ…
Presence update βœ…
Read receipt βœ…

πŸ“¦ Instalasi

npm install

Node.js β‰₯ 18 diperlukan.


πŸš€ Quick Start

const {
  makeWASocket,
  useMultiFileAuthState,
  DisconnectReason,
} = require('custom-baileys');

async function start() {
  const { state, saveCreds } = await useMultiFileAuthState('./auth_info');

  const sock = makeWASocket({
    auth: state,
    saveCreds,
    printQRInTerminal: true,
  });

  sock.on('connection.update', ({ connection, lastDisconnect, qr }) => {
    if (connection === 'open') console.log('βœ… Bot terhubung!');
    if (connection === 'close') {
      const shouldReconnect =
        lastDisconnect?.error?.output?.statusCode !== DisconnectReason.loggedOut;
      if (shouldReconnect) start();
    }
  });

  sock.on('creds.update', saveCreds);

  sock.on('messages.upsert', async ({ messages, type }) => {
    if (type !== 'notify') return;
    const msg  = messages[0];
    const from = msg.key.remoteJid;
    const body = msg.message?.conversation || '';
    console.log('Pesan:', body);
    await sock.sendMessage(from, { text: 'Halo!' }, { quoted: msg });
  });
}

start();

πŸ“¨ Mengirim Pesan

Teks biasa

await sock.sendMessage(jid, { text: 'Halo Dunia!' });

Dengan reply (quoted)

await sock.sendMessage(jid, { text: 'Ini balasan!' }, { quoted: msg });

Mention

await sock.sendMessage(jid, {
  text: '@628123456789 Halo!',
}, {
  mentions: ['628123456789@s.whatsapp.net'],
});

πŸ”˜ Button Message β˜…

await sock.sendMessage(jid, {
  text:    'Pilih salah satu opsi:',
  footer:  'πŸ€– custom-baileys',
  header:  'Menu Utama',
  buttons: [
    { buttonId: 'btn_1', displayText: 'βœ… Ya, Lanjutkan' },
    { buttonId: 'btn_2', displayText: '❌ Tidak, Batal' },
    { buttonId: 'btn_3', displayText: 'πŸ”„ Nanti Saja' },
  ],
}, { quoted: msg });

Menangkap balasan button:

sock.on('messages.upsert', async ({ messages }) => {
  const msg  = messages[0];
  const body = msg.message?.buttonsResponseMessage?.selectedButtonId;
  if (body === 'btn_1') {
    await sock.sendMessage(msg.key.remoteJid, { text: 'Kamu memilih Ya!' });
  }
});

πŸ“‹ List Message β˜…

await sock.sendMessage(jid, {
  title:      'Pilih Menu',
  text:       'Silakan pilih salah satu menu di bawah ini:',
  footer:     'πŸ€– Powered by custom-baileys',
  buttonText: 'πŸ“‹ Buka Daftar Menu',
  sections: [
    {
      title: 'πŸ› οΈ Utilitas',
      rows: [
        { rowId: 'ping',  title: 'πŸ“ Ping',  description: 'Cek status bot' },
        { rowId: 'info',  title: 'πŸ“– Info',  description: 'Info bot' },
        { rowId: 'help',  title: '❓ Help',  description: 'Bantuan penggunaan' },
      ],
    },
    {
      title: '🎡 Downloader',
      rows: [
        { rowId: 'tiktok', title: '🎡 TikTok',    description: 'Download video TikTok' },
        { rowId: 'ytmp3',  title: '🎧 YouTube MP3', description: 'Download audio YouTube' },
        { rowId: 'ytmp4',  title: '🎬 YouTube MP4', description: 'Download video YouTube' },
      ],
    },
  ],
}, { quoted: msg });

Menangkap balasan list:

const selectedRowId = msg.message?.listResponseMessage?.singleSelectReply?.selectedRowId;
if (selectedRowId === 'ping') { /* handle ping */ }

πŸ”— Template Message β˜…

Template message mendukung tombol URL, tombol Call, dan Quick Reply.

await sock.sendMessage(jid, {
  text:   'Hubungi atau kunjungi kami sekarang!',
  footer: 'πŸ€– custom-baileys',
  header: 'πŸ“ž Informasi Kontak',
  templateButtons: [
    {
      type:        'url',
      displayText: '🌐 Kunjungi Website',
      url:         'https://example.com',
    },
    {
      type:        'call',
      displayText: 'πŸ“ž Telepon Kami',
      phoneNumber: '+6281234567890',
    },
    {
      type:        'quickReply',
      displayText: 'βœ… Saya Tertarik',
      id:          'interested',
    },
  ],
}, { quoted: msg });

Menangkap balasan template:

const selectedId = msg.message?.templateButtonReplyMessage?.selectedId;
if (selectedId === 'interested') { /* handle */ }

πŸ–ΌοΈ Media

Gambar

// Dari file lokal
await sock.sendMessage(jid, {
  image:   './foto.jpg',
  caption: 'Ini gambar dari file lokal',
});

// Dari URL
await sock.sendMessage(jid, {
  image:   'https://example.com/foto.jpg',
  caption: 'Ini gambar dari URL',
});

// Dari Buffer
const buf = require('fs').readFileSync('./foto.jpg');
await sock.sendMessage(jid, { image: buf, caption: 'Buffer image' });

Video

await sock.sendMessage(jid, {
  video:   './video.mp4',
  caption: 'Video keren!',
});

Audio / Voice Note

await sock.sendMessage(jid, {
  audio: './audio.ogg',
  ptt:   true, // Voice note (push-to-talk)
});

Dokumen

await sock.sendMessage(jid, {
  document: './laporan.pdf',
  mimetype: 'application/pdf',
  fileName: 'Laporan Q3 2024.pdf',
});

Stiker

await sock.sendMessage(jid, {
  sticker: './stiker.webp',
});

πŸ‘₯ Manajemen Grup

// Metadata grup
const meta = await sock.groupMetadata('1234567890@g.us');
console.log(meta.subject, meta.participants);

// Buat grup
await sock.groupCreate('Nama Grup', [
  '628111111111@s.whatsapp.net',
  '628222222222@s.whatsapp.net',
]);

// Tambah/hapus/promosi/demosi peserta
await sock.groupParticipantsUpdate('1234567890@g.us', ['628xxx@s.whatsapp.net'], 'add');
await sock.groupParticipantsUpdate('1234567890@g.us', ['628xxx@s.whatsapp.net'], 'remove');
await sock.groupParticipantsUpdate('1234567890@g.us', ['628xxx@s.whatsapp.net'], 'promote');
await sock.groupParticipantsUpdate('1234567890@g.us', ['628xxx@s.whatsapp.net'], 'demote');

// Keluar dari grup
await sock.groupLeave('1234567890@g.us');

// Ubah deskripsi grup
await sock.groupUpdateDescription('1234567890@g.us', 'Deskripsi baru');

// Ubah nama grup
await sock.groupUpdateSubject('1234567890@g.us', 'Nama Baru');

// Dapatkan invite link
const code = await sock.groupInviteCode('1234567890@g.us');
console.log(`https://chat.whatsapp.com/${code}`);

🧩 Struktur Project

custom-baileys/
β”œβ”€β”€ index.js               ← Entry point (semua export)
β”œβ”€β”€ package.json
β”œβ”€β”€ README.md
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ Socket/
β”‚   β”‚   β”œβ”€β”€ index.js       ← WASocket class + makeWASocket()
β”‚   β”‚   β”œβ”€β”€ noise.js       ← Noise protocol (WA MD handshake)
β”‚   β”‚   β”œβ”€β”€ binary.js      ← Binary stanza encode/decode
β”‚   β”‚   └── groups.js      ← Group IQ stanza builders
β”‚   β”œβ”€β”€ Auth/
β”‚   β”‚   β”œβ”€β”€ index.js
β”‚   β”‚   β”œβ”€β”€ useMultiFileAuthState.js  ← Session persistence
β”‚   β”‚   └── registration.js           ← Key generation
β”‚   β”œβ”€β”€ Message/
β”‚   β”‚   β”œβ”€β”€ index.js
β”‚   β”‚   β”œβ”€β”€ builder.js     ← buildButtonMessage β˜… buildListMessage β˜… buildTemplateMessage β˜…
β”‚   β”‚   └── media.js       ← Media upload/download helpers
β”‚   β”œβ”€β”€ Types/
β”‚   β”‚   └── index.js       ← Constants, enums, JID helpers
β”‚   └── Utils/
β”‚       └── index.js       ← Crypto, ID gen, sleep, backoff
└── example/
    └── bot.js             ← Contoh bot lengkap

βš™οΈ Konfigurasi makeWASocket

Parameter Default Keterangan
auth (wajib) Auth state dari useMultiFileAuthState
saveCreds (wajib) Callback untuk menyimpan credentials
logger null logger Objek logger (pino-compatible)
printQRInTerminal true Print QR ke stdout
markOnlineOnConnect false Kirim presence 'available' saat connect
connectTimeoutMs 20000 Timeout koneksi (ms)
defaultQueryTimeoutMs 60000 Timeout query IQ (ms)

πŸ“ Catatan Teknis

  • Signal Encryption: Stub implementasi β€” untuk production, integrasikan libsignal untuk enkripsi end-to-end yang sesungguhnya.
  • Media CDN: Download media dari CDN WA memerlukan implementasi mediaKey decryption (AES-256-CBC + HMAC-SHA256).
  • QR Code: QR yang dihasilkan adalah struktural demo. Untuk QR yang bisa di-scan, diperlukan ref dari server WA dan signing dengan identity key.
  • Button/List/Template: Protobuf telah di-patch sedemikian rupa agar compatible dengan klien WA MD. Render interaktif bergantung pada versi WA klien pengguna.

πŸ“„ Lisensi

MIT Β© custom-baileys contributors

About

test 4 baileys

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors