lupy4u
v4.5.6
Published
Lupy4u WhatsApp Multi-Device API Library
Maintainers
Readme
LUPY4U CORE
💝 Show Some Love & Support
Saya develop dan maintain projek ni dengan jiwa dan raga. Kalau rasa projek ni bermanfaat, hulurkan sedikit sokongan buat developer mr.luppy:
✨ Ultimate Features (Apa Yang Kami Tawarkan)
- 🚀 High-Performance Core – Dibangun atas TypeScript yang dioptimumkan untuk kelajuan maksimum dan kestabilan melampau.
- 🔧 Battle-Tested ID Fixes – Penyelesaian pintar untuk masalah @lid & @jid dalam kumpulan WhatsApp.
- 📱 Full Multi-Device Support – Koneksi tanpa batasan ke ekosistem WhatsApp Multi-Device.
- 🔐 End-to-End Military Encryption – Semua data dan pesan dienkripsi. Privasi adalah hak mutlak.
- 📨 Complete Message Parsing – Mampu tangani teks, media berat (imej, video, audio), polling, stiker, lokasi, kontak, dan banyak lagi.
- 🧩 Lightweight & Super Optimized – Guna sedikit RAM, tapi power luar biasa. Streaming media pun lancar jaya.
- 📂 Flexible Auth Management – Simpan kredensial anda di fail atau terus ke database SQL/NoSQL.
⚠️ Legal Notice & Disclaimer
Projek ini tiada kaitan, sokongan, atau persekutuan rasmi dengan WhatsApp Inc. atau syarikat induknya. Laman rasmi WhatsApp: whatsapp.com.
Penafian Keras: Penggunaan tool ini adalah tanggungjawab anda sepenuhnya. Jangan guna untuk spam, scraping berlebihan, atau automation gila-gila yang melanggar Terma Perkhidmatan WhatsApp. Kalau akaun anda kena ban, itu urusan anda sendiri—kami hanya sediakan engine, anda yang tentukan hala tuju. Deal?
📦 Installation (Power Up Your Project)
Stable Release (Disyorkan - Paling Stabil)
npm install lupy4u
Latest Edge Version (Untuk Pengguna Berani)
```bash
npm install lupy4u@latest
# atau pakai yarn
yarn add lupy4u@latestCara Import Dalam Kod Anda
// CommonJS (Standard Node.js)
const { default: makeWASocket } = require("lupy4u")
// ES6 Module (Modern JS)
import makeWASocket from "lupy4u"🚀 Quick Start - Jom Mulakan!
Ini contoh asas untuk sambung guna QR Code.
const { default: makeWASocket, DisconnectReason, useMultiFileAuthState } = require('lupy4u')
const { Boom } = require('@hapi/boom')
async function connectToWhatsApp() {
// Simpan kredensial anda di folder 'auth_info_lupy4u'
const { state, saveCreds } = await useMultiFileAuthState('auth_info_lupy4u')
const sock = makeWASocket({
auth: state,
printQRInTerminal: true,
browser: ['lupy4u', 'Desktop', '3.0']
})
// Event Connection State
sock.ev.on('connection.update', (update) => {
const { connection, lastDisconnect } = update
if (connection === 'close') {
const shouldReconnect = (lastDisconnect?.error as Boom)?.output?.statusCode !== DisconnectReason.loggedOut
console.log('Koneksi putus, kita cuba sambung balik ye:', shouldReconnect)
if (shouldReconnect) connectToWhatsApp()
} else if (connection === 'open') {
console.log('✅ Boom! Berjaya connect ke WhatsApp!')
}
})
// Event Incoming Messages
sock.ev.on('messages.upsert', async ({ messages }) => {
for (const m of messages) {
if (!m.message) continue
console.log('📱 Ada pesan baru masuk:', JSON.stringify(m, undefined, 2))
// Auto-reply spec
await sock.sendMessage(m.key.remoteJid!, {
text: 'Aku sedia membantu, boss! 🤖 Lupy4u Core sedia berkhidmat.'
})
}
})
// Simpan credentials bila ada update
sock.ev.on('creds.update', saveCreds)
}
connectToWhatsApp()🔌 Account Connection Methods
WhatsApp menyediakan API Multi-Device. lupy4u membolehkan anda autentikasi sebagai klien sekunder melalui QR Code atau Pairing Code.
QR Code (Paling Biasa)
const { default: makeWASocket, Browsers } = require("lupy4u")
const sock = makeWASocket({
browser: Browsers.ubuntu('Lupy4u App'),
printQRInTerminal: true
})LePasti QR code keluar di terminal, scan je guna WhatsApp telefon anda.
Pairing Code (Tanpa Scan QR)
Sesuai untuk yang buat bot di server tanpa paparan skrin.
const { default: makeWASocket } = require("lupy4u")
const sock = makeWASocket({
printQRInTerminal: false
})
// Pairing biasa
if (!sock.authState.creds.registered) {
const number = '60123456789' // Ganti dengan no. telefon anda
const code = await sock.requestPairingCode(number)
console.log('🔑 Kode Pairing Anda:', code)
}
// Pairing dengan custom code (8 aksara)
if (!sock.authState.creds.registered) {
const pair = "LUPPY4U"
const number = '60123456789'
const code = await sock.requestPairingCode(number, pair)
console.log('🔑 Custom Pairing Code:', code)
}Full History Sync
Nak dapatkan riwayat chat penuh? Set syncFullHistory ke true.
const sock = makeWASocket({
browser: Browsers.macOS('lupy4u'),
syncFullHistory: true
})⚙️ Advanced Socket Config (Power User Area)
Cache Metadata Group (Wajib untuk Bot Grup)
Untuk performa optimum di grup, implementasikan caching metadata:
const { default: makeWASocket } = require("lupy4u")
const NodeCache = require('node-cache')
const groupCache = new NodeCache({ stdTTL: 5 * 60, useClones: false })
const sock = makeWASocket({
cachedGroupMetadata: async (jid) => groupCache.get(jid)
})
sock.ev.on('groups.update', async ([event]) => {
const metadata = await sock.groupMetadata(event.id)
groupCache.set(event.id, metadata)
})
sock.ev.on('group-participants.update', async (event) => {
const metadata = await sock.groupMetadata(event.id)
groupCache.set(event.id, metadata)
})Fix Retry & Poll Vote Decryption
Tingkatkan kejayaan hantar pesan dan decrypt vote poll dengan custom store:
const sock = makeWASocket({
getMessage: async (key) => await getMessageFromStore(key)
})Terima Notifikasi Tanpa Online Status
Nak keep low profile? Matikan status online:
const sock = makeWASocket({
markOnlineOnConnect: false
})💾 Persistent Auth (Jangan Scan QR Setiap Hari)
Guna useMultiFileAuthState untuk simpan status login di folder. Kalau bot restart, dia auto-login balik.
const { default: makeWASocket, useMultiFileAuthState } = require("lupy4u")
async function connect() {
const { state, saveCreds } = await useMultiFileAuthState('auth_info_lupy4u')
const sock = makeWASocket({ auth: state })
sock.ev.on('creds.update', saveCreds)
}
connect()🗄️ Data Store Implementation (In-Memory)
lupy4u sengaja tidak sertakan storage default untuk chat atau contact. Tapi kami sediakan in-memory store mudah untuk anda guna.
const { default: makeWASocket, makeInMemoryStore } = require("lupy4u")
const store = makeInMemoryStore({ })
store.readFromFile('./lupy4u_store.json')
setInterval(() => {
store.writeToFile('./lupy4u_store.json')
}, 10_000)
const sock = makeWASocket({ })
store.bind(sock.ev)
sock.ev.on('chats.upsert', () => {
console.log('Dapat chat baru:', store.chats.all())
})
sock.ev.on('contacts.upsert', () => {
console.log('Dapat kontak baru:', Object.values(store.contacts))
})🆔 WhatsApp IDs (JID Mastery)
jid adalah ID unik untuk setiap sasaran pesanan.
· Individu: [country_code][phone_number]@s.whatsapp.net (cth: [email protected]) · Grup: [email protected] · Broadcast List: [timestamp]@broadcast · Status / Stories: status@broadcast
🔧 Core Utilities
· getContentType – Dapatkan jenis mesej sebenar. · getDevice – Kenal pasti device penghantar mesej. · makeCacheableSignalKeyStore – Akselerasi key store untuk speed yang lebih pantas. · downloadContentFromMessage – Download media terus dari mesej.
📤 Send Messages (Heavy Artillery)
Guna satu fungsi utama untuk semua jenis mesej.
sock.sendMessage(jid, content, options)📝 Non-Media Messages
Text & Quote
await sock.sendMessage(jid, { text: 'Halo dunia, ini Lupy4u!' })
await sock.sendMessage(jid, { text: 'Kuquote ini ye.' }, { quoted: message })Tag Orang (Mention)
await sock.sendMessage(
jid,
{
text: '@60123456789 tolong check ye.',
mentions: ['[email protected]']
}
)Forward Message
const msg = getMessageFromStore()
await sock.sendMessage(jid, { forward: msg })Location & Contacts
// Lokasi
await sock.sendMessage(jid, { location: { degreesLatitude: 3.12, degreesLongitude: 101.55 } })
// Kontak (vCard)
const vcard = 'BEGIN:VCARD\nVERSION:3.0\nFN:Mr Luppy\nTEL;type=CELL;type=VOICE;waid=60123456789:+60 123456789\nEND:VCARD'
await sock.sendMessage(jid, { contacts: { displayName: 'Mr Luppy', contacts: [{ vcard }] } })Reactions, Pins, & Polls
// Reaksi (ketik ❤️)
await sock.sendMessage(jid, { react: { text: '🔥', key: message.key } })
// Pin Message (24 jam)
await sock.sendMessage(jid, { pin: { type: 1, time: 86400, key: message.key } })
// Polling
await sock.sendMessage(jid, { poll: { name: 'Lupy4u power tak?', values: ['Power Gila', 'Biasa je'], selectableCount: 1 } })🖼️ Media & File Messages
Boleh guna { stream: Stream }, { url: Url }, atau terus Buffer.
Gambar, Video, GIF, Audio
await sock.sendMessage(jid, { image: { url: './foto.jpeg' }, caption: 'Ini gambar power' })
await sock.sendMessage(jid, { video: { url: './video.mp4' }, caption: 'Tengok ni', ptv: false })
await sock.sendMessage(jid, { video: fs.readFileSync('./gif.mp4'), caption: 'gif ke ni', gifPlayback: true })
await sock.sendMessage(jid, { audio: { url: './lagu.mp3' }, mimetype: 'audio/mp4' })
// View Once (Tengok sekali je)
await sock.sendMessage(jid, { image: { url: './rahsia.jpeg' }, viewOnce: true, caption: 'Rahsia ni' })✏️ Message Manipulation
Delete & Edit
const msg = await sock.sendMessage(jid, { text: 'Aku nak delete ni' })
await sock.sendMessage(jid, { delete: msg.key })
await sock.sendMessage(jid, { text: 'Teks update terbaru', edit: response.key })Download Media (Contoh Image)
import { createWriteStream } from 'fs'
import { downloadMediaMessage, getContentType } from 'lupy4u'
sock.ev.on('messages.upsert', async ({ messages: [m] }) => {
if (!m.message) return
const messageType = getContentType(m)
if (messageType === 'imageMessage') {
const stream = await downloadMediaMessage(m, 'stream', {}, { logger, reuploadRequest: sock.updateMediaMessage })
stream.pipe(createWriteStream('./download.jpeg'))
}
})Tolak Panggilan
await sock.rejectCall(callId, callFrom)📁 Chat Management (Admin Tools)
Read & Presence
// Tandakan sebagai telah dibaca
await sock.readMessages([key])
// Set presence (composing, available)
await sock.sendPresenceUpdate('composing', jid) Archive, Mute, Delete Chat
const lastMsg = await getLastMessageInChat(jid) // Anda implementasi sendiri
// Archive
await sock.chatModify({ archive: true, lastMessages: [lastMsg] }, jid)
// Mute (8 jam)
await sock.chatModify({ mute: 8 * 60 * 60 * 1000 }, jid)
// Clear chat for me
await sock.chatModify({ clear: { messages: [{ id: 'MSG_ID', fromMe: true, timestamp: '123456' }] } }, jid)
// Delete entire chat
await sock.chatModify({ delete: true, lastMessages: [lastMsg] }, jid)Pin, Star, Disappearing Messages
// Pin & Unpin chat
await sock.chatModify({ pin: true }, jid)
await sock.chatModify({ pin: false }, jid)
// Star messages
await sock.chatModify({ star: { messages: [{ id: 'MSG_ID', fromMe: true }], star: true } }, jid)
// Turn on disappearing mode (7 hari)
await sock.sendMessage(jid, { disappearingMessagesInChat: 604800 })👤 User & Group Queries
Check User Validity
const [result] = await sock.onWhatsApp(jid)
if (result.exists) console.log(`${jid} active di WA, jid sebenar: ${result.jid}`)Group Operations
// Create Group
const group = await sock.groupCreate('Grup Lupy4u', ['[email protected]'])
console.log('Grup ID:', group.gid)
// Add, Remove, Promote, Demote
await sock.groupParticipantsUpdate(jid, ['[email protected]'], 'add')
// Update Subject & Description
await sock.groupUpdateSubject(jid, 'Nama Baru Keren')
await sock.groupUpdateDescription(jid, 'Deskripsi baru power')
// Group Settings (Announcement / Not Announcement)
await sock.groupSettingUpdate(jid, 'announcement')
await sock.groupSettingUpdate(jid, 'not_announcement')🔒 Privacy Settings
// Block/Unblock
await sock.updateBlockStatus(jid, 'block')
// Fetch Privacy Settings
const privacySettings = await sock.fetchPrivacySettings(true)
console.log(privacySettings)
// Update Last Seen, Read Receipts, etc.
await sock.updateLastSeenPrivacy('contacts')
await sock.updateReadReceiptsPrivacy('all')
await sock.updateDefaultDisappearingMode(86400) // 24 jam🛠️ Custom Functions & Debugging
Live Debug Logs
const { P } = require('lupy4u')
const sock = makeWASocket({ logger: P({ level: 'debug' }) })Websocket Event Callbacks
sock.ws.on('CB:edge_routing', (node) => { })
sock.ws.on('CB:edge_routing,id:abcd', (node) => { })💡 Pro Tips & Best Practices (Sumpah Tak Tipu)
· Caching is King: Cache metadata grup untuk performa melampau. · Handle Auto-Reconnect: Pastikan sambungan bot tahan lasak. Guna contoh kod connection.update kami di atas. · Ini power untuk developer sejati: Jangan guna readMessages secara berlebihan, nanti WhatsApp detect bot anda pelik. Use wisely.
🙏 Special Credits
This project is standing tall on the shoulders of giants. A massive shoutout and deepest gratitude goes to whiskeySocket (and the original LevviCode team) for laying the foundation of this phenomenal Multi-Device engine.
Without your open-source dedication, lupy4u would never have existed. Thank you, whiskeySocket! 🙌
Maintained with passion by mr.luppy.
## 🏁 Penutup / Closing Words
Terima kasih kerana mempercayai **lupy4u** sebagai enjin utama bot anda.
Kami tidak pernah berhenti untuk menambah baik dan mengoptimumkan *core engine* ini.
Jika projek ini membantu anda, jangan lupa tinggalkan bintang ⭐ sebagai tanda sokongan!
---
<div align='center'>
<strong>lupy4u</strong> — The Ultimate WhatsApp Multi-Device API Engine. Built for Power. Designed for Scalability.
</div>