@neelegirl/baileys 2.0.5 → 2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,934 +1,147 @@
1
- <div align="center">
1
+ # @neelegirl/baileys
2
2
 
3
- # 🌸 @neelegirl/baileys 🌸
3
+ ![Neelegirl Baileys](https://files.catbox.moe/phppor.JPG)
4
4
 
5
- ### *Die WhatsApp Web API, die alles kann*
6
- ### *Smart Queue · QR-Code · Message ID · LID · TypeScript*
5
+ Conservative Neelegirl-maintained CommonJS WhatsApp Web client based on WhiskeySockets/Baileys, prepared for local use and publish review without removing project-specific behavior.
7
6
 
8
- [![Version](https://img.shields.io/badge/Version-2.0.5-ff69b4?style=for-the-badge&logo=github)](https://github.com/neelegirl/baileys)
9
- [![Baileys API](https://img.shields.io/badge/Baileys_API-1.7.2-9b59b6?style=for-the-badge)](https://github.com/WhiskeySockets/Baileys)
10
- [![npm](https://img.shields.io/npm/v/@neelegirl/baileys?style=for-the-badge&color=ff69b4&logo=npm)](https://www.npmjs.com/package/@neelegirl/baileys)
11
- [![Downloads](https://img.shields.io/npm/dw/@neelegirl/baileys?style=for-the-badge&color=ff69b4&logo=npm)](https://www.npmjs.com/package/@neelegirl/baileys)
12
- [![License](https://img.shields.io/github/license/neelegirl/baileys?style=for-the-badge&color=ff69b4)](LICENSE)
13
- [![Node](https://img.shields.io/badge/Node-20+-green?style=for-the-badge&logo=node.js)](https://nodejs.org)
7
+ ## Reference Status
14
8
 
15
- ---
9
+ - Public reference checked on 2026-03-20 against `WhiskeySockets/Baileys` `master`
10
+ - Reference HEAD: `d0779026958ca607e4efd4abef8ba89d581e7027`
11
+ - Public upstream package version at that snapshot: `7.0.0-rc.9`
16
12
 
17
- <p align="center">
18
- <img src="https://files.catbox.moe/ru1msl.jpeg" width="720" alt="Neele Baileys Header" />
19
- </p>
13
+ This package is not a blind mirror of upstream. It intentionally keeps Neelegirl-specific runtime behavior and CommonJS packaging where that is required for compatibility with the local stack.
20
14
 
21
- | 📦 Paket | 🎯 Baileys API | ✨ Highlights |
22
- |----------|----------------|----------------|
23
- | **@neelegirl/baileys v2.0.5** | **1.7.2** | Upstream-Updates · QR-Code · Message ID · Update-Check von npm |
15
+ ## What Was Explicitly Preserved
24
16
 
25
- **✨ v2.0.5** · README Glow-Up · Kompatibel mit Baileys **1.7.2** · QR & Message ID unverändert · Update-Prüfung via npm-Registry
17
+ - QR code flow and terminal QR handling
18
+ - `NEELE` message-ID special handling
19
+ - Neelegirl-specific device and message labeling behavior
20
+ - Existing WhatsApp Web focused socket defaults and event flow
21
+ - Legacy auth helpers already shipped in this package:
22
+ `useMultiFileAuthState`, `useSingleFileAuthState`, `useMongoFileAuthState`
23
+ - Existing store helpers already shipped in this package:
24
+ `makeInMemoryStore`, `makeCacheManagerStore`
26
25
 
27
- [**Installation**](#-installation) · [**Quickstart**](#-quickstart-guide) · [**Features**](#-neue-features-in-version-200) · [**Dokumentation**](#-dokumentation) · [**Support**](#-support--community)
26
+ ## What Was Updated Conservatively In 2.0.6
28
27
 
29
- </div>
28
+ - Fixed WA Web version fetching so `fetchLatestWaWebVersion()` can parse `sw.js` correctly
29
+ - Preserved the `NEELE` message-ID path while correcting helper edge cases
30
+ - Forwarded alternative addressing fields more cleanly in decoded message keys:
31
+ `remoteJidAlt`, `participantAlt`, `addressingMode`
32
+ - Hardened LID migration calls so custom repositories do not fail noisily
33
+ - Cleaned publish metadata:
34
+ recursive `files`, explicit `exports`, corrected package description
35
+ - Rewrote the README to match the code that is actually present
30
36
 
31
- ---
37
+ ## What Was Not Adopted From Upstream
32
38
 
33
- ## 📋 Inhaltsverzeichnis
39
+ - No full ESM-only migration
40
+ - No Node 20 only engine jump
41
+ - No blind replacement of Neelegirl QR, ID, logging or device logic
42
+ - No forced adoption of every new upstream internal module
34
43
 
35
- - [✨ Warum @neelegirl/baileys?](#-warum-neelegirlbaileys)
36
- - [🚀 Installation](#-installation)
37
- - [📖 Quickstart Guide](#-quickstart-guide)
38
- - [✨ Neue Features in Version 2.0.5](#-neue-features-in-version-205)
39
- - [💡 Grundlegende Verwendung](#-grundlegende-verwendung)
40
- - [🎯 Erweiterte Features](#-erweiterte-features)
41
- - [📚 Dokumentation](#-dokumentation)
42
- - [⚠️ Wichtige Hinweise](#️-wichtige-hinweise)
43
- - [💬 Support & Community](#-support--community)
44
-
45
- ---
46
-
47
- ## ✨ Warum @neelegirl/baileys?
48
-
49
- <div align="center">
50
-
51
- ### 🌟 **Zauberhafte Vorteile** 🌟
52
-
53
- </div>
54
-
55
- | Feature | Beschreibung | Status |
56
- |---------|-------------|--------|
57
- | 🧠 **Leichtgewichtig** | Keine Browser- oder Selenium-Monster nötig! | ✅ |
58
- | 🌈 **WebSocket-Magie** | Direkt, schnell & stabil | ✅ |
59
- | 💖 **Multi-Device** | Vollständige Unterstützung | ✅ |
60
- | 🧩 **LID-Kompatibel** | Linked ID Erkennung & Nutzung | ✅ |
61
- | 🧷 **TypeScript** | Saubere Typen, DX zum Verlieben | ✅ |
62
- | 🔄 **Auto-Updates** | Automatische Update-Prüfung | ✅ |
63
- | 📱 **QR-Code** | Schöne QR-Code-Anzeige | ✅ |
64
- | 🎯 **Message ID** | Verbesserte Message-ID-Generierung | ✅ |
65
- | 🚀 **Smart Queue** | Intelligente Nachrichten-Warteschlange | ✅ **NEU!** |
66
-
67
- ---
68
-
69
- ## 🚀 Installation
70
-
71
- ### 📦 Mit npm
44
+ ## Installation
72
45
 
73
46
  ```bash
74
- npm install @neelegirl/baileys@latest
47
+ npm install @neelegirl/baileys
75
48
  ```
76
49
 
77
- ### 📦 Mit yarn
50
+ ## Quick Start
78
51
 
79
- ```bash
80
- yarn add @neelegirl/baileys@latest
81
- ```
82
-
83
- ### 📦 Bleeding-Edge (GitHub)
84
-
85
- ```bash
86
- npm install github:neelegirl/baileys
87
- # oder
88
- yarn add github:neelegirl/baileys
89
- ```
90
-
91
- ### 📥 Import
92
-
93
- ```typescript
94
- // ES Modules
95
- import makeWASocket, {
96
- useMultiFileAuthState,
52
+ ```js
53
+ const {
54
+ default: makeWASocket,
55
+ Browsers,
97
56
  DisconnectReason,
98
57
  fetchLatestBaileysVersion,
99
- Browsers,
100
- createSmartMessageQueue // 🆕 NEU!
101
- } from '@neelegirl/baileys'
102
-
103
- // CommonJS
104
- const {
105
- default: makeWASocket,
106
- useMultiFileAuthState,
107
- createSmartMessageQueue
58
+ useMultiFileAuthState
108
59
  } = require('@neelegirl/baileys')
109
- ```
110
-
111
- ---
60
+ const { Boom } = require('@hapi/boom')
112
61
 
113
- ## 📖 Quickstart Guide
114
-
115
- ### 🎯 **Für Anfänger: Dein erster Bot in 5 Minuten**
116
-
117
- ```typescript
118
- import makeWASocket, {
119
- useMultiFileAuthState,
120
- DisconnectReason,
121
- fetchLatestBaileysVersion
122
- } from '@neelegirl/baileys'
123
- import { Boom } from '@hapi/boom'
124
-
125
- async function startBot() {
126
- // 1️⃣ Auth-State laden/speichern
62
+ async function start() {
127
63
  const { state, saveCreds } = await useMultiFileAuthState('./auth_info')
128
-
129
- // 2️⃣ Neueste WhatsApp-Version holen
130
64
  const { version } = await fetchLatestBaileysVersion()
131
-
132
- // 3️⃣ Socket erstellen
65
+
133
66
  const sock = makeWASocket({
134
67
  version,
135
68
  auth: state,
136
- printQRInTerminal: true, // QR-Code im Terminal anzeigen
137
- browser: ['Neele Bot', 'Chrome', '1.0.0']
69
+ printQRInTerminal: true,
70
+ browser: Browsers.ubuntu('Chrome')
138
71
  })
139
-
140
- // 4️⃣ Credentials speichern wenn sie sich ändern
72
+
141
73
  sock.ev.on('creds.update', saveCreds)
142
-
143
- // 5️⃣ Verbindungs-Updates verarbeiten
144
- sock.ev.on('connection.update', (update) => {
145
- const { connection, lastDisconnect } = update
146
-
74
+
75
+ sock.ev.on('connection.update', ({ connection, lastDisconnect }) => {
147
76
  if (connection === 'close') {
148
- const shouldReconnect =
149
- (lastDisconnect?.error as Boom)?.output?.statusCode !== DisconnectReason.loggedOut
150
-
151
- console.log('🔌 Verbindung geschlossen, reconnect:', shouldReconnect)
77
+ const shouldReconnect =
78
+ (lastDisconnect?.error instanceof Boom
79
+ ? lastDisconnect.error.output?.statusCode
80
+ : undefined) !== DisconnectReason.loggedOut
81
+
152
82
  if (shouldReconnect) {
153
- startBot() // Automatisch neu verbinden
83
+ start().catch(console.error)
154
84
  }
155
- } else if (connection === 'open') {
156
- console.log('✅ Verbunden mit WhatsApp!')
85
+ return
157
86
  }
158
- })
159
-
160
- // 6️⃣ Nachrichten empfangen
161
- sock.ev.on('messages.upsert', async ({ messages }) => {
162
- const m = messages[0]
163
- if (!m.message) return
164
-
165
- const jid = m.key.remoteJid!
166
- const text = m.message.conversation || m.message.extendedTextMessage?.text || ''
167
-
168
- // Einfacher Echo-Bot
169
- if (text.toLowerCase() === 'hallo') {
170
- await sock.sendMessage(jid, {
171
- text: '🌸 Hallo! Ich bin ein Neele-Bot! ✨'
172
- })
173
- }
174
- })
175
- }
176
-
177
- // Bot starten
178
- startBot().catch(console.error)
179
- ```
180
-
181
- ### 🎨 **Was passiert hier?**
182
-
183
- 1. **`useMultiFileAuthState`**: Speichert deine WhatsApp-Session, damit du nicht jedes Mal den QR-Code scannen musst
184
- 2. **`fetchLatestBaileysVersion`**: Holt die neueste WhatsApp-Version automatisch
185
- 3. **`makeWASocket`**: Erstellt die Verbindung zu WhatsApp
186
- 4. **`connection.update`**: Event für Verbindungsstatus (QR-Code, Verbindung, etc.)
187
- 5. **`messages.upsert`**: Event für neue Nachrichten
188
-
189
- ---
190
-
191
- ## ✨ Neue Features in Version 2.0.5
192
-
193
- ### 🆕 **Was ist neu?**
194
- **Kompatibel mit Baileys API 1.7.2** · **Update-Check von npm-Registry** (1× pro Prozess) · **Message ID & QR-Code unverändert**
195
-
196
- <div align="center">
197
-
198
- | 🎯 Feature | 📝 Beschreibung | 🚀 Status |
199
- |-----------|----------------|-----------|
200
- | **🔧 Build-Tools** | WAProto GenerateStatics & Fix-Imports Skripte | ✅ **Neu** |
201
- | **🧪 Engine-Check** | Node.js 20+ Prüfung für stabile Laufzeit | ✅ **Neu** |
202
- | **🔄 Upstream-Updates** | validate-connection, Defaults & Pairing aus Backup Baileys | ✅ |
203
- | **🔐 LID in Pairing** | Linked ID (lid) in configureSuccessfulPairing & me | ✅ |
204
- | **📤 historySyncConfig** | Vollständiges DeviceProps in generateRegistrationNode | ✅ |
205
- | **🌐 getWebInfo** | Desktop-Check für syncFullHistory (browser[1] === 'Desktop') | ✅ |
206
- | **⚙️ Defaults** | enableAutoSessionRecreation, enableRecentMessageCache, shouldSyncHistoryMessage | ✅ |
207
- | **🚀 Smart Message Queue** | Intelligente Queue mit Auto-Retry & Prioritäten | ✅ |
208
- | **🎨 QR-Anzeige** | Schöne QR-Code-Box · unverändert | ✅ |
209
- | **🎯 Message ID** | Message-ID-Generierung · unverändert | ✅ |
210
- | **📦 WhatsApp Version** | [2, 3000, 1032141294] · Basiert auf @whiskeysockets/baileys 7.0.0-rc.9 | ✅ |
211
-
212
- </div>
213
-
214
- ### 🔥 **Neue Funktionen**
215
-
216
- #### 🚀 **`createSmartMessageQueue()`** - Intelligente Nachrichten-Warteschlange ⭐ **NEU!**
217
-
218
- Die ultimative Lösung für zuverlässiges Nachrichtenversenden mit automatischen Retries, Prioritäten und Rate-Limiting!
219
-
220
- ```typescript
221
- import { createSmartMessageQueue } from '@neelegirl/baileys'
222
-
223
- // Queue erstellen
224
- const queue = createSmartMessageQueue(sock, {
225
- maxRetries: 3, // Max. 3 Retry-Versuche
226
- retryDelay: 1000, // 1 Sekunde Basis-Delay
227
- maxConcurrent: 5, // Max. 5 gleichzeitige Nachrichten
228
- onSuccess: (message) => {
229
- console.log('✅ Nachricht erfolgreich gesendet!')
230
- },
231
- onError: (message, error) => {
232
- console.error('❌ Nachricht fehlgeschlagen:', error)
233
- }
234
- })
235
-
236
- // Nachrichten zur Queue hinzufügen
237
- await queue.add({
238
- jid: '491234567890@s.whatsapp.net',
239
- message: { text: 'Wichtige Nachricht!' },
240
- priority: 'high' // 'low' | 'normal' | 'high'
241
- })
242
-
243
- // Queue-Statistiken abrufen
244
- const stats = queue.getStats()
245
- console.log(`Pending: ${stats.pending}, Processing: ${stats.processing}, Failed: ${stats.failed}`)
246
-
247
- // Queue pausieren/fortsetzen
248
- queue.pause() // Pausiert die Verarbeitung
249
- queue.resume() // Setzt die Verarbeitung fort
250
-
251
- // Queue leeren
252
- queue.clear()
253
- ```
254
-
255
- **Features der Smart Queue:**
256
- - ✅ **Automatische Retries** mit Exponential Backoff
257
- - ✅ **Prioritäts-System** (high > normal > low)
258
- - ✅ **Rate-Limiting** durch maxConcurrent
259
- - ✅ **Error-Handling** mit Callbacks
260
- - ✅ **Queue-Statistiken** für Monitoring
261
- - ✅ **Pause/Resume** für flexible Kontrolle
262
-
263
- #### 1. **`onWhatsApp()`** - Prüfe ob Nummer auf WhatsApp ist
264
-
265
- ```typescript
266
- const [result] = await sock.onWhatsApp('491234567890@s.whatsapp.net')
267
- if (result?.exists) {
268
- console.log(`✅ ${result.jid} ist auf WhatsApp!`)
269
- }
270
- ```
271
-
272
- #### 2. **`executeUSyncQuery()`** - USync-Queries ausführen
273
-
274
- ```typescript
275
- import { USyncQuery, USyncContactProtocol } from '@neelegirl/baileys'
276
-
277
- const query = new USyncQuery()
278
- .withContactProtocol()
279
- .withUser(new USyncUser().withPhone('+491234567890'))
280
-
281
- const result = await sock.executeUSyncQuery(query)
282
- console.log('Kontakt-Info:', result)
283
- ```
284
-
285
- #### 3. **`digestKeyBundle()`** - Key-Bundle validieren
286
-
287
- ```typescript
288
- try {
289
- await sock.digestKeyBundle()
290
- console.log('✅ Key-Bundle ist gültig')
291
- } catch (error) {
292
- console.log('⚠️ Key-Bundle ungültig, Pre-Keys werden hochgeladen')
293
- }
294
- ```
295
-
296
- #### 4. **`rotateSignedPreKey()`** - Signed Pre-Key rotieren
297
-
298
- ```typescript
299
- await sock.rotateSignedPreKey()
300
- console.log('✅ Signed Pre-Key wurde rotiert')
301
- ```
302
-
303
- ### 🔄 **Automatische Update-Prüfung**
304
-
305
- Bei jedem Start wird automatisch geprüft, ob eine neue Version verfügbar ist:
306
-
307
- ```
308
- ╔════════════════════════════════════════╗
309
- ║ 🔔 NEUES UPDATE VERFÜGBAR! 🔔 ║
310
- ╠════════════════════════════════════════╣
311
- ║ @neelegirl/baileys ║
312
- ║ Aktuelle Version: 1.6.6 ║
313
- ║ Neue Version: 1.7.0 ║
314
- ║ ║
315
- ║ Bitte aktualisiere: ║
316
- ║ npm install @neelegirl/baileys@latest ║
317
- ╚════════════════════════════════════════╝
318
- ```
319
-
320
- ---
321
-
322
- ## 💡 Grundlegende Verwendung
323
-
324
- ### 📱 **Nachrichten senden**
325
-
326
- ```typescript
327
- // Text-Nachricht
328
- await sock.sendMessage(jid, { text: 'Hallo! 🌸' })
329
-
330
- // Mit Quote (Antwort)
331
- await sock.sendMessage(jid, {
332
- text: 'Das ist eine Antwort!'
333
- }, {
334
- quoted: originalMessage
335
- })
336
-
337
- // Mit Erwähnung
338
- await sock.sendMessage(jid, {
339
- text: '@491234567890 Hallo!',
340
- mentions: ['491234567890@s.whatsapp.net']
341
- })
342
- ```
343
-
344
- ### 🖼️ **Medien senden**
345
-
346
- ```typescript
347
- // Bild
348
- await sock.sendMessage(jid, {
349
- image: { url: './bild.jpg' },
350
- caption: 'Schönes Bild! 🌸'
351
- })
352
-
353
- // Video
354
- await sock.sendMessage(jid, {
355
- video: { url: './video.mp4' },
356
- caption: 'Mein Video! 🎬'
357
- })
358
-
359
- // GIF (als Video mit gifPlayback Flag)
360
- await sock.sendMessage(jid, {
361
- video: { url: './animation.mp4' },
362
- gifPlayback: true,
363
- caption: 'Kawaii GIF! ✨'
364
- })
365
-
366
- // Audio/Sprachnachricht
367
- await sock.sendMessage(jid, {
368
- audio: { url: './audio.ogg' },
369
- mimetype: 'audio/ogg',
370
- ptt: true // Push-to-Talk (Sprachnachricht)
371
- })
372
-
373
- // Dokument
374
- await sock.sendMessage(jid, {
375
- document: { url: './dokument.pdf' },
376
- mimetype: 'application/pdf',
377
- fileName: 'Wichtiges Dokument.pdf'
378
- })
379
-
380
- // Sticker
381
- await sock.sendMessage(jid, {
382
- sticker: { url: './sticker.webp' }
383
- })
384
- ```
385
-
386
- ### 👥 **Gruppen**
387
-
388
- ```typescript
389
- // Gruppe erstellen
390
- const group = await sock.groupCreate('Meine Gruppe', [
391
- '491234567890@s.whatsapp.net',
392
- '499876543210@s.whatsapp.net'
393
- ])
394
-
395
- // Teilnehmer hinzufügen
396
- await sock.groupParticipantsUpdate(
397
- group.id,
398
- ['491111111111@s.whatsapp.net'],
399
- 'add'
400
- )
401
-
402
- // Gruppenname ändern
403
- await sock.groupUpdateSubject(group.id, 'Neuer Gruppenname')
404
-
405
- // Gruppenbeschreibung ändern
406
- await sock.groupUpdateDescription(group.id, 'Neue Beschreibung')
407
-
408
- // Gruppen-Einstellungen ändern
409
- await sock.groupSettingUpdate(group.id, 'announcement') // Nur Admins können schreiben
410
- await sock.groupSettingUpdate(group.id, 'not_announcement') // Alle können schreiben
411
- ```
412
-
413
- ### 📊 **Umfragen (Polls)**
414
-
415
- ```typescript
416
- await sock.sendMessage(jid, {
417
- poll: {
418
- name: 'Was ist deine Lieblingsfarbe?',
419
- values: ['Rot', 'Blau', 'Grün', 'Gelb'],
420
- selectableCount: 1 // Anzahl der auswählbaren Optionen
421
- }
422
- })
423
- ```
424
-
425
- ### ⭐ **Reaktionen**
426
-
427
- ```typescript
428
- // Reaktion hinzufügen
429
- await sock.sendMessage(jid, {
430
- react: {
431
- text: '❤️',
432
- key: message.key
433
- }
434
- })
435
-
436
- // Reaktion entfernen (leerer String)
437
- await sock.sendMessage(jid, {
438
- react: {
439
- text: '',
440
- key: message.key
441
- }
442
- })
443
- ```
444
-
445
- ---
446
-
447
- ## 🎯 Erweiterte Features
448
-
449
- ### 🚀 **Smart Message Queue - Praktisches Beispiel**
450
-
451
- ```typescript
452
- import { createSmartMessageQueue } from '@neelegirl/baileys'
453
-
454
- // Queue für Bulk-Messaging erstellen
455
- const bulkQueue = createSmartMessageQueue(sock, {
456
- maxRetries: 5,
457
- retryDelay: 2000,
458
- maxConcurrent: 3, // Nicht zu viele gleichzeitig
459
- onSuccess: (msg) => {
460
- console.log(`✅ Gesendet an ${msg.jid}`)
461
- },
462
- onError: (msg, err) => {
463
- console.error(`❌ Fehler bei ${msg.jid}:`, err.message)
464
- }
465
- })
466
-
467
- // Viele Nachrichten hinzufügen
468
- const recipients = [
469
- '491234567890@s.whatsapp.net',
470
- '499876543210@s.whatsapp.net',
471
- '491111111111@s.whatsapp.net'
472
- ]
473
-
474
- for (const jid of recipients) {
475
- await bulkQueue.add({
476
- jid,
477
- message: { text: 'Wichtige Ankündigung! 📢' },
478
- priority: 'high'
479
- })
480
- }
481
87
 
482
- // Statistik prüfen
483
- setInterval(() => {
484
- const stats = bulkQueue.getStats()
485
- console.log(`Queue: ${stats.pending} pending, ${stats.processing} processing, ${stats.failed} failed`)
486
- }, 5000)
487
- ```
488
-
489
- ### 💠 **LID-Kompatibilität (Linked ID)**
490
-
491
- LID sorgt dafür, dass Benutzer auch über geräteübergreifende IDs korrekt erkannt werden:
492
-
493
- ```typescript
494
- import { jidDecode, jidEncode, isLidUser } from '@neelegirl/baileys'
495
-
496
- // Prüfe ob es eine LID ist
497
- if (isLidUser(someJid)) {
498
- console.log('Das ist eine LID!')
499
- }
500
-
501
- // JID dekodieren
502
- const decoded = jidDecode('491234567890@s.whatsapp.net')
503
- console.log(decoded) // { user: '491234567890', server: 's.whatsapp.net' }
504
-
505
- // JID encodieren
506
- const encoded = jidEncode('491234567890', 's.whatsapp.net')
507
- console.log(encoded) // '491234567890@s.whatsapp.net'
508
- ```
509
-
510
- ### 🔐 **Sichere Sender-ID-Extraktion**
511
-
512
- ```typescript
513
- import { jidDecode } from '@neelegirl/baileys'
514
-
515
- function getSenderId(message: any) {
516
- const participant = message?.key?.participant || message?.participant
517
- const lid = participant || message?.key?.remoteJid
518
-
519
- if (lid) {
520
- const decoded = jidDecode(lid)
521
- return decoded?.user
522
- ? `${decoded.user}@${decoded.server}`
523
- : lid
524
- }
525
-
526
- return 'unknown'
527
- }
528
-
529
- sock.ev.on('messages.upsert', ({ messages }) => {
530
- const sender = getSenderId(messages[0])
531
- console.log('Nachricht von:', sender)
532
- })
533
- ```
534
-
535
- ### 📥 **Medien herunterladen**
536
-
537
- ```typescript
538
- import { downloadMediaMessage } from '@neelegirl/baileys'
539
- import { writeFile } from 'fs/promises'
540
-
541
- sock.ev.on('messages.upsert', async ({ messages }) => {
542
- const m = messages[0]
543
-
544
- if (m.message?.imageMessage) {
545
- // Medien als Buffer herunterladen
546
- const buffer = await downloadMediaMessage(
547
- m,
548
- 'buffer',
549
- {},
550
- { logger: sock.logger }
551
- )
552
-
553
- // Speichern
554
- await writeFile('./downloaded-image.jpg', buffer)
555
- console.log('✅ Bild gespeichert!')
556
- }
557
- })
558
- ```
559
-
560
- ### 🔄 **Nachrichten bearbeiten**
561
-
562
- ```typescript
563
- // Nachricht bearbeiten
564
- const sentMessage = await sock.sendMessage(jid, { text: 'Ursprünglicher Text' })
565
-
566
- // Später bearbeiten
567
- await sock.sendMessage(jid, {
568
- text: 'Bearbeiteter Text',
569
- edit: sentMessage.key
570
- })
571
- ```
572
-
573
- ### 🗑️ **Nachrichten löschen**
574
-
575
- ```typescript
576
- // Für alle löschen
577
- await sock.sendMessage(jid, { delete: message.key })
578
-
579
- // Nur für mich löschen (via chatModify)
580
- await sock.chatModify({
581
- clear: {
582
- messages: [{
583
- id: message.key.id,
584
- fromMe: true,
585
- timestamp: message.messageTimestamp
586
- }]
587
- }
588
- }, jid)
589
- ```
590
-
591
- ### 📌 **Nachrichten anpinnen**
592
-
593
- ```typescript
594
- // Nachricht anpinnen (24 Stunden)
595
- await sock.sendMessage(jid, {
596
- pin: {
597
- type: 1, // 0 = entfernen, 1 = anpinnen
598
- time: 86400, // Sekunden (24h)
599
- key: message.key
600
- }
601
- })
602
- ```
603
-
604
- ### 📍 **Standort senden**
605
-
606
- ```typescript
607
- await sock.sendMessage(jid, {
608
- location: {
609
- degreesLatitude: 52.520008,
610
- degreesLongitude: 13.404954
611
- }
612
- })
613
- ```
614
-
615
- ### 📇 **Kontakt teilen**
616
-
617
- ```typescript
618
- const vcard = `BEGIN:VCARD
619
- VERSION:3.0
620
- FN:Max Mustermann
621
- TEL;type=CELL;type=VOICE;waid=491234567890:+49 123 4567890
622
- END:VCARD`
623
-
624
- await sock.sendMessage(jid, {
625
- contacts: {
626
- displayName: 'Max Mustermann',
627
- contacts: [{ vcard }]
628
- }
629
- })
630
- ```
631
-
632
- ### 🔄 **Nachrichten weiterleiten**
633
-
634
- ```typescript
635
- await sock.sendMessage(jid, {
636
- forward: originalMessage
637
- })
638
- ```
639
-
640
- ---
641
-
642
- ## 📚 Dokumentation
643
-
644
- ### 🎧 **Events (Event-Handler)**
645
-
646
- ```typescript
647
- // Verbindungs-Updates
648
- sock.ev.on('connection.update', (update) => {
649
- if (update.qr) {
650
- console.log('📱 QR-Code:', update.qr)
651
- }
652
- if (update.connection === 'open') {
653
- console.log('✅ Verbunden!')
654
- }
655
- })
656
-
657
- // Neue Nachrichten
658
- sock.ev.on('messages.upsert', ({ messages, type }) => {
659
- console.log('📥 Neue Nachricht:', messages[0])
660
- })
661
-
662
- // Nachrichten-Updates (z.B. gelesen, gelöscht)
663
- sock.ev.on('messages.update', (updates) => {
664
- updates.forEach(({ key, update }) => {
665
- if (update.status) {
666
- console.log('📊 Status Update:', update.status)
88
+ if (connection === 'open') {
89
+ console.log('WhatsApp Web connection opened')
667
90
  }
668
91
  })
669
- })
670
-
671
- // Credentials-Update (wichtig für Session-Speicherung!)
672
- sock.ev.on('creds.update', saveCreds)
673
-
674
- // Kontakte-Update
675
- sock.ev.on('contacts.update', (updates) => {
676
- updates.forEach(update => {
677
- console.log('👤 Kontakt-Update:', update)
678
- })
679
- })
680
-
681
- // Gruppen-Updates
682
- sock.ev.on('groups.update', (updates) => {
683
- updates.forEach(update => {
684
- console.log('👥 Gruppen-Update:', update)
685
- })
686
- })
687
-
688
- // Presence-Update (online, offline, typing)
689
- sock.ev.on('presence.update', ({ id, presences }) => {
690
- console.log('🟢 Presence:', id, presences)
691
- })
692
- ```
693
-
694
- ### 🔧 **Socket-Konfiguration**
695
-
696
- ```typescript
697
- const sock = makeWASocket({
698
- // Auth-State (wichtig!)
699
- auth: state,
700
-
701
- // WhatsApp-Version (automatisch oder manuell)
702
- version: [2, 3000, 1032141294],
703
-
704
- // Browser-Info
705
- browser: ['Mein Bot', 'Chrome', '1.0.0'],
706
- // Oder vordefinierte Browser:
707
- // browser: Browsers.macOS('Desktop')
708
- // browser: Browsers.ubuntu('Server')
709
- // browser: Browsers.iOS('Mobile')
710
-
711
- // QR-Code im Terminal anzeigen
712
- printQRInTerminal: true,
713
-
714
- // Online beim Verbinden markieren
715
- markOnlineOnConnect: true,
716
-
717
- // Vollständige Historie synchronisieren
718
- syncFullHistory: false,
719
-
720
- // Logger (optional)
721
- logger: pino({ level: 'silent' }),
722
-
723
- // Message-Store (für Retry & Poll-Votes)
724
- getMessage: async (key) => {
725
- // Hole Nachricht aus deinem Store
726
- return await yourMessageStore.get(key)
727
- },
728
-
729
- // Group-Metadata-Cache (empfohlen!)
730
- cachedGroupMetadata: async (jid) => {
731
- // Hole aus Cache
732
- return await groupCache.get(jid)
733
- },
734
-
735
- // Custom Upload Hosts
736
- customUploadHosts: [],
737
-
738
- // Retry-Konfiguration
739
- maxMsgRetryCount: 5,
740
- retryRequestDelayMs: 250,
741
-
742
- // Query-Timeout
743
- defaultQueryTimeoutMs: 60000,
744
-
745
- // QR-Timeout
746
- qrTimeout: 60000
747
- })
748
- ```
749
-
750
- ### 💾 **Session-Speicherung**
751
-
752
- ```typescript
753
- import { useMultiFileAuthState, BufferJSON } from '@neelegirl/baileys'
754
- import { readFileSync, writeFileSync } from 'fs'
755
-
756
- // Option 1: Multi-File (einfach, empfohlen für Entwicklung)
757
- const { state, saveCreds } = await useMultiFileAuthState('./auth_info')
758
-
759
- // Option 2: Single-File (für Produktion)
760
- import { useSingleFileAuthState } from '@neelegirl/baileys'
761
-
762
- const { state, saveCreds } = await useSingleFileAuthState('./auth.json')
763
-
764
- // Option 3: Custom (für Datenbanken)
765
- const authFile = './auth.json'
766
-
767
- const { state, saveCreds } = {
768
- state: {
769
- creds: JSON.parse(
770
- readFileSync(authFile, { encoding: 'utf-8' }),
771
- BufferJSON.reviver
772
- ),
773
- keys: {
774
- get: async (type, ids) => {
775
- // Hole Keys aus deiner DB
776
- },
777
- set: async (data) => {
778
- // Speichere Keys in deiner DB
779
- }
780
- }
781
- },
782
- saveCreds: async () => {
783
- const creds = state.creds
784
- writeFileSync(authFile, JSON.stringify(creds, BufferJSON.replacer, 2))
785
- }
786
92
  }
787
- ```
788
-
789
- ### 🗄️ **Message Store (für Retry & Poll-Votes)**
790
93
 
791
- ```typescript
792
- import { makeInMemoryStore } from '@neelegirl/baileys'
793
-
794
- // In-Memory Store (für Entwicklung)
795
- const store = makeInMemoryStore({ logger: pino().child({ level: 'silent' }) })
796
-
797
- // Aus Datei laden
798
- store.readFromFile('./baileys_store.json')
799
-
800
- // Socket binden
801
- store.bind(sock.ev)
802
-
803
- // Alle 10 Sekunden speichern
804
- setInterval(() => {
805
- store.writeToFile('./baileys_store.json')
806
- }, 10_000)
807
-
808
- // In Socket-Config verwenden
809
- const sock = makeWASocket({
810
- getMessage: async (key) => {
811
- return store.loadMessage(key.remoteJid!, key.id!)
812
- }
813
- })
94
+ start().catch(console.error)
814
95
  ```
815
96
 
816
- ---
817
-
818
- ## ⚠️ Wichtige Hinweise
819
-
820
- ### 🚨 **Disclaimer**
821
-
822
- > ⚠️ **WICHTIG**: Dieses Projekt steht in **keiner offiziellen Verbindung** zu WhatsApp.
823
- >
824
- > - ✖️ **Kein Spam** oder Massennachrichten
825
- > - ✖️ **Kein Missbrauch** für unethische Zwecke
826
- > - ✖️ **Keine Stalkerware** oder automatisierte Überwachung
827
- > - ✔️ **Verantwortungsvoller Gebrauch** wird erwartet
828
- >
829
- > Die Entwickler:innen übernehmen **keine Verantwortung** für den Gebrauch.
830
-
831
- ### 🔒 **Sicherheit**
832
-
833
- - **Nie** deine Auth-Dateien öffentlich teilen
834
- - **Immer** `.gitignore` für Auth-Ordner verwenden
835
- - **Regelmäßig** Backups erstellen
836
- - **Sichere** Passwörter für deine Server verwenden
837
-
838
- ### 💡 **Best Practices**
839
-
840
- 1. **Session-Speicherung**: Immer `useMultiFileAuthState` oder ähnliches verwenden
841
- 2. **Error-Handling**: Immer try-catch für wichtige Operationen
842
- 3. **Rate-Limiting**: Nicht zu viele Nachrichten auf einmal senden (nutze Smart Queue!)
843
- 4. **Logging**: Logger für Debugging verwenden
844
- 5. **Updates**: Regelmäßig auf Updates prüfen
845
-
846
- ---
847
-
848
- ## 💬 Support & Community
849
-
850
- <div align="center">
851
-
852
- ### 🌸 **Made with Love by @neelegirl** 🌸
853
-
854
- [![GitHub](https://img.shields.io/badge/GitHub-@neelegirl-pink?style=for-the-badge&logo=github)](https://github.com/neelegirl)
855
- [![Email](https://img.shields.io/badge/Email-Support-pink?style=for-the-badge&logo=gmail)](mailto:neelehoven@gmail.com)
856
-
857
- **⭐ Wenn dir dieses Projekt gefällt, gib ihm ein Star auf GitHub! ⭐**
858
-
859
- </div>
860
-
861
- ---
862
-
863
- ## 📝 Changelog
864
-
865
- ### Version 2.0.5 (Aktuell) 🎉
866
-
867
- - 📖 **README Glow-Up** – Version 2.0.5, Badges & Changelog
868
- - 🧪 **Engine-Check** – Node.js 20+ Hinweis für stabile Laufzeit
869
- - 🧰 **WAProto Tools** – GenerateStatics & Fix-Imports Skripte ergänzt
870
- - 🔔 **Update-Check** – Liest Version von **npm-Registry** (registry.npmjs.org), nur 1× pro Prozess
871
- - ✨ Semver-Vergleich für „Update verfügbar“ nur bei wirklich neuerer Version
872
- - 🎨 **QR-Code** & **Message ID** – unverändert
873
- - 🔄 Kompatibel mit **Baileys API 1.7.2**
874
-
875
- ### Version 2.0.2
876
-
877
- - 📖 **README Glow-Up** – Version 2.0.2, Badges & Changelog
878
- - 🔔 **Update-Check** – Liest Version von **npm-Registry** (registry.npmjs.org), nur 1× pro Prozess
879
- - ✨ Semver-Vergleich für „Update verfügbar“ nur bei wirklich neuerer Version
880
- - 🎨 **QR-Code** & **Message ID** – unverändert
881
- - 🔄 Kompatibel mit **Baileys API 1.7.2**
882
-
883
- ### Version 2.0.1
884
-
885
- - 🔄 Upstream aus Backup Baileys · LID in Pairing · historySyncConfig · getWebInfo · Defaults
886
-
887
- ### Version 2.0.0
888
-
889
- - 🔄 Upstream aus Backup Baileys – validate-connection, Defaults & Pairing angeglichen
890
- - 🔐 LID in Pairing · 📤 historySyncConfig · 🌐 getWebInfo · ⚙️ Defaults
891
- - 🎨 QR-Code & Message ID unverändert · WhatsApp-Version [2, 3000, 1032141294]
892
-
893
- ### Version 1.1.2
97
+ ## Pairing And QR Notes
894
98
 
895
- - 📖 README Glow-Up, Baileys API 1.7.2 Badge
896
- - 🚀 Smart Message Queue, Auto-Update-Prüfung
897
- - 🎨 QR-Code-Anzeige · Message ID unverändert
99
+ - `printQRInTerminal: true` keeps the QR flow active
100
+ - `requestPairingCode(phoneNumber, customCode?)` is available on the socket
101
+ - This package keeps the existing Neelegirl QR and pairing behavior instead of replacing it with upstream packaging changes
898
102
 
899
- ### Version 1.7.1
103
+ ## Addressing And Device Notes
900
104
 
901
- - 📖 README Glow-Up, Smart Message Queue, Auto-Update-Check
902
- - 🎨 QR-Anzeige, Message ID System
105
+ The package keeps Neelegirl-specific message and device handling and now forwards the additional addressing fields more consistently:
903
106
 
904
- ### Version 1.7.0
107
+ - `key.remoteJid`
108
+ - `key.remoteJidAlt`
109
+ - `key.participant`
110
+ - `key.participantAlt`
111
+ - `key.addressingMode`
905
112
 
906
- - 🚀 **Smart Message Queue** eingeführt
907
- - ✨ Auto-Update-Check, QR-Anzeige, Message ID System
113
+ This is relevant for PN/LID mixed environments, Web-specific event handling and group/member tagging behavior.
908
114
 
909
- ### Version 1.6.6
115
+ ## Exports Available In This Package
910
116
 
911
- - **Automatische Update-Prüfung** hinzugefügt
912
- - 🎨 **Verbesserte QR-Code-Anzeige** mit Version-Info
913
- - 🔄 **WhatsApp-Version** aktualisiert auf [2, 3000, 1032141294]
914
- - 🚀 **Basiert auf** @whiskeysockets/baileys 7.0.0-rc.9
915
- - 🛠️ **Verbesserte Socket-Stabilität**
916
- - 🔐 **Verbesserte Pre-Key-Verwaltung**
117
+ - Root entry: `require('@neelegirl/baileys')`
118
+ - Compatibility root subpath: `require('@neelegirl/baileys/lib')`
119
+ - WAProto subpath: `require('@neelegirl/baileys/WAProto')`
917
120
 
918
- ### Version 1.6.5
121
+ Primary runtime exports include:
919
122
 
920
- - 🆕 Neue Funktionen: `onWhatsApp()`, `executeUSyncQuery()`
921
- - 🔐 `digestKeyBundle()` und `rotateSignedPreKey()` hinzugefügt
922
- - 💎 WAM Buffer Support
123
+ - `makeWASocket`
124
+ - `proto`
125
+ - `Browsers`
126
+ - `fetchLatestBaileysVersion`
127
+ - `fetchLatestWaWebVersion`
128
+ - `useMultiFileAuthState`
129
+ - `useSingleFileAuthState`
130
+ - `useMongoFileAuthState`
131
+ - `makeInMemoryStore`
132
+ - `makeCacheManagerStore`
923
133
 
924
- ---
134
+ ## Requirements
925
135
 
926
- <div align="center">
136
+ - Node.js `>=16.0.0`
137
+ - A WhatsApp account that is allowed to link a Web client
927
138
 
928
- ### *Möge dein Bot so bezaubernd sein wie ein Anime-Mädchen mit Glitzeraugen* ✨
139
+ ## Limits And Honesty Notes
929
140
 
930
- **🌸 Stay kawaii, stay connected! 🌸**
141
+ - This package does not claim to be a 1:1 upstream 7.x layout
142
+ - This package does not bundle every new upstream internal module
143
+ - This README does not claim unsupported helpers such as `createSmartMessageQueue()`
931
144
 
932
- [⬆️ Nach oben](#-neelegirlbaileys)
145
+ ## License
933
146
 
934
- </div>
147
+ MIT