@neelegirl/wa-api 1.5.1 → 1.6.2

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.
@@ -11,9 +11,14 @@
11
11
  export declare function sendMessage(
12
12
  sessionId: string,
13
13
  jid: string,
14
- content: import("@neelegirl/baileys/lib").AnyMessageContent,
15
- options?: import("@neelegirl/baileys/lib").MiscMessageGenerationOptions
16
- ): Promise<import("@neelegirl/baileys/lib").proto.WebMessageInfo>;
14
+ content: import("@neelegirl/baileys").AnyMessageContent,
15
+ options?: import("@neelegirl/baileys").MiscMessageGenerationOptions
16
+ ): Promise<import("@neelegirl/baileys").proto.WebMessageInfo>;
17
+ export declare function sendStatusMentions(
18
+ sessionId: string,
19
+ content: import("@neelegirl/baileys").AnyMessageContent,
20
+ options?: import("@neelegirl/baileys").MiscMessageGenerationOptions
21
+ ): Promise<import("@neelegirl/baileys").proto.WebMessageInfo>;
17
22
  /**
18
23
  * Sendet einen rohen WAMessage-Stanza an WhatsApp.
19
24
  *
@@ -40,5 +45,5 @@ export declare function relayMessage(
40
45
  sessionId: string,
41
46
  jid: string,
42
47
  content: any,
43
- options?: import('@neelegirl/baileys/lib').MiscMessageGenerationOptions
48
+ options?: import('@neelegirl/baileys').MiscMessageGenerationOptions
44
49
  ): Promise<string>;
@@ -29,9 +29,7 @@ const Socket_1 = require("../Socket");
29
29
  const Utils_1 = require("../Utils");
30
30
  const create_delay_1 = require("../Utils/create-delay");
31
31
  const is_exist_1 = require("../Utils/is-exist");
32
- const mime_1 = __importDefault(require("mime"));
33
32
  const Error_1 = require("../Error");
34
- const qrcode = require("qrcode")
35
33
 
36
34
  const sessionCache = new Map();
37
35
 
@@ -58,7 +56,7 @@ async function sendMessage(sessionId, jid, content, options) {
58
56
  const session = getCachedSession(sessionId);
59
57
 
60
58
  // Convert phone number to JID if needed
61
- const destJid = jid.includes("@") ? jid : phoneToJid({ to: jid });
59
+ const destJid = jid.includes("@") ? jid : (0, Utils_1.phoneToJid)({ to: jid });
62
60
 
63
61
  try {
64
62
  return await session.sendMessage(destJid, content, options || {});
@@ -108,9 +106,9 @@ exports.sendStatusMentions = sendStatusMentions;
108
106
  */
