npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@jojoxyz/condemnedforce-baileys

v2.3.0

Published

baileys modifikasi by jojo — stable lane, anti-overhit, fast replies, no dropped messages

Readme

bayilescondemnedforce

Baileys modifikasi by jojo. Versi 2.3.0 menambah fitur Cpxbail di atas jalur 2.2.x. JID nomor, ID 3EB0, anti-call, anti-overhit, dan banner naga tetap ada. Tidak ada fitur lama yang dihapus.

Yang baru

  • Anti-overhit. Query IQ dibatasi (maks 3 sekaligus) dan query grup yang sama digabung, jadi bot tidak menembak server WhatsApp sampai putus.
  • Balasan tetap cepat. Pesan reply, react, edit, delete, dan chat yang baru masuk lewat jalur prioritas. Broadcast/status menunggu di belakang.
  • Tidak ada yang dibuang diam-diam. Antrian kirim tidak di-drop. Kalau socket sudah mati, sendMessage melempar error dan payload-nya ada di sock.antiOverhit.drainFailed().
  • Pesan masuk tidak nyangkut. Satu pesan rusak tidak menghentikan antrian offline. Kalau handler error, pesan tetap di-ack dan tetap di-emit supaya event berikutnya tidak hilang.
  • Cache metadata grup 5 menit + lookup node lebih cepat, jadi balasan grup tidak nunggu IQ berulang.
  • Hint reconnect di connection.update: shouldReconnect dan reconnectDelayMs. Jangan loop reconnect kalau session sudah logout.

Fitur kirim yang sudah ada tetap jalan: button, list, interactive, album, payment, product, event, poll result, group story, sticker pack, newsletter, AI icon, edit/delete.

Cpxbail yang ditambah di 2.3.0

  • checkBanStatus(nomor) — cek akun aktif, banned, atau tidak terdaftar.
  • Username: checkUsername, setUsername, deleteUsername, getMyUsername, setUsernamePin, findUserByUsername, fetchContactUsernames, getUsernameRecommendations, checkUsernameMulti.
  • Komunitas: communityCreate, communityMetadata, communityCreateGroup, communityLinkGroup, communityParticipantsUpdate, dan method komunitas lain di socket.
  • GenAI: sendTable, sendList, sendCodeBlock, sendLatex, sendLatexImage, sendRichMessage. html / map / imageUrl ikut richResponse.
  • Album bersih: sendMessage(jid, { album: [{ image }, { video }], caption }). Metadata spam tidak dikirim.
  • aiLabel default nyala untuk chat pribadi, termasuk @lid. Matikan dengan aiLabel: false.
  • noSelfSync: true tidak menyalin pesan ke device sendiri. Kalau lawan tidak punya device, kirim gagal dengan status 421, tidak diam-diam sukses.
  • updateMemberLabel, sendMessageMembers.
  • sock.lidMapping menyimpan pasangan LID/nomor. sock.rateLimiter tersedia, tidak menahan setiap kirim.
  • connection.update.classifyDisconnect memberi kategori putus. shouldReconnect tetap yang lama: 428 tetap reconnect, 440 tidak.

Yang ditambah:

  • mentionAll atau mentions: ['@all'] di grup
  • externalAdReply di pesan biasa
  • code, table, latex, richResponse
  • sendStatusMention(content, jids) — status + mention, sudah di-pace
  • updateCallPrivacy, updateMessagesPrivacy, updateDisableLinkPreviewsPrivacy
  • JID masuk dinormalkan ke [email protected] kalau WhatsApp kirim @lid. LID asli tetap di key.remoteJidLid / key.participantLid. Case memakai msg.sender atau msg.key.participant || msg.key.remoteJid. Pesan ephemeral, view-once, dan caption dibuka dulu supaya teksnya kebaca. Tombol native flow ikut buttonsResponseMessage.selectedButtonId.
  • ID pesan baru format 3EB0... (prefix Z4PH- sudah diganti).
  • Anti-call nyala default: tolak telepon pribadi dan grup, plus set privasi panggilan none saat konek. Matikan dengan antiCall: false.

Pakai

const { default: makeWASocket, useMultiFileAuthState, DisconnectReason } = require('@jojoxyz/condemnedforce-baileys')

const { state, saveCreds } = await useMultiFileAuthState('./session')
const sock = makeWASocket({
  auth: state,
  // default sudah nyala. Matikan dengan antiOverhit: false
  antiOverhit: {
    replyGapMs: 30,
    normalGapMs: 260,
    bulkGapMs: 650
  },
  antiCall: false
})

sock.ev.on('creds.update', saveCreds)
sock.ev.on('connection.update', ({ connection, lastDisconnect, shouldReconnect, reconnectDelayMs }) => {
  if (connection !== 'close') return
  const code = lastDisconnect?.error?.output?.statusCode
  if (shouldReconnect === false || code === DisconnectReason.loggedOut) return
  setTimeout(start, reconnectDelayMs || 2000)
})

// balasan — jalur cepat, tidak nunggu antrian bulk
await sock.sendMessage(jid, { text: 'siap' }, { quoted: msg })

// sebut semua member grup
await sock.sendMessage(groupJid, { text: 'absen', mentionAll: true })

// bulk / status jangan disamakan kecepatannya dengan reply
await sock.sendMessage(jid, { text: 'promo' }, { priority: 'low' })

await sock.sendMessage(jid, {
  code: { language: 'js', content: 'console.log(1)' },
  text: 'contoh',
  ai: true
})

Kalau kirim gagal karena socket putus, jangan anggap pesannya hilang:

const missed = sock.antiOverhit.drainFailed()

Panggil itu setelah socket baru open, lalu kirim ulang yang masih perlu.

Config anti-overhit

| Field | Default | Fungsi | | --- | --- | --- | | maxConcurrentQueries | 3 | batas IQ yang jalan bareng | | replyGapMs | 30 | jeda balasan setelah burst | | normalGapMs | 260 | jeda pesan biasa | | bulkGapMs | 650 | jeda broadcast/status | | burst | 4 | balasan pertama dalam 2 detik tanpa jeda | | replyWindowMs | 45000 | chat yang baru ngechat dianggap reply | | holdWhileOfflineMs | 2500 | tahan kirim sebentar kalau socket baru putus, lalu error (tidak di-drop diam-diam) |

sock.antiOverhit.stats() dan sock.queryLane.stats() buat pantau antrian.