@neelegirl/baileys 1.6.7 β 1.6.9
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 +109 -703
- package/lib/Defaults/baileys-version.json +1 -1
- package/lib/Socket/socket.js +0 -120
- package/lib/Utils/check-npm-version.js +1 -15
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -1,786 +1,192 @@
|
|
|
1
|
-
<div align="center">
|
|
2
|
-
|
|
3
|
-
# πΈ @neelegirl/baileys πΈ
|
|
4
|
-
|
|
5
|
-
### β¨ *Eine charmante WhatsApp Web API fΓΌr TypeScript/JavaScript* β¨
|
|
6
|
-
### π *Von einer Prinzessin fΓΌr alle, die Magie lieben* π
|
|
7
|
-
|
|
8
|
-
[](https://github.com/neelegirl/baileys)
|
|
9
|
-
[](https://www.npmjs.com/package/@neelegirl/baileys)
|
|
10
|
-
[](https://www.npmjs.com/package/@neelegirl/baileys)
|
|
11
|
-
[](LICENSE)
|
|
12
|
-
[](https://github.com/neelegirl/baileys)
|
|
13
|
-
|
|
14
|
-
---
|
|
15
1
|
|
|
16
2
|
<p align="center">
|
|
17
3
|
<img src="https://files.catbox.moe/ru1msl.jpeg" width="720" alt="Neele Baileys Header" />
|
|
18
4
|
</p>
|
|
19
5
|
|
|
20
|
-
|
|
6
|
+
<h1 align="center">πΈ Willkommen bei <code>@neelegirl/baileys</code> πΈ</h1>
|
|
7
|
+
<p align="center"><i>Eine charmante WhatsApp Web API fΓΌr TypeScript/JavaScript β von einer Prinzessin fΓΌr alle, die Magie lieben.</i></p>
|
|
8
|
+
<p align="center"><strong>β¨ Version 1.6.4 β Aktualisiert mit neuesten Features von @whiskeysockets/baileys β¨</strong></p>
|
|
21
9
|
|
|
22
|
-
|
|
10
|
+
<div align="center">
|
|
11
|
+
|
|
12
|
+
<img src="https://img.shields.io/github/downloads/neelegirl/baileys/total?label=Downloads%20%E2%AD%90" />
|
|
13
|
+
<img src="https://img.shields.io/npm/dw/%40neelegirl%2Fbaileys?label=npm%20Downloads&color=pink" />
|
|
14
|
+
<img src="https://img.shields.io/github/languages/code-size/neelegirl/baileys" />
|
|
15
|
+
<img src="https://img.shields.io/github/license/neelegirl/baileys?color=lightpink" />
|
|
16
|
+
<img src="https://img.shields.io/github/stars/neelegirl/baileys?label=GitHub%20Stars%20%E2%9D%A4" />
|
|
17
|
+
<img src="https://img.shields.io/github/forks/neelegirl/baileys?label=Forks%20%E2%9C%A8" />
|
|
18
|
+
<img src="https://img.shields.io/badge/MultiβDevice-Ready-ff6fb5" />
|
|
19
|
+
<img src="https://img.shields.io/badge/LIDβKompatibel-Yes-ff9ecf" />
|
|
23
20
|
|
|
24
21
|
</div>
|
|
25
22
|
|
|
26
23
|
---
|
|
27
24
|
|
|
28
|
-
##
|
|
25
|
+
## β Wichtige Hinweise
|
|
29
26
|
|
|
30
|
-
|
|
31
|
-
- [π Installation](#-installation)
|
|
32
|
-
- [π Quickstart Guide](#-quickstart-guide)
|
|
33
|
-
- [β¨ Neue Features in Version 1.6.6](#-neue-features-in-version-166)
|
|
34
|
-
- [π‘ Grundlegende Verwendung](#-grundlegende-verwendung)
|
|
35
|
-
- [π― Erweiterte Features](#-erweiterte-features)
|
|
36
|
-
- [π Dokumentation](#-dokumentation)
|
|
37
|
-
- [β οΈ Wichtige Hinweise](#οΈ-wichtige-hinweise)
|
|
38
|
-
- [π¬ Support & Community](#-support--community)
|
|
27
|
+
Dieses Projekt ist eine zarte Eigenkreation von **@neelegirl** β es steht in keiner offiziellen Verbindung zu WhatsApp.
|
|
39
28
|
|
|
40
|
-
|
|
29
|
+
> β οΈ Bitte benutze es **verantwortungsvoll**:
|
|
30
|
+
> βοΈ Kein Spam, keine Massennachrichten
|
|
31
|
+
> βοΈ Kein Missbrauch fΓΌr unethische Zwecke
|
|
32
|
+
> βοΈ Stattdessen: Lasst uns **respektvoll Magie verbreiten**! π
|
|
41
33
|
|
|
42
|
-
|
|
34
|
+
π¬ **Haftungshinweis:**
|
|
35
|
+
Die Entwickler:innen ΓΌbernehmen keine Verantwortung fΓΌr den Gebrauch. Lies die [MIT-Lizenz](https://github.com/neelegirl/baileys/blob/main/LICENSE) fΓΌr Details.
|
|
43
36
|
|
|
44
|
-
|
|
37
|
+
---
|
|
45
38
|
|
|
46
|
-
|
|
39
|
+
## π§ββοΈ Warum <code>@neelegirl/baileys</code>?
|
|
47
40
|
|
|
48
|
-
|
|
41
|
+
β¨ **Zauberhafte Vorteile**
|
|
49
42
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
| π― **Message ID** | Verbesserte Message-ID-Generierung | β
|
|
|
43
|
+
- π§ Ultra leichtgewichtig β keine Browser- oder Selenium-Monster nΓΆtig!
|
|
44
|
+
- π Moderne **WebSocket-Magie** direkt, schnell & stabil
|
|
45
|
+
- π VollstΓ€ndige **MultiβDevice** UnterstΓΌtzung
|
|
46
|
+
- π§© **LIDβkompatibel** (Linked ID Erkennung & Nutzung)
|
|
47
|
+
- π§· Saubere TypeScriptβTypen, DX zum Verlieben
|
|
48
|
+
- π **Version 1.6.4** β Aktualisiert mit neuesten Features von @whiskeysockets/baileys
|
|
49
|
+
- β¨ **Neue Features**: `onWhatsApp()`, `executeUSyncQuery()`, `digestKeyBundle()`, `rotateSignedPreKey()`
|
|
50
|
+
- π **Verbesserte Pre-Key-Verwaltung** mit automatischer Validierung
|
|
51
|
+
- π **WAM Buffer Support** fΓΌr erweiterte Statistiken
|
|
60
52
|
|
|
61
53
|
---
|
|
62
54
|
|
|
63
|
-
##
|
|
55
|
+
## π Installation (Dein magisches Setup)
|
|
64
56
|
|
|
65
|
-
|
|
57
|
+
Mit **yarn**:
|
|
66
58
|
|
|
67
59
|
```bash
|
|
68
|
-
|
|
60
|
+
yarn add @neelegirl/baileys
|
|
69
61
|
```
|
|
70
62
|
|
|
71
|
-
|
|
63
|
+
Mit **npm**:
|
|
72
64
|
|
|
73
65
|
```bash
|
|
74
|
-
|
|
66
|
+
npm i @neelegirl/baileys
|
|
75
67
|
```
|
|
76
68
|
|
|
77
|
-
|
|
69
|
+
Bleedingβedge direkt von GitHub:
|
|
78
70
|
|
|
79
71
|
```bash
|
|
80
|
-
npm install github:neelegirl/baileys
|
|
81
|
-
# oder
|
|
82
72
|
yarn add github:neelegirl/baileys
|
|
73
|
+
# oder
|
|
74
|
+
npm i github:neelegirl/baileys
|
|
83
75
|
```
|
|
84
76
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
// ES Modules
|
|
89
|
-
import makeWASocket, {
|
|
90
|
-
useMultiFileAuthState,
|
|
91
|
-
DisconnectReason,
|
|
92
|
-
fetchLatestBaileysVersion,
|
|
93
|
-
Browsers
|
|
94
|
-
} from '@neelegirl/baileys'
|
|
95
|
-
|
|
96
|
-
// CommonJS
|
|
97
|
-
const { default: makeWASocket, useMultiFileAuthState } = require('@neelegirl/baileys')
|
|
77
|
+
**Import** β ganz leicht:
|
|
78
|
+
```ts
|
|
79
|
+
import makeWASocket, { useMultiFileAuthState, Browsers } from '@neelegirl/baileys'
|
|
98
80
|
```
|
|
99
81
|
|
|
100
82
|
---
|
|
101
83
|
|
|
102
|
-
##
|
|
84
|
+
## πΈ Quickstart (inkl. LIDβMagic)
|
|
103
85
|
|
|
104
|
-
|
|
86
|
+
Ein kurzer, sΓΌΓer Start in deinen Zauberwald β mit QRβLogin, AutoβReconnect und LIDβHandling. π«
|
|
105
87
|
|
|
106
|
-
```
|
|
88
|
+
```ts
|
|
107
89
|
import makeWASocket, {
|
|
108
90
|
useMultiFileAuthState,
|
|
109
91
|
DisconnectReason,
|
|
110
|
-
fetchLatestBaileysVersion
|
|
92
|
+
fetchLatestBaileysVersion,
|
|
93
|
+
jidDecode
|
|
111
94
|
} from '@neelegirl/baileys'
|
|
112
|
-
import { Boom } from '@hapi/boom'
|
|
113
95
|
|
|
114
|
-
async function
|
|
115
|
-
|
|
116
|
-
const { state, saveCreds } = await useMultiFileAuthState('./auth_info')
|
|
117
|
-
|
|
118
|
-
// 2οΈβ£ Neueste WhatsApp-Version holen
|
|
96
|
+
async function start() {
|
|
97
|
+
const { state, saveCreds } = await useMultiFileAuthState('./auth_neele')
|
|
119
98
|
const { version } = await fetchLatestBaileysVersion()
|
|
120
|
-
|
|
121
|
-
// 3οΈβ£ Socket erstellen
|
|
99
|
+
|
|
122
100
|
const sock = makeWASocket({
|
|
123
101
|
version,
|
|
124
102
|
auth: state,
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
// 4οΈβ£ Credentials speichern wenn sie sich Γ€ndern
|
|
130
|
-
sock.ev.on('creds.update', saveCreds)
|
|
131
|
-
|
|
132
|
-
// 5οΈβ£ Verbindungs-Updates verarbeiten
|
|
133
|
-
sock.ev.on('connection.update', (update) => {
|
|
134
|
-
const { connection, lastDisconnect } = update
|
|
135
|
-
|
|
136
|
-
if (connection === 'close') {
|
|
137
|
-
const shouldReconnect =
|
|
138
|
-
(lastDisconnect?.error as Boom)?.output?.statusCode !== DisconnectReason.loggedOut
|
|
139
|
-
|
|
140
|
-
console.log('π Verbindung geschlossen, reconnect:', shouldReconnect)
|
|
141
|
-
if (shouldReconnect) {
|
|
142
|
-
startBot() // Automatisch neu verbinden
|
|
143
|
-
}
|
|
144
|
-
} else if (connection === 'open') {
|
|
145
|
-
console.log('β
Verbunden mit WhatsApp!')
|
|
146
|
-
}
|
|
147
|
-
})
|
|
148
|
-
|
|
149
|
-
// 6οΈβ£ Nachrichten empfangen
|
|
150
|
-
sock.ev.on('messages.upsert', async ({ messages }) => {
|
|
151
|
-
const m = messages[0]
|
|
152
|
-
if (!m.message) return
|
|
153
|
-
|
|
154
|
-
const jid = m.key.remoteJid!
|
|
155
|
-
const text = m.message.conversation || m.message.extendedTextMessage?.text || ''
|
|
156
|
-
|
|
157
|
-
// Einfacher Echo-Bot
|
|
158
|
-
if (text.toLowerCase() === 'hallo') {
|
|
159
|
-
await sock.sendMessage(jid, {
|
|
160
|
-
text: 'πΈ Hallo! Ich bin ein Neele-Bot! β¨'
|
|
161
|
-
})
|
|
162
|
-
}
|
|
103
|
+
browser: ['Neele Princess','Safari','1.0'],
|
|
104
|
+
printQRInTerminal: true, // FΓΌr Desktop-Dev β mobil gern mit UI scannen
|
|
105
|
+
markOnlineOnConnect: false,
|
|
106
|
+
syncFullHistory: false
|
|
163
107
|
})
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// Bot starten
|
|
167
|
-
startBot().catch(console.error)
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### π¨ **Was passiert hier?**
|
|
171
|
-
|
|
172
|
-
1. **`useMultiFileAuthState`**: Speichert deine WhatsApp-Session, damit du nicht jedes Mal den QR-Code scannen musst
|
|
173
|
-
2. **`fetchLatestBaileysVersion`**: Holt die neueste WhatsApp-Version automatisch
|
|
174
|
-
3. **`makeWASocket`**: Erstellt die Verbindung zu WhatsApp
|
|
175
|
-
4. **`connection.update`**: Event fΓΌr Verbindungsstatus (QR-Code, Verbindung, etc.)
|
|
176
|
-
5. **`messages.upsert`**: Event fΓΌr neue Nachrichten
|
|
177
|
-
|
|
178
|
-
---
|
|
179
|
-
|
|
180
|
-
## β¨ Neue Features in Version 1.6.6
|
|
181
|
-
|
|
182
|
-
### π **Was ist neu?**
|
|
183
|
-
|
|
184
|
-
<div align="center">
|
|
185
|
-
|
|
186
|
-
| π― Feature | π Beschreibung | π Status |
|
|
187
|
-
|-----------|----------------|-----------|
|
|
188
|
-
| **Auto-Update-Check** | Automatische PrΓΌfung auf neue Versionen | β
Neu |
|
|
189
|
-
| **Verbesserte QR-Anzeige** | SchΓΆne QR-Code-Box mit Version-Info | β
Neu |
|
|
190
|
-
| **Message ID System** | Verbesserte Message-ID-Generierung | β
Neu |
|
|
191
|
-
| **WhatsApp Version** | Aktualisiert auf [2, 3000, 1032141294] | β
Neu |
|
|
192
|
-
| **Pre-Key Management** | Automatische Validierung & Rotation | β
Verbessert |
|
|
193
|
-
| **Socket-StabilitΓ€t** | Verbesserte VerbindungsstabilitΓ€t | β
Verbessert |
|
|
194
|
-
|
|
195
|
-
</div>
|
|
196
|
-
|
|
197
|
-
### π₯ **Neue Funktionen**
|
|
198
|
-
|
|
199
|
-
#### 1. **`onWhatsApp()`** - PrΓΌfe ob Nummer auf WhatsApp ist
|
|
200
108
|
|
|
201
|
-
|
|
202
|
-
const
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
#### 2. **`executeUSyncQuery()`** - USync-Queries ausfΓΌhren
|
|
209
|
-
|
|
210
|
-
```typescript
|
|
211
|
-
import { USyncQuery, USyncContactProtocol } from '@neelegirl/baileys'
|
|
212
|
-
|
|
213
|
-
const query = new USyncQuery()
|
|
214
|
-
.withContactProtocol()
|
|
215
|
-
.withUser(new USyncUser().withPhone('+491234567890'))
|
|
216
|
-
|
|
217
|
-
const result = await sock.executeUSyncQuery(query)
|
|
218
|
-
console.log('Kontakt-Info:', result)
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
#### 3. **`digestKeyBundle()`** - Key-Bundle validieren
|
|
222
|
-
|
|
223
|
-
```typescript
|
|
224
|
-
try {
|
|
225
|
-
await sock.digestKeyBundle()
|
|
226
|
-
console.log('β
Key-Bundle ist gΓΌltig')
|
|
227
|
-
} catch (error) {
|
|
228
|
-
console.log('β οΈ Key-Bundle ungΓΌltig, Pre-Keys werden hochgeladen')
|
|
229
|
-
}
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
#### 4. **`rotateSignedPreKey()`** - Signed Pre-Key rotieren
|
|
233
|
-
|
|
234
|
-
```typescript
|
|
235
|
-
await sock.rotateSignedPreKey()
|
|
236
|
-
console.log('β
Signed Pre-Key wurde rotiert')
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
### π **Automatische Update-PrΓΌfung**
|
|
240
|
-
|
|
241
|
-
Bei jedem Start wird automatisch geprΓΌft, ob eine neue Version verfΓΌgbar ist:
|
|
242
|
-
|
|
243
|
-
```
|
|
244
|
-
ββββββββββββββββββββββββββββββββββββββββββ
|
|
245
|
-
β π NEUES UPDATE VERFΓGBAR! π β
|
|
246
|
-
β βββββββββββββββββββββββββββββββββββββββββ£
|
|
247
|
-
β @neelegirl/baileys β
|
|
248
|
-
β Aktuelle Version: 1.6.6 β
|
|
249
|
-
β Neue Version: 1.6.7 β
|
|
250
|
-
β β
|
|
251
|
-
β Bitte aktualisiere: β
|
|
252
|
-
β npm install @neelegirl/baileys@latest β
|
|
253
|
-
ββββββββββββββββββββββββββββββββββββββββββ
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
---
|
|
257
|
-
|
|
258
|
-
## π‘ Grundlegende Verwendung
|
|
259
|
-
|
|
260
|
-
### π± **Nachrichten senden**
|
|
261
|
-
|
|
262
|
-
```typescript
|
|
263
|
-
// Text-Nachricht
|
|
264
|
-
await sock.sendMessage(jid, { text: 'Hallo! πΈ' })
|
|
265
|
-
|
|
266
|
-
// Mit Quote (Antwort)
|
|
267
|
-
await sock.sendMessage(jid, {
|
|
268
|
-
text: 'Das ist eine Antwort!'
|
|
269
|
-
}, {
|
|
270
|
-
quoted: originalMessage
|
|
271
|
-
})
|
|
272
|
-
|
|
273
|
-
// Mit ErwΓ€hnung
|
|
274
|
-
await sock.sendMessage(jid, {
|
|
275
|
-
text: '@491234567890 Hallo!',
|
|
276
|
-
mentions: ['491234567890@s.whatsapp.net']
|
|
277
|
-
})
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
### πΌοΈ **Medien senden**
|
|
281
|
-
|
|
282
|
-
```typescript
|
|
283
|
-
// Bild
|
|
284
|
-
await sock.sendMessage(jid, {
|
|
285
|
-
image: { url: './bild.jpg' },
|
|
286
|
-
caption: 'SchΓΆnes Bild! πΈ'
|
|
287
|
-
})
|
|
288
|
-
|
|
289
|
-
// Video
|
|
290
|
-
await sock.sendMessage(jid, {
|
|
291
|
-
video: { url: './video.mp4' },
|
|
292
|
-
caption: 'Mein Video! π¬'
|
|
293
|
-
})
|
|
294
|
-
|
|
295
|
-
// GIF (als Video mit gifPlayback Flag)
|
|
296
|
-
await sock.sendMessage(jid, {
|
|
297
|
-
video: { url: './animation.mp4' },
|
|
298
|
-
gifPlayback: true,
|
|
299
|
-
caption: 'Kawaii GIF! β¨'
|
|
300
|
-
})
|
|
301
|
-
|
|
302
|
-
// Audio/Sprachnachricht
|
|
303
|
-
await sock.sendMessage(jid, {
|
|
304
|
-
audio: { url: './audio.ogg' },
|
|
305
|
-
mimetype: 'audio/ogg',
|
|
306
|
-
ptt: true // Push-to-Talk (Sprachnachricht)
|
|
307
|
-
})
|
|
308
|
-
|
|
309
|
-
// Dokument
|
|
310
|
-
await sock.sendMessage(jid, {
|
|
311
|
-
document: { url: './dokument.pdf' },
|
|
312
|
-
mimetype: 'application/pdf',
|
|
313
|
-
fileName: 'Wichtiges Dokument.pdf'
|
|
314
|
-
})
|
|
315
|
-
|
|
316
|
-
// Sticker
|
|
317
|
-
await sock.sendMessage(jid, {
|
|
318
|
-
sticker: { url: './sticker.webp' }
|
|
319
|
-
})
|
|
320
|
-
```
|
|
321
|
-
|
|
322
|
-
### π₯ **Gruppen**
|
|
323
|
-
|
|
324
|
-
```typescript
|
|
325
|
-
// Gruppe erstellen
|
|
326
|
-
const group = await sock.groupCreate('Meine Gruppe', [
|
|
327
|
-
'491234567890@s.whatsapp.net',
|
|
328
|
-
'499876543210@s.whatsapp.net'
|
|
329
|
-
])
|
|
330
|
-
|
|
331
|
-
// Teilnehmer hinzufΓΌgen
|
|
332
|
-
await sock.groupParticipantsUpdate(
|
|
333
|
-
group.id,
|
|
334
|
-
['491111111111@s.whatsapp.net'],
|
|
335
|
-
'add'
|
|
336
|
-
)
|
|
337
|
-
|
|
338
|
-
// Gruppenname Γ€ndern
|
|
339
|
-
await sock.groupUpdateSubject(group.id, 'Neuer Gruppenname')
|
|
340
|
-
|
|
341
|
-
// Gruppenbeschreibung Γ€ndern
|
|
342
|
-
await sock.groupUpdateDescription(group.id, 'Neue Beschreibung')
|
|
343
|
-
|
|
344
|
-
// Gruppen-Einstellungen Γ€ndern
|
|
345
|
-
await sock.groupSettingUpdate(group.id, 'announcement') // Nur Admins kΓΆnnen schreiben
|
|
346
|
-
await sock.groupSettingUpdate(group.id, 'not_announcement') // Alle kΓΆnnen schreiben
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
### π **Umfragen (Polls)**
|
|
350
|
-
|
|
351
|
-
```typescript
|
|
352
|
-
await sock.sendMessage(jid, {
|
|
353
|
-
poll: {
|
|
354
|
-
name: 'Was ist deine Lieblingsfarbe?',
|
|
355
|
-
values: ['Rot', 'Blau', 'GrΓΌn', 'Gelb'],
|
|
356
|
-
selectableCount: 1 // Anzahl der auswΓ€hlbaren Optionen
|
|
357
|
-
}
|
|
358
|
-
})
|
|
359
|
-
```
|
|
360
|
-
|
|
361
|
-
### β **Reaktionen**
|
|
362
|
-
|
|
363
|
-
```typescript
|
|
364
|
-
// Reaktion hinzufΓΌgen
|
|
365
|
-
await sock.sendMessage(jid, {
|
|
366
|
-
react: {
|
|
367
|
-
text: 'β€οΈ',
|
|
368
|
-
key: message.key
|
|
109
|
+
// π LID-kompatibel: extrahiere sichere Sender-IDs
|
|
110
|
+
const getSenderId = (m: any) => {
|
|
111
|
+
const participant = m?.key?.participant || m?.participant || m?.sender
|
|
112
|
+
const lid = participant || m?.key?.remoteJid
|
|
113
|
+
// Dekodiere LID/JID hΓΌbsch & sicher
|
|
114
|
+
const decoded = lid ? jidDecode(lid) : null
|
|
115
|
+
return decoded?.user ? `${decoded.user}@${decoded.server}` : (lid || 'anon')
|
|
369
116
|
}
|
|
370
|
-
})
|
|
371
|
-
|
|
372
|
-
// Reaktion entfernen (leerer String)
|
|
373
|
-
await sock.sendMessage(jid, {
|
|
374
|
-
react: {
|
|
375
|
-
text: '',
|
|
376
|
-
key: message.key
|
|
377
|
-
}
|
|
378
|
-
})
|
|
379
|
-
```
|
|
380
|
-
|
|
381
|
-
---
|
|
382
117
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
LID sorgt dafΓΌr, dass Benutzer auch ΓΌber gerΓ€teΓΌbergreifende IDs korrekt erkannt werden:
|
|
388
|
-
|
|
389
|
-
```typescript
|
|
390
|
-
import { jidDecode, jidEncode, isLidUser } from '@neelegirl/baileys'
|
|
391
|
-
|
|
392
|
-
// PrΓΌfe ob es eine LID ist
|
|
393
|
-
if (isLidUser(someJid)) {
|
|
394
|
-
console.log('Das ist eine LID!')
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
// JID dekodieren
|
|
398
|
-
const decoded = jidDecode('491234567890@s.whatsapp.net')
|
|
399
|
-
console.log(decoded) // { user: '491234567890', server: 's.whatsapp.net' }
|
|
400
|
-
|
|
401
|
-
// JID encodieren
|
|
402
|
-
const encoded = jidEncode('491234567890', 's.whatsapp.net')
|
|
403
|
-
console.log(encoded) // '491234567890@s.whatsapp.net'
|
|
404
|
-
```
|
|
405
|
-
|
|
406
|
-
### π **Sichere Sender-ID-Extraktion**
|
|
407
|
-
|
|
408
|
-
```typescript
|
|
409
|
-
import { jidDecode } from '@neelegirl/baileys'
|
|
410
|
-
|
|
411
|
-
function getSenderId(message: any) {
|
|
412
|
-
const participant = message?.key?.participant || message?.participant
|
|
413
|
-
const lid = participant || message?.key?.remoteJid
|
|
414
|
-
|
|
415
|
-
if (lid) {
|
|
416
|
-
const decoded = jidDecode(lid)
|
|
417
|
-
return decoded?.user
|
|
418
|
-
? `${decoded.user}@${decoded.server}`
|
|
419
|
-
: lid
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
return 'unknown'
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
sock.ev.on('messages.upsert', ({ messages }) => {
|
|
426
|
-
const sender = getSenderId(messages[0])
|
|
427
|
-
console.log('Nachricht von:', sender)
|
|
428
|
-
})
|
|
429
|
-
```
|
|
430
|
-
|
|
431
|
-
### π₯ **Medien herunterladen**
|
|
432
|
-
|
|
433
|
-
```typescript
|
|
434
|
-
import { downloadMediaMessage } from '@neelegirl/baileys'
|
|
435
|
-
import { writeFile } from 'fs/promises'
|
|
436
|
-
|
|
437
|
-
sock.ev.on('messages.upsert', async ({ messages }) => {
|
|
438
|
-
const m = messages[0]
|
|
439
|
-
|
|
440
|
-
if (m.message?.imageMessage) {
|
|
441
|
-
// Medien als Buffer herunterladen
|
|
442
|
-
const buffer = await downloadMediaMessage(
|
|
443
|
-
m,
|
|
444
|
-
'buffer',
|
|
445
|
-
{},
|
|
446
|
-
{ logger: sock.logger }
|
|
447
|
-
)
|
|
448
|
-
|
|
449
|
-
// Speichern
|
|
450
|
-
await writeFile('./downloaded-image.jpg', buffer)
|
|
451
|
-
console.log('β
Bild gespeichert!')
|
|
452
|
-
}
|
|
453
|
-
})
|
|
454
|
-
```
|
|
455
|
-
|
|
456
|
-
### π **Nachrichten bearbeiten**
|
|
457
|
-
|
|
458
|
-
```typescript
|
|
459
|
-
// Nachricht bearbeiten
|
|
460
|
-
const sentMessage = await sock.sendMessage(jid, { text: 'UrsprΓΌnglicher Text' })
|
|
461
|
-
|
|
462
|
-
// SpΓ€ter bearbeiten
|
|
463
|
-
await sock.sendMessage(jid, {
|
|
464
|
-
text: 'Bearbeiteter Text',
|
|
465
|
-
edit: sentMessage.key
|
|
466
|
-
})
|
|
467
|
-
```
|
|
468
|
-
|
|
469
|
-
### ποΈ **Nachrichten lΓΆschen**
|
|
470
|
-
|
|
471
|
-
```typescript
|
|
472
|
-
// FΓΌr alle lΓΆschen
|
|
473
|
-
await sock.sendMessage(jid, { delete: message.key })
|
|
474
|
-
|
|
475
|
-
// Nur fΓΌr mich lΓΆschen (via chatModify)
|
|
476
|
-
await sock.chatModify({
|
|
477
|
-
clear: {
|
|
478
|
-
messages: [{
|
|
479
|
-
id: message.key.id,
|
|
480
|
-
fromMe: true,
|
|
481
|
-
timestamp: message.messageTimestamp
|
|
482
|
-
}]
|
|
483
|
-
}
|
|
484
|
-
}, jid)
|
|
485
|
-
```
|
|
486
|
-
|
|
487
|
-
### π **Nachrichten anpinnen**
|
|
488
|
-
|
|
489
|
-
```typescript
|
|
490
|
-
// Nachricht anpinnen (24 Stunden)
|
|
491
|
-
await sock.sendMessage(jid, {
|
|
492
|
-
pin: {
|
|
493
|
-
type: 1, // 0 = entfernen, 1 = anpinnen
|
|
494
|
-
time: 86400, // Sekunden (24h)
|
|
495
|
-
key: message.key
|
|
496
|
-
}
|
|
497
|
-
})
|
|
498
|
-
```
|
|
499
|
-
|
|
500
|
-
### π **Standort senden**
|
|
501
|
-
|
|
502
|
-
```typescript
|
|
503
|
-
await sock.sendMessage(jid, {
|
|
504
|
-
location: {
|
|
505
|
-
degreesLatitude: 52.520008,
|
|
506
|
-
degreesLongitude: 13.404954
|
|
507
|
-
}
|
|
508
|
-
})
|
|
509
|
-
```
|
|
510
|
-
|
|
511
|
-
### π **Kontakt teilen**
|
|
512
|
-
|
|
513
|
-
```typescript
|
|
514
|
-
const vcard = `BEGIN:VCARD
|
|
515
|
-
VERSION:3.0
|
|
516
|
-
FN:Max Mustermann
|
|
517
|
-
TEL;type=CELL;type=VOICE;waid=491234567890:+49 123 4567890
|
|
518
|
-
END:VCARD`
|
|
519
|
-
|
|
520
|
-
await sock.sendMessage(jid, {
|
|
521
|
-
contacts: {
|
|
522
|
-
displayName: 'Max Mustermann',
|
|
523
|
-
contacts: [{ vcard }]
|
|
524
|
-
}
|
|
525
|
-
})
|
|
526
|
-
```
|
|
527
|
-
|
|
528
|
-
### π **Nachrichten weiterleiten**
|
|
529
|
-
|
|
530
|
-
```typescript
|
|
531
|
-
await sock.sendMessage(jid, {
|
|
532
|
-
forward: originalMessage
|
|
533
|
-
})
|
|
534
|
-
```
|
|
535
|
-
|
|
536
|
-
---
|
|
118
|
+
sock.ev.on('messages.upsert', async ({ messages }) => {
|
|
119
|
+
const m = messages[0]
|
|
120
|
+
if (!m?.message) return
|
|
537
121
|
|
|
538
|
-
|
|
122
|
+
const from = m.key.remoteJid
|
|
123
|
+
const sender = getSenderId(m)
|
|
539
124
|
|
|
540
|
-
|
|
125
|
+
// π Kleiner Ping-Pong-Zauber
|
|
126
|
+
const body = m.message?.conversation
|
|
127
|
+
|| m.message?.extendedTextMessage?.text
|
|
128
|
+
|| m.message?.imageMessage?.caption
|
|
129
|
+
|| ''
|
|
541
130
|
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
sock.ev.on('connection.update', (update) => {
|
|
545
|
-
if (update.qr) {
|
|
546
|
-
console.log('π± QR-Code:', update.qr)
|
|
547
|
-
}
|
|
548
|
-
if (update.connection === 'open') {
|
|
549
|
-
console.log('β
Verbunden!')
|
|
550
|
-
}
|
|
551
|
-
})
|
|
552
|
-
|
|
553
|
-
// Neue Nachrichten
|
|
554
|
-
sock.ev.on('messages.upsert', ({ messages, type }) => {
|
|
555
|
-
console.log('π₯ Neue Nachricht:', messages[0])
|
|
556
|
-
})
|
|
557
|
-
|
|
558
|
-
// Nachrichten-Updates (z.B. gelesen, gelΓΆscht)
|
|
559
|
-
sock.ev.on('messages.update', (updates) => {
|
|
560
|
-
updates.forEach(({ key, update }) => {
|
|
561
|
-
if (update.status) {
|
|
562
|
-
console.log('π Status Update:', update.status)
|
|
131
|
+
if (/^!ping$/i.test(body)) {
|
|
132
|
+
await sock.sendMessage(from, { text: 'π Pong! NeeleβMagic online β¨' }, { quoted: m })
|
|
563
133
|
}
|
|
564
|
-
})
|
|
565
|
-
})
|
|
566
|
-
|
|
567
|
-
// Credentials-Update (wichtig fΓΌr Session-Speicherung!)
|
|
568
|
-
sock.ev.on('creds.update', saveCreds)
|
|
569
|
-
|
|
570
|
-
// Kontakte-Update
|
|
571
|
-
sock.ev.on('contacts.update', (updates) => {
|
|
572
|
-
updates.forEach(update => {
|
|
573
|
-
console.log('π€ Kontakt-Update:', update)
|
|
574
|
-
})
|
|
575
|
-
})
|
|
576
134
|
|
|
577
|
-
//
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
135
|
+
// β¨ Sticker-Schnellzauber (antworte auf ein Bild)
|
|
136
|
+
if (/^!sticker$/i.test(body) && m.message?.imageMessage) {
|
|
137
|
+
const stream = await sock.downloadMediaMessage(m)
|
|
138
|
+
await sock.sendMessage(from, { sticker: stream }, { quoted: m })
|
|
139
|
+
}
|
|
581
140
|
})
|
|
582
|
-
})
|
|
583
|
-
|
|
584
|
-
// Presence-Update (online, offline, typing)
|
|
585
|
-
sock.ev.on('presence.update', ({ id, presences }) => {
|
|
586
|
-
console.log('π’ Presence:', id, presences)
|
|
587
|
-
})
|
|
588
|
-
```
|
|
589
|
-
|
|
590
|
-
### π§ **Socket-Konfiguration**
|
|
591
|
-
|
|
592
|
-
```typescript
|
|
593
|
-
const sock = makeWASocket({
|
|
594
|
-
// Auth-State (wichtig!)
|
|
595
|
-
auth: state,
|
|
596
|
-
|
|
597
|
-
// WhatsApp-Version (automatisch oder manuell)
|
|
598
|
-
version: [2, 3000, 1032141294],
|
|
599
|
-
|
|
600
|
-
// Browser-Info
|
|
601
|
-
browser: ['Mein Bot', 'Chrome', '1.0.0'],
|
|
602
|
-
// Oder vordefinierte Browser:
|
|
603
|
-
// browser: Browsers.macOS('Desktop')
|
|
604
|
-
// browser: Browsers.ubuntu('Server')
|
|
605
|
-
// browser: Browsers.iOS('Mobile')
|
|
606
|
-
|
|
607
|
-
// QR-Code im Terminal anzeigen
|
|
608
|
-
printQRInTerminal: true,
|
|
609
|
-
|
|
610
|
-
// Online beim Verbinden markieren
|
|
611
|
-
markOnlineOnConnect: true,
|
|
612
|
-
|
|
613
|
-
// VollstΓ€ndige Historie synchronisieren
|
|
614
|
-
syncFullHistory: false,
|
|
615
|
-
|
|
616
|
-
// Logger (optional)
|
|
617
|
-
logger: pino({ level: 'silent' }),
|
|
618
|
-
|
|
619
|
-
// Message-Store (fΓΌr Retry & Poll-Votes)
|
|
620
|
-
getMessage: async (key) => {
|
|
621
|
-
// Hole Nachricht aus deinem Store
|
|
622
|
-
return await yourMessageStore.get(key)
|
|
623
|
-
},
|
|
624
|
-
|
|
625
|
-
// Group-Metadata-Cache (empfohlen!)
|
|
626
|
-
cachedGroupMetadata: async (jid) => {
|
|
627
|
-
// Hole aus Cache
|
|
628
|
-
return await groupCache.get(jid)
|
|
629
|
-
},
|
|
630
|
-
|
|
631
|
-
// Custom Upload Hosts
|
|
632
|
-
customUploadHosts: [],
|
|
633
|
-
|
|
634
|
-
// Retry-Konfiguration
|
|
635
|
-
maxMsgRetryCount: 5,
|
|
636
|
-
retryRequestDelayMs: 250,
|
|
637
|
-
|
|
638
|
-
// Query-Timeout
|
|
639
|
-
defaultQueryTimeoutMs: 60000,
|
|
640
|
-
|
|
641
|
-
// QR-Timeout
|
|
642
|
-
qrTimeout: 60000
|
|
643
|
-
})
|
|
644
|
-
```
|
|
645
|
-
|
|
646
|
-
### πΎ **Session-Speicherung**
|
|
647
141
|
|
|
648
|
-
|
|
649
|
-
import { useMultiFileAuthState, BufferJSON } from '@neelegirl/baileys'
|
|
650
|
-
import { readFileSync, writeFileSync } from 'fs'
|
|
651
|
-
|
|
652
|
-
// Option 1: Multi-File (einfach, empfohlen fΓΌr Entwicklung)
|
|
653
|
-
const { state, saveCreds } = await useMultiFileAuthState('./auth_info')
|
|
654
|
-
|
|
655
|
-
// Option 2: Single-File (fΓΌr Produktion)
|
|
656
|
-
import { useSingleFileAuthState } from '@neelegirl/baileys'
|
|
657
|
-
|
|
658
|
-
const { state, saveCreds } = await useSingleFileAuthState('./auth.json')
|
|
659
|
-
|
|
660
|
-
// Option 3: Custom (fΓΌr Datenbanken)
|
|
661
|
-
const authFile = './auth.json'
|
|
142
|
+
sock.ev.on('creds.update', saveCreds)
|
|
662
143
|
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
// Hole Keys aus deiner DB
|
|
672
|
-
},
|
|
673
|
-
set: async (data) => {
|
|
674
|
-
// Speichere Keys in deiner DB
|
|
675
|
-
}
|
|
144
|
+
sock.ev.on('connection.update', (u) => {
|
|
145
|
+
const { connection, lastDisconnect } = u
|
|
146
|
+
if (connection === 'close') {
|
|
147
|
+
const shouldReconnect =
|
|
148
|
+
(lastDisconnect?.error as any)?.output?.statusCode !== DisconnectReason.loggedOut
|
|
149
|
+
if (shouldReconnect) start()
|
|
150
|
+
} else if (connection === 'open') {
|
|
151
|
+
console.log('πΈ Verbunden β bereit zum Glitzern!')
|
|
676
152
|
}
|
|
677
|
-
}
|
|
678
|
-
saveCreds: async () => {
|
|
679
|
-
const creds = state.creds
|
|
680
|
-
writeFileSync(authFile, JSON.stringify(creds, BufferJSON.replacer, 2))
|
|
681
|
-
}
|
|
153
|
+
})
|
|
682
154
|
}
|
|
683
|
-
```
|
|
684
|
-
|
|
685
|
-
### ποΈ **Message Store (fΓΌr Retry & Poll-Votes)**
|
|
686
|
-
|
|
687
|
-
```typescript
|
|
688
|
-
import { makeInMemoryStore } from '@neelegirl/baileys'
|
|
689
155
|
|
|
690
|
-
|
|
691
|
-
const store = makeInMemoryStore({ logger: pino().child({ level: 'silent' }) })
|
|
692
|
-
|
|
693
|
-
// Aus Datei laden
|
|
694
|
-
store.readFromFile('./baileys_store.json')
|
|
695
|
-
|
|
696
|
-
// Socket binden
|
|
697
|
-
store.bind(sock.ev)
|
|
698
|
-
|
|
699
|
-
// Alle 10 Sekunden speichern
|
|
700
|
-
setInterval(() => {
|
|
701
|
-
store.writeToFile('./baileys_store.json')
|
|
702
|
-
}, 10_000)
|
|
703
|
-
|
|
704
|
-
// In Socket-Config verwenden
|
|
705
|
-
const sock = makeWASocket({
|
|
706
|
-
getMessage: async (key) => {
|
|
707
|
-
return store.loadMessage(key.remoteJid!, key.id!)
|
|
708
|
-
}
|
|
709
|
-
})
|
|
156
|
+
start().catch(console.error)
|
|
710
157
|
```
|
|
711
158
|
|
|
712
159
|
---
|
|
713
160
|
|
|
714
|
-
##
|
|
715
|
-
|
|
716
|
-
### π¨ **Disclaimer**
|
|
161
|
+
## π§ HΓ€ufige Rezepte
|
|
717
162
|
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
> - βοΈ **Verantwortungsvoller Gebrauch** wird erwartet
|
|
724
|
-
>
|
|
725
|
-
> Die Entwickler:innen ΓΌbernehmen **keine Verantwortung** fΓΌr den Gebrauch.
|
|
726
|
-
|
|
727
|
-
### π **Sicherheit**
|
|
728
|
-
|
|
729
|
-
- **Nie** deine Auth-Dateien ΓΆffentlich teilen
|
|
730
|
-
- **Immer** `.gitignore` fΓΌr Auth-Ordner verwenden
|
|
731
|
-
- **RegelmΓ€Γig** Backups erstellen
|
|
732
|
-
- **Sichere** PasswΓΆrter fΓΌr deine Server verwenden
|
|
733
|
-
|
|
734
|
-
### π‘ **Best Practices**
|
|
735
|
-
|
|
736
|
-
1. **Session-Speicherung**: Immer `useMultiFileAuthState` oder Γ€hnliches verwenden
|
|
737
|
-
2. **Error-Handling**: Immer try-catch fΓΌr wichtige Operationen
|
|
738
|
-
3. **Rate-Limiting**: Nicht zu viele Nachrichten auf einmal senden
|
|
739
|
-
4. **Logging**: Logger fΓΌr Debugging verwenden
|
|
740
|
-
5. **Updates**: RegelmΓ€Γig auf Updates prΓΌfen
|
|
163
|
+
- π **Nachrichten**: `sock.sendMessage(jid, { text: 'Hello πΈ' })`
|
|
164
|
+
- πΈ **Medien**: `sock.sendMessage(jid, { image: fs.readFileSync('pic.jpg'), caption: 'Kawaii!' })`
|
|
165
|
+
- π **Sticker**: Antwort auf `imageMessage` β `{ sticker: stream }`
|
|
166
|
+
- π₯ **Gruppen**: `sock.groupCreate('Neele Club', [user1, user2])`
|
|
167
|
+
- π§² **LIDβID**: mit `jidDecode()` schΓΆn & sicher nutzen
|
|
741
168
|
|
|
742
169
|
---
|
|
743
170
|
|
|
744
|
-
##
|
|
745
|
-
|
|
746
|
-
<div align="center">
|
|
171
|
+
## π LIDβKompatibilitΓ€t (Kurz erklΓ€rt)
|
|
747
172
|
|
|
748
|
-
|
|
173
|
+
**LID (Linked ID)** sorgt dafΓΌr, dass Benutzer:innen auch ΓΌber gerΓ€teΓΌbergreifende IDs korrekt erkannt werden.
|
|
174
|
+
Dieses Paket ist **voll LIDβkompatibel**:
|
|
175
|
+
- Extraktion & Normalisierung von AbsenderβIDs
|
|
176
|
+
- Sicheres Antworten, auch wenn die Gegenstelle GerΓ€te wechselt
|
|
177
|
+
- Sanfte Fallbacks, wenn keine LID vorliegt
|
|
749
178
|
|
|
750
|
-
|
|
751
|
-
[](mailto:neelehoven@gmail.com)
|
|
752
|
-
|
|
753
|
-
**β Wenn dir dieses Projekt gefΓ€llt, gib ihm ein Star auf GitHub! β**
|
|
754
|
-
|
|
755
|
-
</div>
|
|
179
|
+
> Ergebnis: stabilere Replies, weniger RΓ€tselraten, mehr Glitzer β¨
|
|
756
180
|
|
|
757
181
|
---
|
|
758
182
|
|
|
759
|
-
##
|
|
183
|
+
## β€οΈ Credits & Danksagung
|
|
760
184
|
|
|
761
|
-
|
|
185
|
+
Mit Liebe, Glitzer und rosa Codezeilen von **@neelegirl** erschaffen.
|
|
186
|
+
Wenn dir dieses Projekt gefΓ€llt:
|
|
762
187
|
|
|
763
|
-
|
|
764
|
-
- π¨ **Verbesserte QR-Code-Anzeige** mit Version-Info
|
|
765
|
-
- π **WhatsApp-Version** aktualisiert auf [2, 3000, 1032141294]
|
|
766
|
-
- π **Basiert auf** @whiskeysockets/baileys 7.0.0-rc.9
|
|
767
|
-
- π οΈ **Verbesserte Socket-StabilitΓ€t**
|
|
768
|
-
- π **Verbesserte Pre-Key-Verwaltung**
|
|
769
|
-
|
|
770
|
-
### Version 1.6.5
|
|
771
|
-
|
|
772
|
-
- π Neue Funktionen: `onWhatsApp()`, `executeUSyncQuery()`
|
|
773
|
-
- π `digestKeyBundle()` und `rotateSignedPreKey()` hinzugefΓΌgt
|
|
774
|
-
- π WAM Buffer Support
|
|
188
|
+
> β Gib ihm ein βοΈ auf GitHub β das wΓ€r sooo sΓΌΓ! π
|
|
775
189
|
|
|
776
190
|
---
|
|
777
191
|
|
|
778
|
-
<
|
|
779
|
-
|
|
780
|
-
### β¨ *MΓΆge dein Bot so bezaubernd sein wie ein Anime-MΓ€dchen mit Glitzeraugen* β¨
|
|
781
|
-
|
|
782
|
-
**πΈ Stay kawaii, stay connected! πΈ**
|
|
783
|
-
|
|
784
|
-
[β¬οΈ Nach oben](#-neelegirlbaileys)
|
|
785
|
-
|
|
786
|
-
</div>
|
|
192
|
+
<p align="center"><i>β¨ MΓΆge dein Bot so bezaubernd sein wie ein AnimeβMΓ€dchen mit Glitzeraugen β¨</i></p>
|
package/lib/Socket/socket.js
CHANGED
|
@@ -18,120 +18,6 @@ const Client_1 = require("./Client")
|
|
|
18
18
|
const package_json_1 = require("../../package.json")
|
|
19
19
|
const CURRENT_VERSION = package_json_1.version
|
|
20
20
|
|
|
21
|
-
// Versions-Info auslesen
|
|
22
|
-
const createRequire = require('module').createRequire || require('module').createRequire;
|
|
23
|
-
const _require = createRequire(require.main ? require.main.filename : __filename);
|
|
24
|
-
const _path = require('path');
|
|
25
|
-
const _fs = require('fs');
|
|
26
|
-
const _dir = _path.dirname(__filename);
|
|
27
|
-
|
|
28
|
-
function readVersion(pkgPath) {
|
|
29
|
-
try {
|
|
30
|
-
if (pkgPath && _fs.existsSync(pkgPath)) {
|
|
31
|
-
const p = _require(pkgPath);
|
|
32
|
-
return p && typeof p.version === 'string' ? p.version : null;
|
|
33
|
-
}
|
|
34
|
-
} catch (_) {}
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
const cwd = typeof process !== 'undefined' && process.cwd ? process.cwd() : '';
|
|
39
|
-
const rootBaileys = cwd ? _path.join(cwd, 'node_modules', '@neelegirl', 'baileys', 'package.json') : '';
|
|
40
|
-
const rootWaApi = cwd ? _path.join(cwd, 'node_modules', '@neelegirl', 'wa-api', 'package.json') : '';
|
|
41
|
-
const BAILEYS_VERSION = readVersion(rootBaileys) || CURRENT_VERSION || '1.6.0';
|
|
42
|
-
const WA_API_VERSION = readVersion(rootWaApi) || '1.0.0';
|
|
43
|
-
|
|
44
|
-
// Globale Flag um sicherzustellen, dass Version-Anzeige nur einmal pro Prozess angezeigt wird
|
|
45
|
-
if (typeof global !== 'undefined' && !global.__baileysVersionShown) {
|
|
46
|
-
global.__baileysVersionShown = false;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// Version-Anzeige-Funktion
|
|
50
|
-
const showVersionInfo = () => {
|
|
51
|
-
if (typeof global !== 'undefined' && global.__baileysVersionShown) {
|
|
52
|
-
return; // Bereits angezeigt
|
|
53
|
-
}
|
|
54
|
-
const boxWidth = 64;
|
|
55
|
-
const centerText = (text, width) => {
|
|
56
|
-
const pad = Math.floor((width - text.length - 2) / 2);
|
|
57
|
-
const extra = (width - text.length - 2) % 2;
|
|
58
|
-
return 'β' + ' '.repeat(pad) + text + ' '.repeat(pad + extra) + 'β';
|
|
59
|
-
};
|
|
60
|
-
console.log('\n');
|
|
61
|
-
console.log('β' + 'β'.repeat(boxWidth) + 'β');
|
|
62
|
-
console.log(centerText(`πΈ OFFIZIELLE @NEELEGIRL/BAILEYS VERSION ${BAILEYS_VERSION} πΈ`, boxWidth));
|
|
63
|
-
console.log(centerText(`π¦ @neelegirl/wa-api v${WA_API_VERSION} π¦`, boxWidth));
|
|
64
|
-
console.log('β ' + 'β'.repeat(boxWidth) + 'β£');
|
|
65
|
-
console.log(centerText('β¨ Powered By @neelegirl/baileys Β· wa-api π¦ β¨', boxWidth));
|
|
66
|
-
console.log('β' + 'β'.repeat(boxWidth) + 'β');
|
|
67
|
-
console.log('');
|
|
68
|
-
if (typeof global !== 'undefined') {
|
|
69
|
-
global.__baileysVersionShown = true;
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
// Versionsvergleichsfunktion
|
|
74
|
-
const compareVersions = (v1, v2) => {
|
|
75
|
-
const parts1 = v1.split('.').map(Number);
|
|
76
|
-
const parts2 = v2.split('.').map(Number);
|
|
77
|
-
for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {
|
|
78
|
-
const part1 = parts1[i] || 0;
|
|
79
|
-
const part2 = parts2[i] || 0;
|
|
80
|
-
if (part1 > part2) return 1;
|
|
81
|
-
if (part1 < part2) return -1;
|
|
82
|
-
}
|
|
83
|
-
return 0;
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
// Update-PrΓΌfungs-Funktion fΓΌr beide Pakete
|
|
87
|
-
const checkForUpdates = () => {
|
|
88
|
-
// PrΓΌfe nur einmal pro Prozess
|
|
89
|
-
if (typeof global !== 'undefined' && global.__updateCheckDone) {
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
const https = require('https');
|
|
94
|
-
|
|
95
|
-
// PrΓΌfe @neelegirl/baileys
|
|
96
|
-
Utils_1.checkNpmVersion('@neelegirl/baileys', BAILEYS_VERSION).then((versionInfo) => {
|
|
97
|
-
if (versionInfo && versionInfo.hasUpdate) {
|
|
98
|
-
const updateMessage = `\nββββββββββββββββββββββββββββββββββββββββββ\nβ π NEUES UPDATE VERFΓGBAR! π β\nβ βββββββββββββββββββββββββββββββββββββββββ£\nβ @neelegirl/baileys β\nβ Aktuelle Version: ${versionInfo.current.padEnd(20)} β\nβ Neue Version: ${versionInfo.latest.padEnd(20)} β\nβ β\nβ Bitte aktualisiere: β\nβ npm install @neelegirl/baileys@latest β\nββββββββββββββββββββββββββββββββββββββββββ\n`;
|
|
99
|
-
console.log(updateMessage);
|
|
100
|
-
}
|
|
101
|
-
}).catch(() => {
|
|
102
|
-
// Silently fail
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
// PrΓΌfe @neelegirl/wa-api
|
|
106
|
-
const waApiUrl = `https://registry.npmjs.org/@neelegirl/wa-api/latest`;
|
|
107
|
-
https.get(waApiUrl, { timeout: 5000 }, (res) => {
|
|
108
|
-
let data = '';
|
|
109
|
-
res.on('data', (chunk) => {
|
|
110
|
-
data += chunk;
|
|
111
|
-
});
|
|
112
|
-
res.on('end', () => {
|
|
113
|
-
try {
|
|
114
|
-
const packageInfo = JSON.parse(data);
|
|
115
|
-
const latestVersion = packageInfo.version;
|
|
116
|
-
if (latestVersion && compareVersions(latestVersion, WA_API_VERSION) > 0) {
|
|
117
|
-
const updateMessage = `\nββββββββββββββββββββββββββββββββββββββββββ\nβ π NEUES UPDATE VERFΓGBAR! π β\nβ βββββββββββββββββββββββββββββββββββββββββ£\nβ @neelegirl/wa-api β\nβ Aktuelle Version: ${WA_API_VERSION.padEnd(20)} β\nβ Neue Version: ${latestVersion.padEnd(20)} β\nβ β\nβ Bitte aktualisiere: β\nβ npm install @neelegirl/wa-api@latest β\nββββββββββββββββββββββββββββββββββββββββββ\n`;
|
|
118
|
-
console.log(updateMessage);
|
|
119
|
-
}
|
|
120
|
-
} catch (error) {
|
|
121
|
-
// Silently fail
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
}).on('error', () => {
|
|
125
|
-
// Silently fail
|
|
126
|
-
}).on('timeout', () => {
|
|
127
|
-
// Silently fail
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
if (typeof global !== 'undefined') {
|
|
131
|
-
global.__updateCheckDone = true;
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
|
|
135
21
|
/**
|
|
136
22
|
* Connects to WA servers and performs:
|
|
137
23
|
* - simple queries (no retry mechanism, wait for connection establishment)
|
|
@@ -139,10 +25,6 @@ const checkForUpdates = () => {
|
|
|
139
25
|
* - query phone connection
|
|
140
26
|
*/
|
|
141
27
|
const makeSocket = (config) => {
|
|
142
|
-
// Zeige Version-Info beim Start einmal an
|
|
143
|
-
showVersionInfo();
|
|
144
|
-
// PrΓΌfe auf Updates bei beiden Paketen
|
|
145
|
-
checkForUpdates();
|
|
146
28
|
const { waWebSocketUrl, connectTimeoutMs, logger, keepAliveIntervalMs, browser, auth: authState, printQRInTerminal, defaultQueryTimeoutMs, transactionOpts, qrTimeout, makeSignalRepository } = config
|
|
147
29
|
|
|
148
30
|
const url = typeof waWebSocketUrl === 'string' ? new url_1.URL(waWebSocketUrl) : waWebSocketUrl
|
|
@@ -911,8 +793,6 @@ const makeSocket = (config) => {
|
|
|
911
793
|
clearTimeout(qrTimer) // will never happen in all likelyhood -- but just in case WA sends success on first try
|
|
912
794
|
ev.emit('creds.update', { me: { ...authState.creds.me, lid: node.attrs.lid } })
|
|
913
795
|
ev.emit('connection.update', { connection: 'open' })
|
|
914
|
-
// Zeige Version-Info auch bei erfolgreicher Verbindung (falls noch nicht angezeigt)
|
|
915
|
-
showVersionInfo()
|
|
916
796
|
if (node.attrs.lid && authState.creds.me?.id) {
|
|
917
797
|
const myLID = node.attrs.lid
|
|
918
798
|
process.nextTick(async () => {
|
|
@@ -8,19 +8,6 @@ const https_1 = require("https");
|
|
|
8
8
|
* @param currentVersion - The current version installed
|
|
9
9
|
* @returns Promise with version info or null if check fails
|
|
10
10
|
*/
|
|
11
|
-
// Version-Vergleichsfunktion (semantische Versionierung)
|
|
12
|
-
const compareVersions = (v1, v2) => {
|
|
13
|
-
const parts1 = v1.split('.').map(Number);
|
|
14
|
-
const parts2 = v2.split('.').map(Number);
|
|
15
|
-
for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {
|
|
16
|
-
const part1 = parts1[i] || 0;
|
|
17
|
-
const part2 = parts2[i] || 0;
|
|
18
|
-
if (part1 > part2) return 1;
|
|
19
|
-
if (part1 < part2) return -1;
|
|
20
|
-
}
|
|
21
|
-
return 0;
|
|
22
|
-
};
|
|
23
|
-
|
|
24
11
|
const checkNpmVersion = (packageName, currentVersion) => {
|
|
25
12
|
return new Promise((resolve) => {
|
|
26
13
|
const url = `https://registry.npmjs.org/${packageName}/latest`;
|
|
@@ -33,8 +20,7 @@ const checkNpmVersion = (packageName, currentVersion) => {
|
|
|
33
20
|
try {
|
|
34
21
|
const packageInfo = JSON.parse(data);
|
|
35
22
|
const latestVersion = packageInfo.version;
|
|
36
|
-
|
|
37
|
-
if (latestVersion && compareVersions(latestVersion, currentVersion) > 0) {
|
|
23
|
+
if (latestVersion && latestVersion !== currentVersion) {
|
|
38
24
|
resolve({
|
|
39
25
|
current: currentVersion,
|
|
40
26
|
latest: latestVersion,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@neelegirl/baileys",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.9",
|
|
4
4
|
"description": "WhatsApp API for wa-api, a multi-device WhatsApp Web API client",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"whatsapp",
|
|
@@ -41,9 +41,11 @@
|
|
|
41
41
|
"cache-manager": "4.0.1",
|
|
42
42
|
"futoin-hkdf": "^1.5.1",
|
|
43
43
|
"libphonenumber-js": "^1.10.20",
|
|
44
|
-
"
|
|
44
|
+
"lru-cache": "^11.1.0",
|
|
45
|
+
"music-metadata": "^11.7.0",
|
|
45
46
|
"node-cache": "^5.1.2",
|
|
46
|
-
"
|
|
47
|
+
"p-queue": "^9.0.0",
|
|
48
|
+
"pino": "^9.6.0",
|
|
47
49
|
"protobufjs": "^7.2.4",
|
|
48
50
|
"uuid": "^9.0.0",
|
|
49
51
|
"ws": "^8.13.0"
|