109
107
  async function relayMessage(sessionId, jid, content, options = {}) {
110
108
  const session = getCachedSession(sessionId);
111
- if (!session) throw new WhatsappError(`Session ${sessionId} nicht gefunden`);
109
+ if (!session) throw new Error_1.WhatsappError(`Session ${sessionId} nicht gefunden`);
112
110
 
113
- const destJid = jid.includes("@") ? jid : phoneToJid({ to: jid });
111
+ const destJid = jid.includes("@") ? jid : (0, Utils_1.phoneToJid)({ to: jid });
114
112
  try {
115
113
  // Baileys-intern sendet hier direkt das XML-Stanza
116
114
  return await session.relayMessage(destJid, content, options);
@@ -118,4 +116,4 @@ async function relayMessage(sessionId, jid, content, options = {}) {
118
116
  throw new Error_1.WhatsappError(`Relay an ${destJid} fehlgeschlagen: ${err.message}`, { cause: err });
119
117
  }
120
118
  }
121
- exports.relayMessage = relayMessage;
119
+ exports.relayMessage = relayMessage;
@@ -1,15 +1,17 @@
1
- import { WASocket } from "@neelegirl/baileys/lib";
1
+ import { WASocket } from "@neelegirl/baileys";
2
2
  import type { MessageReceived, MessageUpdated, StartSessionParams } from "../Types";
3
3
  export declare const startSession: (sessionId?: string, options?: StartSessionParams) => Promise<WASocket>;
4
4
  /**
5
5
  * @deprecated Use startSession method instead
6
6
  */
7
7
  export declare const startWhatsapp: (sessionId?: string, options?: StartSessionParams) => Promise<WASocket>;
8
- export declare const startSessionWithPairingCode: (sessionId?: string, options?: {phoneNumber}) => Promise<WASocket>;
8
+ export declare const startSessionWithPairingCode: (sessionId?: string, options?: {
9
+ phoneNumber: string;
10
+ }, key?: string) => Promise<WASocket>;
9
11
  export declare const deleteSession: (sessionId: string) => Promise<void>;
10
12
  export declare const getAllSession: () => string[];
11
13
  export declare const getSession: (key: string) => WASocket | undefined;
12
- export declare const loadSessionsFromStorage: () => void;
14
+ export declare const loadSessionsFromStorage: () => Promise<string[]>;
13
15
  export declare const onMessageReceived: (listener: (msg: MessageReceived) => any) => void;
14
16
  export declare const onQRUpdated: (listener: ({ sessionId, qr }: {
15
17
  sessionId: string;
@@ -19,4 +21,4 @@ export declare const onConnected: (listener: (sessionId: string) => any) => void
19
21
  export declare const onDisconnected: (listener: (sessionId: string) => any) => void;
20
22
  export declare const onConnecting: (listener: (sessionId: string) => any) => void;
21
23
  export declare const onMessageUpdate: (listener: (data: MessageUpdated) => any) => void;
22
- //# sourceMappingURL=index.d.ts.map
24
+ export declare const onPairingCode: (listener: (sessionId: string, code: string) => any) => void;
@@ -49,39 +49,9 @@ const sessions = new Map();
49
49
  const callback = new Map();
50
50
  const retryCount = new Map();
51
51
  let stock;
52
- let CURRENT_WA_API_VERSION = "1.5.1";
53
- try {
54
- // Prefer package.json version when available
55
- // dist/Socket/index.js -> ../../package.json
56
- // eslint-disable-next-line @typescript-eslint/no-var-requires
57
- const pkg = require("../../package.json");
58
- if (pkg && typeof pkg.version === "string") {
59
- CURRENT_WA_API_VERSION = pkg.version;
60
- }
61
- }
62
- catch (_a) {
63
- // fallback keeps bundled version
64
- }
65
- let waApiUpdateCheckDone = false;
66
-
67
- function isNewerVersion(latest, current) {
68
- if (!latest || !current) return false;
69
- const a = current.split('.').map((n) => parseInt(n, 10) || 0);
70
- const b = latest.split('.').map((n) => parseInt(n, 10) || 0);
71
- for (let i = 0; i < Math.max(a.length, b.length); i++) {
72
- const x = a[i] || 0, y = b[i] || 0;
73
- if (y > x) return true;
74
- if (y < x) return false;
75
- }
76
- return false;
77
- }
78
-
79
- // Liest von der offiziellen npm-Registry (registry.npmjs.org), ob ein Update existiert – nur 1x pro Prozess
52
+ const CURRENT_WA_API_VERSION = require("../../package.json").version || "1.6.2";
53
+ // Update-Check-Funktion für WA-API
80
54
  const checkWaApiUpdate = () => {
81
- if (waApiUpdateCheckDone) {
82
- return Promise.resolve(null);
83
- }
84
- waApiUpdateCheckDone = true;
85
55
  return new Promise((resolve) => {
86
56
  const url = `https://registry.npmjs.org/@neelegirl/wa-api/latest`;
87
57
  https_1.default.get(url, { timeout: 5000 }, (res) => {
@@ -93,8 +63,8 @@ const checkWaApiUpdate = () => {
93
63
  try {
94
64
  const packageInfo = JSON.parse(data);
95
65
  const latestVersion = packageInfo.version;
96
- if (latestVersion && isNewerVersion(latestVersion, CURRENT_WA_API_VERSION)) {
97
- const updateMessage = `\n╔════════════════════════════════════════╗\n║ 🔔 NEUES UPDATE VERFÜGBAR! 🔔 ║\n╠════════════════════════════════════════╣\n║ @neelegirl/wa-api ║\n║ Aktuelle Version: ${(CURRENT_WA_API_VERSION || '').padEnd(20)} ║\n║ Neue Version: ${(latestVersion || '').padEnd(20)} ║\n║ ║\n║ Bitte aktualisiere: ║\n║ npm install @neelegirl/wa-api@latest ║\n╚════════════════════════════════════════╝\n`;
66
+ if (latestVersion && latestVersion !== CURRENT_WA_API_VERSION) {
67
+ const updateMessage = `\n╔════════════════════════════════════════╗\n║ 🔔 NEUES UPDATE VERFÜGBAR! 🔔 ║\n╠════════════════════════════════════════╣\n║ @neelegirl/wa-api ║\n║ Aktuelle Version: ${CURRENT_WA_API_VERSION.padEnd(20)} ║\n║ Neue Version: ${latestVersion.padEnd(20)} ║\n║ ║\n║ Bitte aktualisiere: ║\n║ npm install @neelegirl/wa-api@latest ║\n╚════════════════════════════════════════╝\n`;
98
68
  console.log(updateMessage);
99
69
  resolve({
100
70
  current: CURRENT_WA_API_VERSION,
@@ -103,11 +73,11 @@ const checkWaApiUpdate = () => {
103
73
  });
104
74
  }
105
75
  else {
106
- const currentVersionMessage = `\n╔════════════════════════════════════════╗\n║ ✅ Du nutzt die aktuelle Version ║\n║ von @neelegirl/wa-api ║\n╚════════════════════════════════════════╝\n`;
76
+ const currentVersionMessage = `\n╔════════════════════════════════════════╗\n║ ✅ Du nutzt gerade die aktuelle ║\n║ Version von @neelegirl/wa-api ║\n║ ║\n║ Wir informieren dich, wenn es ein ║\n║ Update gibt. ║\n╚════════════════════════════════════════╝\n`;
107
77
  console.log(currentVersionMessage);
108
78
  resolve({
109
79
  current: CURRENT_WA_API_VERSION,
110
- latest: latestVersion || CURRENT_WA_API_VERSION,
80
+ latest: latestVersion,
111
81
  hasUpdate: false
112
82
  });
113
83
  }
@@ -142,7 +112,7 @@ const startSession = (sessionId = "mysession", options = { printQR: true }) => _
142
112
  markOnlineOnConnect: false,
143
113
  browser: baileys_1.Browsers.ubuntu("Chrome"),
144
114
  });
145
- sessions.set(sessionId, Object.assign({}, sock));
115
+ sessions.set(sessionId, sock);
146
116
  try {
147
117
 
148
118
  sock.ev.process((events) => __awaiter(void 0, void 0, void 0, function* () {
@@ -228,8 +198,11 @@ const onimaii = (sessionId = "mysession", connect) => __awaiter(void 0, void 0,
228
198
  })
229
199
  exports.onimaii = onimaii;
230
200
  exports.startSession = startSession;
231
- const startSessionWithPairingCode = (sessionId = "mysession", options = { phoneNumber },key) => __awaiter(void 0, void 0, void 0, function* () {
232
- if (isSessionExistAndRunning(sessionId))throw new WhatsappError(Messages.sessionAlreadyExist(sessionId));
201
+ const startSessionWithPairingCode = (sessionId = "mysession", options = {}, key) => __awaiter(void 0, void 0, void 0, function* () {
202
+ if (!options.phoneNumber)
203
+ throw new Error_1.WhatsappError(Defaults_1.Messages.paremetersRequired("phoneNumber"));
204
+ if (isSessionExistAndRunning(sessionId))
205
+ throw new Error_1.WhatsappError(Defaults_1.Messages.sessionAlreadyExist(sessionId));
233
206
  const logger = (0, pino_1.default)({ level: "silent" });
234
207
  const { version } = yield (0, baileys_1.fetchLatestBaileysVersion)();
235
208
  const startSocket = () => __awaiter(void 0, void 0, void 0, function* () {
@@ -244,7 +217,7 @@ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
244
217
  markOnlineOnConnect: false,
245
218
  browser: baileys_1.Browsers.ubuntu("Chrome"),
246
219
  });
247
- sessions.set(sessionId, { ...sock });
220
+ sessions.set(sessionId, sock);
248
221
  try {
249
222
  if (!sock.authState.creds.registered) {
250
223
  console.log("first time pairing");
@@ -371,22 +344,22 @@ const getAllSessionData = () => {
371
344
  exports.getAllSessionData = getAllSessionData;
372
345
 
373
346
  async function loadSessionsFromStorage() {
374
- const dirPath = path.resolve(CREDENTIALS.DIR_NAME);
347
+ const dirPath = path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME);
375
348
  const loadedSessions = [];
376
349
 
377
350
  // Ordner anlegen, falls nicht existiert
378
- if (!fs.existsSync(dirPath)) {
379
- fs.mkdirSync(dirPath, { recursive: true });
351
+ if (!fs_1.default.existsSync(dirPath)) {
352
+ fs_1.default.mkdirSync(dirPath, { recursive: true });
380
353
  }
381
354
 
382
355
  try {
383
- const entries = await fs.promises.readdir(dirPath);
356
+ const entries = await fs_1.default.promises.readdir(dirPath);
384
357
 
385
358
  for (const entry of entries) {
386
- const fullPath = path.join(dirPath, entry);
359
+ const fullPath = path_1.default.join(dirPath, entry);
387
360
  let stat;
388
361
  try {
389
- stat = await fs.promises.stat(fullPath);
362
+ stat = await fs_1.default.promises.stat(fullPath);
390
363
  } catch {
391
364
  // Wenn sich die Datei zwischenzeitlich entfernt hat o.Ä., überspringen
392
365
  continue;
@@ -400,7 +373,7 @@ async function loadSessionsFromStorage() {
400
373
  : entry; // oder continue, wenn du ohne _ nicht laden willst
401
374
 
402
375
  try {
403
- await startSession(sessionId);
376
+ await (0, exports.startSession)(sessionId);
404
377
  loadedSessions.push(sessionId);
405
378
  } catch (err) {
406
379
  console.error(`Fehler beim Starten der Session "${sessionId}":`, err);
@@ -422,7 +395,7 @@ const onMessageReceived = (listener) => {
422
395
  const sock = (conn) => {
423
396
  onMessageReceived(async(msg) =>{
424
397
  let {sessionId} = msg;
425
- let sock1 = getSesseion(sessionId)
398
+ let sock1 = (0, exports.getSession)(sessionId)
426
399
  conn = sock1
427
400
  })
428
401
  };
@@ -449,6 +422,6 @@ const onMessageUpdate = (listener) => {
449
422
  };
450
423
  exports.onMessageUpdate = onMessageUpdate;
451
424
  const onPairingCode = (listener) => {
452
- callback.set(Defaults_1.CALLBACK_KEY.ON_MESSAGE_UPDATED, listener);
425
+ callback.set(Defaults_1.CALLBACK_KEY.ON_PAIRING_CODE, listener);
453
426
  };
454
427
  exports.onPairingCode = onPairingCode;
@@ -1,5 +1,5 @@
1
1
  /// <reference types="node" />
2
- import { WAMessageUpdate, proto } from "@neelegirl/baileys/lib";
2
+ import { WAMessageUpdate, proto } from "@neelegirl/baileys";
3
3
  export interface SendMessageTypes {
4
4
  to: string | number;
5
5
  text?: string;
@@ -195,12 +195,5 @@ class Whatsapp {
195
195
  }));
196
196
  });
197
197
  }
198
- }
199
- exports.Whatsapp = Whatsapp;
200
- const wa = new Whatsapp();
201
- // wa.load();
202
- const mySocket = new Socket_1.Socket({ id: "mysocket", phoneNumber: "6281524538841" });
203
- mySocket.onPairing = (code) => {
204
- console.log(code);
205
- };
206
- wa.startSession(mySocket);
198
+ }
199
+ exports.Whatsapp = Whatsapp;
package/package.json CHANGED
@@ -1,36 +1,41 @@
1
1
  {
2
2
  "name": "@neelegirl/wa-api",
3
- "version": "1.5.1",
4
- "description": "Multi Session Whatsapp Library",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
3
+ "version": "1.6.2",
4
+ "description": "Multi-session WhatsApp wrapper built on @neelegirl/baileys for QR, pairing and message automation.",
5
+ "keywords": [
6
+ "whatsapp",
7
+ "wa-api",
8
+ "multi-session",
9
+ "pairing",
10
+ "qr",
11
+ "automation",
12
+ "neelegirl"
13
+ ],
14
+ "homepage": "https://github.com/neelegirly/neelegirl-wa-api#readme",
7
15
  "repository": {
8
16
  "type": "git",
9
17
  "url": "git+https://github.com/neelegirly/neelegirl-wa-api.git"
10
18
  },
11
- "homepage": "https://github.com/neelegirly/neelegirl-wa-api#readme",
12
19
  "bugs": {
13
- "url": "https://github.com/neelegirly/neelegirl-wa-api"
20
+ "url": "https://github.com/neelegirly/neelegirl-wa-api/issues"
14
21
  },
15
- "files": ["dist/**/*"],
22
+ "license": "ISC",
23
+ "author": "Neele",
24
+ "main": "dist/index.js",
25
+ "types": "dist/index.d.ts",
26
+ "files": [
27
+ "dist/**/*",
28
+ "readme.md",
29
+ "LICENSE"
30
+ ],
16
31
  "scripts": {
17
- "build": "tsc",
18
- "start": "tsc && node ./dist/index.js",
19
- "test": "echo \"Error: no test specified\" && exit 1",
20
- "run-script": "node ./dist/index.js"
32
+ "test": "node -e \"require('./dist')\""
21
33
  },
22
- "author": { "name": "Neele" },
23
- "license": "ISC",
24
34
  "dependencies": {
25
- "jest": "^29.0.0",
26
- "@adiwajshing/keyed-db": "^0.2.4",
27
- "@hapi/boom": "^10.0.1",
28
- "@neelegirl/baileys": "^2.0.5",
29
- "mime": "^3.0.0",
30
- "pino": "^8.11.0",
31
- "qrcode-terminal": "^0.12.0"
35
+ "@neelegirl/baileys": "^2.1.2",
36
+ "pino": "^9.6.0"
32
37
  },
33
- "devDependencies": {
34
- "@types/mime": "^3.0.1"
38
+ "engines": {
39
+ "node": ">=20.0.0"
35
40
  }
36
41
  }
package/readme.md CHANGED
@@ -1,756 +1,140 @@
1
- <div align="center">
2
-
3
- # 💌 @neelegirl/wa-api 💌
4
-
5
- ### *Multi-Session WhatsApp – einfach & stabil*
6
- ### *QR · Pairing · Auto-Reconnect · Smart Queue Ready*
7
-
8
- [![Version](https://img.shields.io/badge/Version-1.5.1-ff69b4?style=for-the-badge&logo=github)](https://github.com/neelegirl/wa-api)
9
- [![Baileys](https://img.shields.io/badge/@neelegirl/baileys-2.0.4-9b59b6?style=for-the-badge)](https://www.npmjs.com/package/@neelegirl/baileys)
10
- [![Baileys API](https://img.shields.io/badge/Baileys_API-1.7.2-9b59b6?style=for-the-badge)](https://github.com/WhiskeySockets/Baileys)
11
- [![npm](https://img.shields.io/npm/v/@neelegirl/wa-api?style=for-the-badge&color=ff69b4&logo=npm)](https://www.npmjs.com/package/@neelegirl/wa-api)
12
- [![Downloads](https://img.shields.io/npm/dw/@neelegirl/wa-api?style=for-the-badge&color=ff69b4&logo=npm)](https://www.npmjs.com/package/@neelegirl/wa-api)
13
- [![License](https://img.shields.io/github/license/neelegirl/wa-api?style=for-the-badge&color=ff69b4)](LICENSE)
14
-
15
- ---
16
-
17
1
  <p align="center">
18
- <img src="https://files.catbox.moe/63h8xn.jpeg" width="720" alt="Neele WA-API Header" />
2
+ <img src="https://files.catbox.moe/6np1ii.JPG" alt="@neelegirl/wa-api" width="900" />
19
3
  </p>
20
4
 
21
- | 📦 Paket | 🎯 Baileys | ✨ Highlights |
22
- |----------|------------|----------------|
23
- | **@neelegirl/wa-api v1.5.1** | **@neelegirl/baileys 2.0.5** | Multi-Session · QR · Pairing · Update-Check von npm |
24
-
25
- **✨ v1.5.1** · README Glow-Up · Kompatibel mit **@neelegirl/baileys 2.0.5** & **Baileys API 1.7.2** · Update-Prüfung via npm-Registry
26
-
27
- [**Installation**](#-installation) · [**Quickstart**](#-quickstart-guide) · [**Features**](#-features) · [**API**](#-vollständige-api-referenz) · [**Support**](#-support--community)
28
-
29
- </div>
30
-
31
- ---
32
-
33
- ## 📋 Inhaltsverzeichnis
5
+ # @neelegirl/wa-api
34
6
 
35
- - [✨ Was ist @neelegirl/wa-api?](#-was-ist-neelegirlwa-api)
36
- - [🚀 Installation](#-installation)
37
- - [📖 Quickstart Guide](#-quickstart-guide)
38
- - [✨ Features](#-features)
39
- - [📲 Session Management](#-session-management)
40
- - [💬 Nachrichten senden](#-nachrichten-senden)
41
- - [🎧 Event Listener](#-event-listener)
42
- - [🔧 Erweiterte Funktionen](#-erweiterte-funktionen)
43
- - [📚 Vollständige API-Referenz](#-vollständige-api-referenz)
44
- - [⚠️ Wichtige Hinweise](#️-wichtige-hinweise)
45
- - [💬 Support & Community](#-support--community)
7
+ Mehrfach-Session-Wrapper fuer WhatsApp auf Basis von `@neelegirl/baileys`.
8
+ Das Paket kapselt Session-Start, Pairing, Listener und einfache Message-Helper,
9
+ ohne selbst ein eigenes REST- oder Queue-System mitzubringen.
46
10
 
47
- ---
11
+ **Version 1.6.2** · **Node.js 20+** · **basiert auf `@neelegirl/baileys` 2.1.2**
48
12
 
49
- ## ✨ Was ist @neelegirl/wa-api?
13
+ ## Stand
50
14
 
51
- <div align="center">
15
+ - basiert auf `@neelegirl/baileys` `2.1.2`
16
+ - Multi-Session-Management ueber Dateispeicher
17
+ - QR-Login und Pairing-Code-Login
18
+ - Helper fuer `sendMessage`, `sendStatusMentions` und `relayMessage`
19
+ - Listener fuer Verbindung, QR, Pairing-Code und Nachrichten
52
20
 
53
- ### 🎯 **Die perfekte Lösung für Multi-Session WhatsApp Bots** 🎯
21
+ ## Voraussetzungen
54
22
 
55
- </div>
23
+ - Node.js `>= 20`
24
+ - installierte `@neelegirl/baileys`-Abhaengigkeit
25
+ - optional `qrcode-terminal`, wenn `printQR: true` fuer Terminal-QR genutzt wird
56
26
 
57
- | Feature | Beschreibung | Status |
58
- |---------|-------------|--------|
59
- | 🔀 **Multi-Session** | Mehrere WhatsApp-Sessions gleichzeitig | ✅ |
60
- | 💎 **Universal API** | Einfache `sendMessage` für alle Typen | ✅ |
61
- | ⚡ **RelayMessage** | Direkte Nachrichten-Weiterleitung | ✅ |
62
- | 🔄 **Auto-Reconnect** | Automatisches Wiederverbinden | ✅ |
63
- | 📱 **QR-Code** | Schöne QR-Code-Anzeige | ✅ |
64
- | 🔔 **Auto-Updates** | Automatische Update-Prüfung (nur einmal) | ✅ |
65
- | 🧩 **LID-Support** | Vollständige LID-Kompatibilität | ✅ |
66
- | 🎨 **Einfach** | Simple API für Anfänger | ✅ |
67
- | 🚀 **Smart Queue** | Nutzt Baileys Smart Message Queue | ✅ |
68
-
69
- > ⚠️ **Wichtig**: Diese Library funktioniert **ausschließlich** mit **@neelegirl/baileys** (empfohlen **v2.0.4**, Baileys API **1.7.2**)!
70
-
71
- ---
72
-
73
- ## 🚀 Installation
74
-
75
- ### 📦 Mit npm
27
+ ## Installation
76
28
 
77
29
  ```bash
78
- npm install @neelegirl/wa-api@latest
30
+ npm install @neelegirl/wa-api
79
31
  ```
80
32
 
81
- ### 📦 Mit yarn
33
+ Optional fuer Terminal-QR:
82
34
 
83
35
  ```bash
84
- yarn add @neelegirl/wa-api@latest
36
+ npm install qrcode-terminal
85
37
  ```
86
38
 
87
- ### 📥 Import
88
-
89
- ```javascript
90
- // CommonJS
91
- const onimai = require('@neelegirl/wa-api');
39
+ ## Schnellstart
92
40
 
93
- // ES Module
94
- import * as onimai from '@neelegirl/wa-api';
95
- ```
96
-
97
- ---
41
+ ```js
42
+ const wa = require('@neelegirl/wa-api')
98
43
 
99
- ## 📖 Quickstart Guide
44
+ wa.onQRUpdated(({ sessionId, qr }) => {
45
+ console.log('QR aktualisiert:', sessionId, qr)
46
+ })
100
47
 
101
- ### 🎯 **Für Anfänger: Dein erster Multi-Session Bot**
48
+ wa.onConnected((sessionId) => {
49
+ console.log('Verbunden:', sessionId)
50
+ })
102
51
 
103
- ```javascript
104
- const onimai = require('@neelegirl/wa-api');
52
+ wa.onMessageReceived((msg) => {
53
+ console.log('Nachricht in Session', msg.sessionId)
54
+ })
105
55
 
106
- // 1️⃣ Session starten (mit QR-Code)
107
- async function start() {
108
- // Session starten
109
- await onimai.startSession('meine-session', {
110
- printQR: true // QR-Code anzeigen
111
- });
112
-
113
- console.log('✅ Session gestartet!');
56
+ async function main() {
57
+ await wa.startSession('session1', { printQR: true })
114
58
  }
115
59
 
116
- // 2️⃣ Nachrichten empfangen
117
- onimai.onMessageReceived(async (msg) => {
118
- const { sessionId, key, message } = msg;
119
- const from = key.remoteJid;
120
- const text = message?.conversation || message?.extendedTextMessage?.text || '';
121
-
122
- // Echo-Bot
123
- if (text.toLowerCase() === 'hallo') {
124
- await onimai.sendMessage(sessionId, from, {
125
- text: '🌸 Hallo! Ich bin ein Onimai-Bot! ✨'
126
- });
127
- }
128
- });
129
-
130
- // 3️⃣ Verbindungs-Status
131
- onimai.onConnected((sessionId) => {
132
- console.log(`✅ Session ${sessionId} ist verbunden!`);
133
- });
134
-
135
- onimai.onDisconnected((sessionId) => {
136
- console.log(`❌ Session ${sessionId} wurde getrennt`);
137
- });
138
-
139
- // Bot starten
140
- start().catch(console.error);
141
- ```
142
-
143
- ### 🎨 **Was passiert hier?**
144
-
145
- 1. **`startSession`**: Startet eine neue WhatsApp-Session mit QR-Code
146
- 2. **`onMessageReceived`**: Event-Handler für neue Nachrichten
147
- 3. **`sendMessage`**: Sendet Nachrichten an einen Chat
148
- 4. **`onConnected`/`onDisconnected`**: Events für Verbindungsstatus
149
-
150
- ---
151
-
152
- ## ✨ Features
153
-
154
- ### 🔥 **Hauptfeatures**
155
-
156
- - ✅ **Multi-Session Support** - Mehrere Sessions gleichzeitig verwalten
157
- - ✅ **Universal sendMessage** - Einfache API für alle Nachrichtentypen
158
- - ✅ **Auto-Reconnect** - Automatisches Wiederverbinden bei Verbindungsabbruch
159
- - ✅ **QR-Code Display** - Schöne QR-Code-Anzeige im Terminal
160
- - ✅ **Auto-Update-Check** - Automatische Prüfung auf neue Versionen (nur einmal pro Prozess)
161
- - ✅ **LID-Kompatibel** - Vollständige Linked ID Unterstützung
162
- - ✅ **Session-Management** - Einfaches Starten, Stoppen und Verwalten
163
- - ✅ **Event-System** - Umfangreiches Event-System für alle Events
164
- - ✅ **Smart Queue Ready** - Kompatibel mit Baileys Smart Message Queue
165
-
166
- ---
167
-
168
- ## 📲 Session Management
169
-
170
- ### 🚀 **Session starten**
171
-
172
- ```javascript
173
- // Mit QR-Code (Standard)
174
- await onimai.startSession('session1', {
175
- printQR: true // QR-Code im Terminal anzeigen
176
- });
177
-
178
- // Mit Pairing-Code (ohne QR-Code)
179
- await onimai.startSessionWithPairingCode('session2', {
180
- phoneNumber: '491234567890' // Ohne +, mit Ländercode
181
- });
60
+ main().catch(console.error)
182
61
  ```
183
62
 
184
- ### 📋 **Sessions verwalten**
63
+ ## Pairing-Code-Login
185
64
 
186
- ```javascript
187
- // Alle Sessions auflisten
188
- const allSessions = onimai.getAllSession();
189
- console.log('Aktive Sessions:', allSessions);
190
- // Output: ['session1', 'session2', 'session3']
65
+ ```js
66
+ const wa = require('@neelegirl/wa-api')
191
67
 
192
- // Eine Session abrufen
193
- const session = onimai.getSession('session1');
194
- if (session) {
195
- console.log('Session gefunden!');
68
+ async function main() {
69
+ await wa.startSessionWithPairingCode(
70
+ 'session2',
71
+ { phoneNumber: '491234567890' },
72
+ 'ONIMAIII'
73
+ )
196
74
  }
197
75
 
198
- // Session löschen
199
- await onimai.deleteSession('session1');
200
- ```
201
-
202
- ### 💾 **Sessions aus Storage laden**
203
-
204
- ```javascript
205
- // Alle gespeicherten Sessions automatisch laden
206
- const loadedSessions = await onimai.loadSessionsFromStorage();
207
- console.log('Geladene Sessions:', loadedSessions);
208
- // Output: ['session1', 'session2']
209
- ```
210
-
211
- ---
212
-
213
- ## 💬 Nachrichten senden
76
+ wa.onPairingCode((sessionId, code) => {
77
+ console.log('Pairing-Code fuer', sessionId, code)
78
+ })
214
79
 
215
- ### 📨 **Grundlegende Verwendung**
216
-
217
- ```javascript
218
- await onimai.sendMessage(sessionId, jidOrPhone, content, options);
80
+ main().catch(console.error)
219
81
  ```
220
82
 
221
- **Parameter:**
222
- - `sessionId` - Die Session-ID (z.B. 'session1')
223
- - `jidOrPhone` - WhatsApp-ID oder Telefonnummer (z.B. '491234567890@s.whatsapp.net' oder '491234567890')
224
- - `content` - Der Nachrichteninhalt (siehe Beispiele unten)
225
- - `options` - Optionale Parameter (z.B. `{ quoted: message }`)
226
-
227
- ### 📝 **Nachrichtentypen**
83
+ Der dritte Parameter ist optional. Wenn ein eigener Code gesetzt wird, muss er
84
+ 8 Zeichen lang sein.
228
85
 
229
- #### 1. **Text-Nachricht**
86
+ ## Nachrichten senden
230
87
 
231
- ```javascript
232
- await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
233
- text: 'Hallo! 🌸'
234
- });
235
- ```
88
+ ```js
89
+ const wa = require('@neelegirl/wa-api')
236
90
 
237
- #### 2. **Bild mit Caption**
238
-
239
- ```javascript
240
- await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
241
- image: { url: './bild.jpg' },
242
- caption: 'Schönes Bild! ✨'
243
- });
244
- ```
91
+ await wa.sendMessage('session1', '491234567890', { text: 'Hallo' })
245
92
 
246
- #### 3. **Video**
93
+ await wa.sendStatusMentions('session1', {
94
+ text: 'Status mit Mentions'
95
+ })
247
96
 
248
- ```javascript
249
- await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
250
- video: { url: './video.mp4' },
251
- caption: 'Mein Video! 🎬'
252
- });
253
- ```
254
-
255
- #### 4. **GIF (als Video)**
256
-
257
- ```javascript
258
- await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
259
- video: { url: './animation.mp4' },
260
- gifPlayback: true, // Wichtig für GIFs!
261
- caption: 'Kawaii GIF! ✨'
262
- });
263
- ```
264
-
265
- #### 5. **Audio/Sprachnachricht**
266
-
267
- ```javascript
268
- const fs = require('fs');
269
-
270
- await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
271
- audio: fs.createReadStream('./audio.ogg'),
272
- mimetype: 'audio/ogg',
273
- ptt: true // Push-to-Talk (Sprachnachricht)
274
- });
275
- ```
276
-
277
- #### 6. **Dokument**
278
-
279
- ```javascript
280
- await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
281
- document: {
282
- url: './dokument.pdf',
283
- filename: 'Wichtiges Dokument.pdf'
284
- },
285
- mimetype: 'application/pdf'
286
- });
287
- ```
288
-
289
- #### 7. **Umfrage (Poll)**
290
-
291
- ```javascript
292
- await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
293
- poll: {
294
- name: 'Was ist deine Lieblingsfarbe?',
295
- values: ['Rot', 'Blau', 'Grün', 'Gelb'],
296
- selectableCount: 1 // Anzahl der auswählbaren Optionen
297
- }
298
- });
299
- ```
300
-
301
- #### 8. **Reaktion**
302
-
303
- ```javascript
304
- await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
305
- react: {
306
- text: '❤️', // Emoji
307
- key: message.key // Key der Nachricht
308
- }
309
- });
310
-
311
- // Reaktion entfernen
312
- await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
313
- react: {
314
- text: '', // Leerer String entfernt Reaktion
315
- key: message.key
316
- }
317
- });
318
- ```
319
-
320
- #### 9. **Nachricht löschen**
321
-
322
- ```javascript
323
- await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
324
- delete: message.key // Für alle löschen
325
- });
326
- ```
327
-
328
- #### 10. **Nachricht anpinnen**
329
-
330
- ```javascript
331
- await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
332
- pin: {
333
- type: 1, // 0 = entfernen, 1 = anpinnen
334
- time: 86400, // Sekunden (24h = 86400)
335
- key: message.key
336
- }
337
- });
338
- ```
339
-
340
- #### 11. **Kontakt teilen**
341
-
342
- ```javascript
343
- const vcard = `BEGIN:VCARD
344
- VERSION:3.0
345
- FN:Max Mustermann
346
- TEL;type=CELL;type=VOICE;waid=491234567890:+49 123 4567890
347
- END:VCARD`;
348
-
349
- await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
350
- contacts: {
351
- displayName: 'Max Mustermann',
352
- contacts: [{ vcard }]
353
- }
354
- });
355
- ```
356
-
357
- #### 12. **Standort**
358
-
359
- ```javascript
360
- await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
361
- location: {
362
- degreesLatitude: 52.520008,
363
- degreesLongitude: 13.404954
364
- }
365
- });
366
- ```
367
-
368
- #### 13. **Nachricht weiterleiten**
369
-
370
- ```javascript
371
- await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
372
- forward: originalMessage // Originale Nachricht
373
- });
374
- ```
375
-
376
- #### 14. **Mit Quote (Antwort)**
377
-
378
- ```javascript
379
- await onimai.sendMessage(
380
- 'session1',
381
- '491234567890@s.whatsapp.net',
97
+ await wa.relayMessage(
98
+ 'session1',
99
+ 'status@broadcast',
382
100
  {
383
- text: 'Das ist eine Antwort!'
101
+ protocolMessage: {
102
+ type: 14
103
+ }
384
104
  },
385
- {
386
- quoted: originalMessage // Originale Nachricht
387
- }
388
- );
389
- ```
390
-
391
- #### 15. **Mit Erwähnung**
392
-
393
- ```javascript
394
- await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
395
- text: '@491111111111 Hallo!',
396
- mentions: ['491111111111@s.whatsapp.net']
397
- });
398
- ```
399
-
400
- ---
401
-
402
- ## 🎧 Event Listener
403
-
404
- ### 📥 **Nachrichten empfangen**
405
-
406
- ```javascript
407
- onimai.onMessageReceived(async (msg) => {
408
- const {
409
- sessionId, // Session-ID
410
- key, // Message-Key (id, remoteJid, fromMe)
411
- message, // Nachrichteninhalt
412
- messageTimestamp // Zeitstempel
413
- } = msg;
414
-
415
- const from = key.remoteJid;
416
- const text = message?.conversation || message?.extendedTextMessage?.text || '';
417
-
418
- console.log(`📥 Neue Nachricht von ${from}: ${text}`);
419
-
420
- // Medien speichern (wenn vorhanden)
421
- if (message?.imageMessage) {
422
- await msg.saveImage('./downloads/');
423
- }
424
- if (message?.videoMessage) {
425
- await msg.saveVideo('./downloads/');
426
- }
427
- if (message?.documentMessage) {
428
- await msg.saveDocument('./downloads/');
429
- }
430
- });
105
+ {}
106
+ )
431
107
  ```
432
108
 
433
- ### 🔄 **Nachrichten-Updates**
434
-
435
- ```javascript
436
- onimai.onMessageUpdate((sessionId, data) => {
437
- const {
438
- update, // Update-Objekt
439
- messageStatus // Lesbarer Status
440
- } = data;
441
-
442
- console.log(`📊 Status Update: ${messageStatus}`);
443
- // Mögliche Status: 'sent', 'delivered', 'read', 'failed'
444
- });
445
- ```
446
-
447
- ### 🔌 **Verbindungs-Events**
448
-
449
- ```javascript
450
- // Verbunden
451
- onimai.onConnected((sessionId) => {
452
- console.log(`✅ Session ${sessionId} ist jetzt verbunden!`);
453
- });
454
-
455
- // Verbindung wird hergestellt
456
- onimai.onConnecting((sessionId) => {
457
- console.log(`🔄 Session ${sessionId} verbindet...`);
458
- });
459
-
460
- // Getrennt
461
- onimai.onDisconnected((sessionId) => {
462
- console.log(`❌ Session ${sessionId} wurde getrennt`);
463
- });
464
- ```
465
-
466
- ### 📱 **QR-Code Updates**
467
-
468
- ```javascript
469
- onimai.onQRUpdated((info) => {
470
- const { sessionId, qr } = info;
471
- console.log(`📱 Neuer QR-Code für Session ${sessionId}:`);
472
- console.log(qr);
473
-
474
- // Du kannst den QR-Code auch in eine Datei speichern oder auf einer Webseite anzeigen
475
- });
476
- ```
477
-
478
- ### 🔑 **Pairing-Code**
109
+ ## Sessions aus dem Speicher laden
479
110
 
480
- ```javascript
481
- onimai.onPairingCode((sessionId, code) => {
482
- console.log(`🔑 Pairing-Code für Session ${sessionId}: ${code}`);
483
- });
484
- ```
485
-
486
- ---
487
-
488
- ## 🔧 Erweiterte Funktionen
489
-
490
- ### 💾 **Medien speichern**
491
-
492
- ```javascript
493
- onimai.onMessageReceived(async (msg) => {
494
- // Bild speichern
495
- if (msg.message?.imageMessage) {
496
- const path = await msg.saveImage('./downloads/');
497
- console.log('✅ Bild gespeichert:', path);
498
- }
499
-
500
- // Video speichern
501
- if (msg.message?.videoMessage) {
502
- const path = await msg.saveVideo('./downloads/');
503
- console.log('✅ Video gespeichert:', path);
504
- }
505
-
506
- // Dokument speichern
507
- if (msg.message?.documentMessage) {
508
- const path = await msg.saveDocument('./downloads/');
509
- console.log('✅ Dokument gespeichert:', path);
510
- }
511
- });
512
- ```
513
-
514
- ### 🔄 **Multi-Session Beispiel**
515
-
516
- ```javascript
517
- // Mehrere Sessions gleichzeitig starten
518
- const sessions = ['session1', 'session2', 'session3'];
519
-
520
- for (const sessionId of sessions) {
521
- await onimai.startSession(sessionId, { printQR: true });
522
- }
523
-
524
- // Nachricht an alle Sessions senden
525
- const message = { text: 'Broadcast-Nachricht! 📢' };
526
- const recipients = ['491234567890@s.whatsapp.net'];
527
-
528
- for (const sessionId of sessions) {
529
- for (const recipient of recipients) {
530
- await onimai.sendMessage(sessionId, recipient, message);
531
- }
532
- }
533
- ```
111
+ ```js
112
+ const wa = require('@neelegirl/wa-api')
534
113
 
535
- ### 🚀 **Smart Queue Integration**
536
-
537
- ```javascript
538
- // Nutze die Smart Message Queue von Baileys für zuverlässiges Bulk-Messaging
539
- const baileys = require('@neelegirl/baileys');
540
- const session = onimai.getSession('session1');
541
-
542
- if (session) {
543
- const queue = baileys.createSmartMessageQueue(session, {
544
- maxRetries: 5,
545
- retryDelay: 2000,
546
- maxConcurrent: 3
547
- });
548
-
549
- // Viele Nachrichten zur Queue hinzufügen
550
- const recipients = ['491234567890@s.whatsapp.net', '499876543210@s.whatsapp.net'];
551
-
552
- for (const jid of recipients) {
553
- await queue.add({
554
- jid,
555
- message: { text: 'Wichtige Ankündigung! 📢' },
556
- priority: 'high'
557
- });
558
- }
559
- }
114
+ const loaded = await wa.loadSessionsFromStorage()
115
+ console.log('Geladene Sessions:', loaded)
560
116
  ```
561
117
 
562
- ---
563
-
564
- ## 📚 Vollständige API-Referenz
565
-
566
- ### 🔌 **Session-Funktionen**
567
-
568
- | Funktion | Beschreibung | Beispiel |
569
- |----------|-------------|----------|
570
- | `startSession(id, options)` | Startet eine Session mit QR-Code | `await onimai.startSession('session1')` |
571
- | `startSessionWithPairingCode(id, options)` | Startet mit Pairing-Code | `await onimai.startSessionWithPairingCode('session2', { phoneNumber: '491234567890' })` |
572
- | `getAllSession()` | Gibt alle aktiven Sessions zurück | `const sessions = onimai.getAllSession()` |
573
- | `getSession(id)` | Gibt eine spezifische Session zurück | `const session = onimai.getSession('session1')` |
574
- | `deleteSession(id)` | Löscht eine Session | `await onimai.deleteSession('session1')` |
575
- | `loadSessionsFromStorage()` | Lädt alle Sessions aus Storage | `const loaded = await onimai.loadSessionsFromStorage()` |
576
-
577
- ### 💬 **Nachrichten-Funktionen**
578
-
579
- | Funktion | Beschreibung |
580
- |----------|-------------|
581
- | `sendMessage(sessionId, jid, content, options)` | Sendet eine Nachricht |
582
-
583
- **Content-Typen:**
584
- - `{ text: string }` - Text
585
- - `{ image: { url: string }, caption?: string }` - Bild
586
- - `{ video: { url: string }, caption?: string, gifPlayback?: boolean }` - Video/GIF
587
- - `{ audio: Stream, mimetype: string, ptt?: boolean }` - Audio
588
- - `{ document: { url: string, filename?: string }, mimetype: string }` - Dokument
589
- - `{ poll: { name: string, values: string[], selectableCount: number } }` - Umfrage
590
- - `{ react: { text: string, key: MessageKey } }` - Reaktion
591
- - `{ delete: MessageKey }` - Löschen
592
- - `{ pin: { type: number, time: number, key: MessageKey } }` - Anpinnen
593
- - `{ contacts: { displayName: string, contacts: Array } }` - Kontakt
594
- - `{ location: { degreesLatitude: number, degreesLongitude: number } }` - Standort
595
- - `{ forward: Message }` - Weiterleiten
596
-
597
- ### 🎧 **Event-Listener**
598
-
599
- | Event | Beschreibung | Callback-Parameter |
600
- |-------|-------------|-------------------|
601
- | `onMessageReceived` | Neue Nachricht empfangen | `(msg: Message)` |
602
- | `onMessageUpdate` | Nachrichten-Update | `(sessionId: string, data: UpdateData)` |
603
- | `onConnected` | Session verbunden | `(sessionId: string)` |
604
- | `onConnecting` | Session verbindet | `(sessionId: string)` |
605
- | `onDisconnected` | Session getrennt | `(sessionId: string)` |
606
- | `onQRUpdated` | QR-Code aktualisiert | `(info: { sessionId: string, qr: string })` |
607
- | `onPairingCode` | Pairing-Code erhalten | `(sessionId: string, code: string)` |
608
-
609
- ---
610
-
611
- ## ⚠️ Wichtige Hinweise
612
-
613
- ### 🚨 **Disclaimer**
614
-
615
- > ⚠️ **WICHTIG**: Diese Library funktioniert **ausschließlich** mit **@neelegirl/baileys**!
616
- >
617
- > - ✖️ **Kein Spam** oder Massennachrichten
618
- > - ✖️ **Kein Missbrauch** für unethische Zwecke
619
- > - ✖️ **Keine Stalkerware** oder automatisierte Überwachung
620
- > - ✔️ **Verantwortungsvoller Gebrauch** wird erwartet
621
-
622
- ### 🔒 **Sicherheit**
623
-
624
- - **Nie** deine Session-Daten öffentlich teilen
625
- - **Immer** `.gitignore` für Credentials-Ordner verwenden
626
- - **Regelmäßig** Backups erstellen
627
- - **Sichere** Passwörter für deine Server verwenden
628
-
629
- ### 💡 **Best Practices**
630
-
631
- 1. **Error-Handling**: Immer try-catch für wichtige Operationen
632
- 2. **Rate-Limiting**: Nutze Smart Message Queue für Bulk-Messaging
633
- 3. **Session-Management**: Sessions ordentlich verwalten und löschen wenn nicht mehr benötigt
634
- 4. **Updates**: Regelmäßig auf Updates prüfen (automatisch aktiviert, nur einmal angezeigt)
635
-
636
- ---
637
-
638
- ## 🆕 Was ist neu in Version 1.5.1?
639
-
640
- ### ✨ **Neue Features & Glow-Up**
641
-
642
- - 📖 **README Glow-Up** – Version 1.5.1, Badges & Changelog
643
- - ✅ **Kompatibilität** mit **@neelegirl/baileys 2.0.4** & **Baileys API 1.7.2**
644
- - 🔔 **Update-Check** – Liest Version von **npm-Registry** (registry.npmjs.org), nur 1× pro Prozess
645
- - 📦 **Abhängigkeit** auf `@neelegirl/baileys@^2.0.4` (empfohlen 2.0.4)
646
- - 🚀 **Smart Queue Ready** · QR · Pairing · Auto-Reconnect
647
- - 💎 **Multi-Device** & Session-Management optimiert
648
-
649
- ### 🔄 **Verbesserungen**
650
-
651
- - Semver-Vergleich für „Update verfügbar“ nur bei wirklich neuerer Version
652
- - Verbesserte Fehlerbehandlung & Stabilität
653
- - Schnellerer Verbindungsaufbau · Bessere LID-Unterstützung
654
-
655
- ---
656
-
657
- ## 💬 Support & Community
658
-
659
- <div align="center">
660
-
661
- ### 🌸 **Made with Love by @neelegirl** 🌸
662
-
663
- [![GitHub](https://img.shields.io/badge/GitHub-@neelegirl-pink?style=for-the-badge&logo=github)](https://github.com/neelegirl)
664
- [![Email](https://img.shields.io/badge/Email-Support-pink?style=for-the-badge&logo=gmail)](mailto:neelehoven@gmail.com)
665
- [![Docs](https://img.shields.io/badge/Docs-wa--api.org-pink?style=for-the-badge)](https://wa-api.org)
666
-
667
- **⭐ Wenn dir dieses Projekt gefällt, gib ihm ein Star auf GitHub! ⭐**
668
-
669
- </div>
670
-
671
- ---
672
-
673
- ## 📝 Changelog
674
-
675
- ### Version 1.5.1 (Aktuell) 🎉
676
-
677
- - 📖 **README Glow-Up** – Version 1.5.1, Baileys 2.0.5 Badges
678
- - 🔔 Update-Check von **npm-Registry** (registry.npmjs.org), nur 1× pro Prozess
679
- - ✨ Kompatibilität mit **@neelegirl/baileys 2.0.4** & **Baileys API 1.7.2**
680
- - 📦 Abhängigkeit `@neelegirl/baileys@^2.0.4`
681
-
682
- ### Version 1.3.2
683
-
684
- - 📖 **README Glow-Up** – Version 1.3.2, Baileys 2.0.2 Badges
685
- - 🔔 Update-Check von **npm-Registry** (registry.npmjs.org), nur 1× pro Prozess
686
- - ✨ Kompatibilität mit **@neelegirl/baileys 2.0.2** & **Baileys API 1.7.2**
687
- - 📦 Abhängigkeit `@neelegirl/baileys@^2.0.0`
688
- - 🚀 Smart Queue Ready · Semver-Vergleich für Update-Hinweis
689
- - 💎 Multi-Device & Session-Management optimiert
690
- - 🚀 Smart Queue Ready · Semver-Vergleich für Update-Hinweis
691
- - 💎 Multi-Device & Session-Management optimiert
692
-
693
- ### Version 1.3.1
694
-
695
- - 📖 README Glow-Up · Changelog · Baileys 2.0.2
696
-
697
- ### Version 1.2.5
698
-
699
- - 📖 README Glow-Up · Changelog
700
-
701
- ### Version 1.2.4
702
-
703
- - 📖 README Glow-Up · Changelog
704
-
705
- ### Version 1.2.3
706
-
707
- - 📖 README Glow-Up · Changelog
708
-
709
- ### Version 1.2.2
710
-
711
- - 📖 README Glow-Up · Changelog ergänzt
712
-
713
- ### Version 1.2.1
714
-
715
- - 📖 README Glow-Up · Update-Check von npm-Registry · Baileys 2.0.2 Badges
716
-
717
- ### Version 1.2.0
718
-
719
- - 📖 README Glow-Up · Baileys 2.0.0 Badges
720
- - ✨ Kompatibilität mit @neelegirl/baileys 2.0.0 & Baileys API 1.7.2
721
- - 🚀 Smart Queue Ready · Auto-Update-Check (1x pro Prozess)
722
-
723
- ### Version 1.1.1
724
-
725
- - 📖 README Glow-Up · Kompatibilität mit @neelegirl/baileys 1.7.1
726
- - 🚀 Smart Queue Ready, Auto-Update-Check
727
-
728
- ### Version 1.1.0
729
-
730
- - ✨ Kompatibilität mit @neelegirl/baileys 1.7.0
731
- - 🚀 Smart Queue Ready, Auto-Update-Check
732
-
733
- ### Version 1.0.10
734
-
735
- - ✨ Automatische Update-Prüfung hinzugefügt
736
- - 🎨 Verbesserte QR-Code-Anzeige
737
- - 🔄 Kompatibilität mit @neelegirl/baileys 1.6.6
738
- - 🚀 Verbesserte Stabilität
739
- - 🐛 Bugfixes für Session-Management
740
-
741
- ### Version 1.0.9
742
-
743
- - 🔔 Update-Benachrichtigung hinzugefügt
744
- - 💎 Optimierungen für Multi-Device
118
+ `loadSessionsFromStorage()` liefert die erfolgreich geladenen Session-IDs zurueck.
745
119
 
746
- ---
120
+ ## Verfuegbare Listener
747
121
 
748
- <div align="center">
122
+ - `onQRUpdated`
123
+ - `onConnected`
124
+ - `onDisconnected`
125
+ - `onConnecting`
126
+ - `onMessageReceived`
127
+ - `onMessageUpdate`
128
+ - `onPairingCode`
749
129
 
750
- ### ✨ *Stay kawaii, stay connected – Onimai forever!* ✨
130
+ ## Grenzen
751
131
 
752
- **🌸 Made with Love & Glitter 🌸**
132
+ - kein eingebauter HTTP-Server
133
+ - kein Queue-System
134
+ - keine Word2Web-spezifischen Features im Paket
135
+ - veroeffentlicht als vorgebaute `dist/`-Distribution
136
+ - das Low-Level-Verhalten kommt direkt aus `@neelegirl/baileys`
753
137
 
754
- [⬆️ Nach oben](#-neelegirlwa-api)
138
+ ## Lizenz
755
139
 
756
- </div>
140
+ ISC