@neelegirly/baileys
v2.2.33
Published
Eigenstaendiger Baileys-Fork von Neele Girl (NICHT WhiskeySockets/Baileys) — multi-device WhatsApp Web API fuer Node.js, mit Multi-Button-Support, QR-/Pairing-Stabilitaet und self-healing WA-Web-Version.
Maintainers
Readme
🌸 @neelegirly/baileys 🌸
Die WhatsApp-Web-API mit sauberem Neelegirly-Glow-up
QR Branding · Self-Healing WA-Web-Version · Wrapper-Aware Update Notify · LID · Smart Queue
Installation · Quickstart · Was ist dieser Fork? · Versionsschema · Message-ID · Release Notes
⚠️ Das hier ist NICHT
WhiskeySockets/Baileys
@neelegirly/baileysist ein eigenständiger Fork, gepflegt von Neele Girl. Eigene Versionszählung (2.2.x, nicht6.7.x/7.x), eigene Anpassungen: Multi-Buttons (interactiveMessage/carouselMessage/nativeFlow), QR-/Pairing-Stabilität, self-healing WA-Web-Version, eigene Message-ID-Signatur,Store-Layer und Mongo-/Single-File-Auth-States.Bug-Reports gehören zu neelegirly/baileys/issues — nicht ins Upstream-Repo. Umgekehrt gilt: Upstream-Issues/PRs treffen auf diesen Fork oft nicht zu, weil er strukturell abweicht.
Basiert auf Baileys von Rajeh Taher/WhiskeySockets, MIT-lizenziert — deren Copyright-Vermerk bleibt in der LICENSE erhalten. Danke für die Grundlage. 🌸 Nicht offiziell mit WhatsApp, Meta oder dem Baileys-Upstream verbunden.
🌷 Was ist dieser Fork?
@neelegirly/baileys ist ein gepflegter Fork von Baileys (multi-device WhatsApp-Web-API für Node.js). Er bleibt nah am Upstream, ergänzt aber ein paar fokussierte Neelegirly-Eigenheiten:
- 💖 Eigene Message-ID-Generierung (iOS-Style mit
NEELE-Signatur) – siehe unten. - 🌐 Self-Healing WA-Web-Version – die Verbindung zieht sich die aktuelle WhatsApp-Web-Version automatisch, damit der QR-/Pairing-Login nicht durch veraltete Versionsangaben mit
statusCode 405abbricht. - 📷 QR Branding – Header/Footer + Versionskontext direkt im QR-Flow.
- 🔔 Wrapper-Aware Update Notify – Statuszeilen für Baileys und den optionalen
@neelegirly/wa-api-Wrapper. - 🎀 Sauberer
@neelegirly/*-Scope mit gepinntem Begleit-Ökosystem.
Hinweis: Dieses Projekt ist nicht offiziell mit WhatsApp, Meta oder dem Baileys-Upstream verbunden.
🧱 Architektur
@neelegirly/libsignal ← Signal-Protokoll-Krypto
↓
@neelegirly/baileys ← dieser Fork · Socket, Events, Messaging
↓
@neelegirly/wa-api ← Multi-Session-Wrapper (Lifecycle, QR, Update Notify)
↓
App (PM2 managed)
↓
@neelegirly/downloader ← optionale Media-UtilityPM2-Regel:
@neelegirly/wa-apiverwaltet Sessions intern. PM2 startet nur die App, nicht einen Prozess pro Session.
🔢 Versionsschema
Wichtig zu verstehen — hier laufen zwei voneinander unabhängige Versionsnummern:
| Nummer | Beispiel | Bedeutung |
| --- | --- | --- |
| Fork-Version | 2.2.32 | Die npm-Version dieses Pakets. Eigenes semver-Schema von Neelegirly – nicht identisch mit der Upstream-Baileys-Versionsnummer. |
| WhatsApp-Web-Baseline | 2.3000.1043857760 | Die Client-Version, die im Handshake an WhatsApp gemeldet wird. Wird zur Laufzeit aktuell gehalten (self-healing). |
Die Fork-Version 2.2.x ist also reines Paket-Versioning. Welche WhatsApp-Web-Version tatsächlich verbunden wird, zeigt der Boot-Banner und fetchLatestBaileysVersion().
💖 Message-ID-Anpassung (NEELE)
Dieser Fork erzeugt Message-IDs in einem iOS-Style-Format mit eingebetteter NEELE-Signatur (z. B. 3A…NEELE…, 20 Zeichen). Das ist eine bewusste, dauerhafte Anpassung – generateMessageID und generateMessageIDV2 werden niemals durch die Upstream-Variante überschrieben.
const { generateMessageID } = require('@neelegirly/baileys')
generateMessageID() // → z. B. "3AC18D8ANEELE3B14420"Beim Abgleich mit dem Upstream bleibt diese Logik 1:1 erhalten.
🚀 Installation
npm install @neelegirly/[email protected] @neelegirly/[email protected] --save-exactyarn add @neelegirly/[email protected] @neelegirly/[email protected] --exactFür den kompletten Stack passt dazu
@neelegirly/[email protected].
Update eines bestehenden Setups
npm install @neelegirly/baileys@latest @neelegirly/wa-api@latest --save-exactNach dem Update genügt ein App-Neustart. Der QR-/Pairing-Login zieht sich die aktuelle WhatsApp-Web-Version automatisch.
⚡ Quickstart
import makeWASocket, {
useMultiFileAuthState,
fetchLatestBaileysVersion,
DisconnectReason,
Browsers
} from '@neelegirly/baileys'
async function start() {
const { state, saveCreds } = await useMultiFileAuthState('./auth')
const { version } = await fetchLatestBaileysVersion() // self-healing WA-Web-Version
const sock = makeWASocket({
auth: state,
version,
browser: Browsers.ubuntu('Chrome'),
printQRInTerminal: true
})
sock.ev.on('creds.update', saveCreds)
sock.ev.on('connection.update', ({ connection, lastDisconnect }) => {
if (connection === 'open') return console.log('Verbunden 💖')
if (connection === 'close') {
const statusCode = lastDisconnect?.error?.output?.statusCode
if (statusCode !== DisconnectReason.loggedOut) start().catch(console.error)
}
})
}
start().catch(console.error)
fetchLatestBaileysVersion()ist die empfohlene Quelle fürversion: Sie liefert die aktuell gültige WhatsApp-Web-Version und fällt bei Netzwerkfehlern auf die gebündelte Baseline zurück.
🧩 Companion Stack
| Paket | Version | Rolle |
|------|---------|-------|
| @neelegirly/baileys | 2.2.32 | Socket, Events, Messaging |
| @neelegirly/libsignal | 1.0.33 | Signal-Protokoll-Komponente |
| @neelegirly/wa-api | 1.8.13 | Lifecycle-, Session- und Update-Wrapper |
🩷 QR Branding & Update Status
Beim QR-Scan werden Markenzeilen ober- und unterhalb des QR-Codes ausgegeben. Versionen werden dynamisch aus package.json gelesen, Update-Status robust verarbeitet und optionaler Wrapper-Kontext aus @neelegirly/wa-api dargestellt. Der Boot-Banner zeigt zusätzlich die aktive WhatsApp-Web-Baseline.
🌐 Namespace-Migration
- import makeWASocket from '@whiskeysockets/baileys'
+ import makeWASocket from '@neelegirly/baileys'📝 Release Notes 2.2.33
patchMessageForMdIfRequired erhält jetzt die vom Aufrufer übergebene rohe
interactiveMessage.carouselMessage-Struktur. Der bisherige automatische
View-once-Patch für einzelne Karten wird nicht mehr auf rohe Karussells
angewendet. Bereits ausdrücklich umhüllte Nachrichten bleiben erhalten;
einzelne interaktive Karten, Listen und Templates behalten ihren bisherigen
MD-Patch. Die Darstellung der verwendeten Knöpfe muss weiterhin auf den
jeweiligen WhatsApp-Clients geprüft werden.
📝 Release Notes 2.2.32
prepareInteractiveMessageForMd(message) ergänzt für eine interaktive Karte
genau einen Multi-Device-Umschlag mit deviceListMetadataVersion: 2. Ein
vorhandener View-once-Umschlag bleibt erhalten. GIF/Video im Header, Text,
Knöpfe und Zitat bleiben gemeinsam in einer Nachricht. Der Helper sendet
nichts selbst und verändert weder Socket-Verbindungen noch Konten.
const { prepareInteractiveMessageForMd, generateWAMessageFromContent } = require('@neelegirly/baileys')
// card: vorhandenes { interactiveMessage: { header, body, footer, nativeFlowMessage } }
const msg = generateWAMessageFromContent(jid, prepareInteractiveMessageForMd(card), {
userJid: sock.user.id
})
await sock.relayMessage(jid, msg.message, { messageId: msg.key.id })Für eine GIF-Karte mit direkten Auswahlknöpfen quick_reply verwenden.
single_select ist ein anderer Knopftyp; der Helper macht ihn nicht durch
einen Umschlag automatisch auf jedem iOS-/Android-Client sichtbar. Die
Darstellung muss auf den verwendeten WhatsApp-Clients geprüft werden.
Es gibt keine automatische Umstellung vorhandener Nachrichten.
📝 Release Notes 2.2.31
- 🔐 „Warte auf diese Nachricht“: Gerät beim Entschlüsseln erhalten. Sessions von Zweitgeräten (WhatsApp Web/Desktop) landeten im Datensatz des Handys, der Bot verschlüsselte ans Handy danach mit dem falschen Schlüssel.
- 🔁 Retry repariert. Neuzustellung an die echte Geräteadresse (vorher eine erfundene
<lid>@s.whatsapp.net), beide Adressen (LID + Nummer) frisch, Schlüssel direkt aus der Retry-Anfrage (portiert aus WhiskeySockets 7.0.0-rc14, MIT), Logzeile[ONIMAI retry]. - 🗝️ Signal-Sessions: kein Ersatz durch fremde Geräte, max. 40 Sessions je Datensatz, keine ~200 Lesezugriffe je Nachricht mehr.
- 🧩 Multi-Buttons / Native Flow / Carousel und Umfrage-Stimmen ohne patch-package.
- 🧷 NEELE-Message-IDs, QR/Pairing, Store, Auth-Helfer unverändert. Details:
CHANGELOG.md. - 🔗 Companion-Stack:
2.2.31 / 1.8.14 / 1.0.33.
📝 Release Notes 2.2.30
- 🔧
fetchLatestWaWebVersion()repariert. Die Guard-Zeile lasmatch?.match[1]stattmatch?.[1]und warf dadurch bei jedem Aufruf einenTypeError, der imcatchverschwand. Die Funktion fiel deshalb immer still auf die eingebaute Baseline zurück und meldeteisLatest: false— sie hat nie funktioniert. Jetzt liefert sie die echte Live-Version vonweb.whatsapp.com/sw.js. - 📌 WA-Web-Baseline aktualisiert auf
2.3000.1043857760(vorher2.3000.1035194821). Das ist nur der Offline-Notnagel:fetchLatestBaileysVersion()holt die Version weiterhin zur Laufzeit. Greift also, wenn beim Start kein Netz zur Versionsquelle besteht. - ⚖️ LICENSE korrigiert. Der MIT-Copyright-Vermerk des Upstreams (Rajeh Taher/WhiskeySockets) war entfernt worden — MIT verlangt ihn aber bei substanziellen Teilen. Er steht jetzt wieder drin, neben dem Fork-Copyright.
- 🏷️ Klarere Abgrenzung. README-Kopf,
descriptionundcontributorsmachen unmissverständlich, dass dies ein eigenständiger Fork von Neele Girl ist und nichtWhiskeySockets/Baileys. - 🧷 Message-ID- und QR-/Pairing-Logik unverändert. Kein Byte an
generateMessageID/generateMessageIDV2(NEELE-Signatur) oder am QR-/Pairing-Flow. - 🔗 Companion-Stack:
2.2.30 / 1.8.13 / 1.0.33.
Kein Upstream-Merge. Dieser Fork weicht strukturell von
WhiskeySockets/Baileysab (eigenerStore-Layer,Socket/registration,WASignalGroup, eigene Message-IDs; Upstream 7.x setzt inzwischen aufwhatsapp-rust-bridgeund hatStoreentfernt). Ein mechanischer Merge würde den Fork zerlegen. Der einzige Punkt, der Logins wirklich bricht — die WhatsApp-Web-Version — wird zur Laufzeit self-healing nachgezogen.
