@deathnaitsa/wa-api 2.0.3 → 2.0.5
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 +630 -62
- package/dist/WhatsAppClient.cjs +1 -0
- package/dist/WhatsAppClient.js +1 -1
- package/dist/index.cjs +1 -0
- package/dist/index.js +1 -1
- package/package.json +12 -3
- package/publish.bat +105 -0
- package/publish.sh +103 -0
- package/setup-git-token.sh +19 -0
- package/socket.js +550 -1
package/socket.js
CHANGED
|
@@ -1,4 +1,43 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
startSession,
|
|
3
|
+
onMessage,
|
|
4
|
+
sendText,
|
|
5
|
+
sendAudio,
|
|
6
|
+
sendDocument,
|
|
7
|
+
sendLocation,
|
|
8
|
+
sendContact,
|
|
9
|
+
sendReaction,
|
|
10
|
+
sendTyping,
|
|
11
|
+
sendRecording,
|
|
12
|
+
sendPoll,
|
|
13
|
+
uploadStatus,
|
|
14
|
+
sendBroadcast,
|
|
15
|
+
queueMessage,
|
|
16
|
+
getQueueStatus,
|
|
17
|
+
clearQueue,
|
|
18
|
+
pauseQueue,
|
|
19
|
+
resumeQueue,
|
|
20
|
+
setRateLimit,
|
|
21
|
+
setAutoReconnect,
|
|
22
|
+
getConnectionHealth,
|
|
23
|
+
createGroup,
|
|
24
|
+
getGroupMetadata,
|
|
25
|
+
updateGroupSubject,
|
|
26
|
+
addParticipants,
|
|
27
|
+
removeParticipants,
|
|
28
|
+
promoteParticipants,
|
|
29
|
+
demoteParticipants,
|
|
30
|
+
leaveGroup,
|
|
31
|
+
getGroupInviteCode,
|
|
32
|
+
getProfilePicture,
|
|
33
|
+
getContact,
|
|
34
|
+
getStatus,
|
|
35
|
+
updateProfileStatus,
|
|
36
|
+
client,
|
|
37
|
+
getAllSessionsInfo,
|
|
38
|
+
getGlobalStats,
|
|
39
|
+
countReceivedMessage
|
|
40
|
+
} from '@deathnaitsa/wa-api';
|
|
2
41
|
|
|
3
42
|
// Start sessions
|
|
4
43
|
await startSession('bot');
|
|
@@ -72,6 +111,68 @@ console.log(' !info - Nachrichteninfo anzeigen');
|
|
|
72
111
|
console.log(' !liste - Alle Sessions auflisten');
|
|
73
112
|
console.log(' !stats - Detaillierte Session-Statistiken');
|
|
74
113
|
console.log(' !gesamtstats - Gesamtstatistik aller Sessions');
|
|
114
|
+
console.log('');
|
|
115
|
+
console.log(' 📝 Gruppen:');
|
|
116
|
+
console.log(' !gruppeninfo - Infos zur aktuellen Gruppe');
|
|
117
|
+
console.log(' !gruppenlink - Einladungslink der Gruppe');
|
|
118
|
+
console.log(' !gruppenname <n> - Gruppennamen ändern');
|
|
119
|
+
console.log(' !gruppenbio <t> - Gruppenbeschreibung ändern');
|
|
120
|
+
console.log(' !hinzufügen <nr> - Teilnehmer hinzufügen');
|
|
121
|
+
console.log(' !entfernen <nr> - Teilnehmer entfernen');
|
|
122
|
+
console.log(' !promoten <nr> - Zum Admin machen');
|
|
123
|
+
console.log(' !demoten <nr> - Admin entfernen');
|
|
124
|
+
console.log('');
|
|
125
|
+
console.log(' 📧 Nachrichten:');
|
|
126
|
+
console.log(' !ort <lat> <lon> - Standort senden');
|
|
127
|
+
console.log(' !reaktion <emoji> - Auf letzte Nachricht reagieren');
|
|
128
|
+
console.log(' !tippen - Tipp-Indikator anzeigen');
|
|
129
|
+
console.log(' !aufnehmen - Aufnahme-Indikator anzeigen');
|
|
130
|
+
console.log(' !umfrage <frage> - Umfrage erstellen');
|
|
131
|
+
console.log(' !broadcast <text> - Broadcast senden');
|
|
132
|
+
console.log('');
|
|
133
|
+
console.log(' 📱 Status & Queue:');
|
|
134
|
+
console.log(' !status <text> - Status hochladen');
|
|
135
|
+
console.log(' !queue <text> - Nachricht in Queue');
|
|
136
|
+
console.log(' !queuestatus - Queue Status anzeigen');
|
|
137
|
+
console.log(' !clearqueue - Queue leeren');
|
|
138
|
+
console.log(' !ratelimit <n> - Rate Limit setzen (n/min)');
|
|
139
|
+
console.log('');
|
|
140
|
+
console.log(' 👤 Profil & Kontakt:');
|
|
141
|
+
console.log(' !profilbild - Profilbild des Absenders');
|
|
142
|
+
console.log(' !status - Status des Absenders');
|
|
143
|
+
console.log(' !kontakt - Kontaktinfo');
|
|
144
|
+
console.log(' !meinestatus <t> - Eigenen Status ändern');
|
|
145
|
+
console.log('');
|
|
146
|
+
console.log(' 🔄 Verbindung:');
|
|
147
|
+
console.log(' !autoreconnect - Auto-Reconnect aktivieren');
|
|
148
|
+
console.log(' !health - Verbindungs-Status');
|
|
149
|
+
console.log('');
|
|
150
|
+
console.log(' ⚙️ Session:');
|
|
151
|
+
console.log(' !neustart <id> - Session neu starten');
|
|
152
|
+
console.log(' !pause <id> - Session pausieren');
|
|
153
|
+
console.log(' !fortsetzen <id> - Session fortsetzen');
|
|
154
|
+
console.log(' !stopp <id> - Session stoppen');
|
|
155
|
+
console.log(' !löschen <id> - Session-Daten löschen');
|
|
156
|
+
console.log(' !start <id> - Neue Session starten');
|
|
157
|
+
console.log(' !zuweisen <id> - Diesen Chat einer Session zuweisen');
|
|
158
|
+
console.log(' !zuweisungen - Alle Chat-Zuweisungen anzeigen\n');
|
|
159
|
+
console.log(' !entfernen <nr> - Teilnehmer entfernen');
|
|
160
|
+
console.log(' !promoten <nr> - Zum Admin machen');
|
|
161
|
+
console.log(' !demoten <nr> - Admin entfernen');
|
|
162
|
+
console.log('');
|
|
163
|
+
console.log(' 📧 Nachrichten:');
|
|
164
|
+
console.log(' !ort <lat> <lon> - Standort senden');
|
|
165
|
+
console.log(' !reaktion <emoji> - Auf letzte Nachricht reagieren');
|
|
166
|
+
console.log(' !tippen - Tipp-Indikator anzeigen');
|
|
167
|
+
console.log(' !aufnehmen - Aufnahme-Indikator anzeigen');
|
|
168
|
+
console.log('');
|
|
169
|
+
console.log(' 👤 Profil & Kontakt:');
|
|
170
|
+
console.log(' !profilbild - Profilbild des Absenders');
|
|
171
|
+
console.log(' !status - Status des Absenders');
|
|
172
|
+
console.log(' !kontakt - Kontaktinfo');
|
|
173
|
+
console.log(' !meinestatus <t> - Eigenen Status ändern');
|
|
174
|
+
console.log('');
|
|
175
|
+
console.log(' ⚙️ Session:');
|
|
75
176
|
console.log(' !neustart <id> - Session neu starten');
|
|
76
177
|
console.log(' !pause <id> - Session pausieren');
|
|
77
178
|
console.log(' !fortsetzen <id> - Session fortsetzen');
|
|
@@ -240,6 +341,454 @@ onMessage(async (msg) => {
|
|
|
240
341
|
await safeSend(globalMessage);
|
|
241
342
|
break;
|
|
242
343
|
|
|
344
|
+
// ===========================================
|
|
345
|
+
// GROUP MANAGEMENT COMMANDS
|
|
346
|
+
// ===========================================
|
|
347
|
+
|
|
348
|
+
case '!gruppeninfo':
|
|
349
|
+
if (!msg.isGroup) {
|
|
350
|
+
await safeSend('❌ Dieser Befehl funktioniert nur in Gruppen');
|
|
351
|
+
break;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
try {
|
|
355
|
+
const metadata = await getGroupMetadata(msg.sessionId, msg.from);
|
|
356
|
+
let groupInfo = `📝 *Gruppeninfo*\n\n`;
|
|
357
|
+
groupInfo += `Name: ${metadata.subject}\n`;
|
|
358
|
+
groupInfo += `Beschreibung: ${metadata.desc || 'Keine'}\n`;
|
|
359
|
+
groupInfo += `Erstellt: ${new Date(metadata.creation * 1000).toLocaleDateString('de-DE')}\n`;
|
|
360
|
+
groupInfo += `Teilnehmer: ${metadata.participants.length}\n`;
|
|
361
|
+
groupInfo += `Admins: ${metadata.participants.filter(p => p.admin).length}\n`;
|
|
362
|
+
|
|
363
|
+
await safeSend(groupInfo);
|
|
364
|
+
} catch (e) {
|
|
365
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
366
|
+
}
|
|
367
|
+
break;
|
|
368
|
+
|
|
369
|
+
case '!gruppenlink':
|
|
370
|
+
if (!msg.isGroup) {
|
|
371
|
+
await safeSend('❌ Dieser Befehl funktioniert nur in Gruppen');
|
|
372
|
+
break;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
try {
|
|
376
|
+
const code = await getGroupInviteCode(msg.sessionId, msg.from);
|
|
377
|
+
const link = `https://chat.whatsapp.com/${code}`;
|
|
378
|
+
await safeSend(`🔗 *Einladungslink:*\n\n${link}`);
|
|
379
|
+
} catch (e) {
|
|
380
|
+
await safeSend(`❌ Fehler: ${e.message}\n(Bist du Admin?)`);
|
|
381
|
+
}
|
|
382
|
+
break;
|
|
383
|
+
|
|
384
|
+
case '!gruppenname':
|
|
385
|
+
if (!msg.isGroup) {
|
|
386
|
+
await safeSend('❌ Dieser Befehl funktioniert nur in Gruppen');
|
|
387
|
+
break;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
const newName = args.join(' ');
|
|
391
|
+
if (!newName) {
|
|
392
|
+
await safeSend('❌ Verwendung: !gruppenname <neuer Name>');
|
|
393
|
+
break;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
try {
|
|
397
|
+
await updateGroupSubject(msg.sessionId, msg.from, newName);
|
|
398
|
+
await safeSend(`✅ Gruppenname geändert zu: *${newName}*`);
|
|
399
|
+
} catch (e) {
|
|
400
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
401
|
+
}
|
|
402
|
+
break;
|
|
403
|
+
|
|
404
|
+
case '!gruppenbio':
|
|
405
|
+
if (!msg.isGroup) {
|
|
406
|
+
await safeSend('❌ Dieser Befehl funktioniert nur in Gruppen');
|
|
407
|
+
break;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
const newDesc = args.join(' ');
|
|
411
|
+
if (!newDesc) {
|
|
412
|
+
await safeSend('❌ Verwendung: !gruppenbio <neue Beschreibung>');
|
|
413
|
+
break;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
try {
|
|
417
|
+
await client.updateGroupDescription(msg.sessionId, msg.from, newDesc);
|
|
418
|
+
await safeSend(`✅ Beschreibung geändert`);
|
|
419
|
+
} catch (e) {
|
|
420
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
421
|
+
}
|
|
422
|
+
break;
|
|
423
|
+
|
|
424
|
+
case '!hinzufügen':
|
|
425
|
+
if (!msg.isGroup) {
|
|
426
|
+
await safeSend('❌ Dieser Befehl funktioniert nur in Gruppen');
|
|
427
|
+
break;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
const addNumber = args[0];
|
|
431
|
+
if (!addNumber) {
|
|
432
|
+
await safeSend('❌ Verwendung: !hinzufügen <Telefonnummer>');
|
|
433
|
+
break;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
try {
|
|
437
|
+
const jid = addNumber.includes('@') ? addNumber : `${addNumber}@s.whatsapp.net`;
|
|
438
|
+
await addParticipants(msg.sessionId, msg.from, [jid]);
|
|
439
|
+
await safeSend(`✅ Teilnehmer hinzugefügt`);
|
|
440
|
+
} catch (e) {
|
|
441
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
442
|
+
}
|
|
443
|
+
break;
|
|
444
|
+
|
|
445
|
+
case '!entfernen':
|
|
446
|
+
if (!msg.isGroup) {
|
|
447
|
+
await safeSend('❌ Dieser Befehl funktioniert nur in Gruppen');
|
|
448
|
+
break;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
const removeNumber = args[0];
|
|
452
|
+
if (!removeNumber) {
|
|
453
|
+
await safeSend('❌ Verwendung: !entfernen <Telefonnummer>');
|
|
454
|
+
break;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
try {
|
|
458
|
+
const jid = removeNumber.includes('@') ? removeNumber : `${removeNumber}@s.whatsapp.net`;
|
|
459
|
+
await removeParticipants(msg.sessionId, msg.from, [jid]);
|
|
460
|
+
await safeSend(`✅ Teilnehmer entfernt`);
|
|
461
|
+
} catch (e) {
|
|
462
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
463
|
+
}
|
|
464
|
+
break;
|
|
465
|
+
|
|
466
|
+
case '!promoten':
|
|
467
|
+
if (!msg.isGroup) {
|
|
468
|
+
await safeSend('❌ Dieser Befehl funktioniert nur in Gruppen');
|
|
469
|
+
break;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
const promoteNumber = args[0];
|
|
473
|
+
if (!promoteNumber) {
|
|
474
|
+
await safeSend('❌ Verwendung: !promoten <Telefonnummer>');
|
|
475
|
+
break;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
try {
|
|
479
|
+
const jid = promoteNumber.includes('@') ? promoteNumber : `${promoteNumber}@s.whatsapp.net`;
|
|
480
|
+
await promoteParticipants(msg.sessionId, msg.from, [jid]);
|
|
481
|
+
await safeSend(`✅ Zum Admin ernannt`);
|
|
482
|
+
} catch (e) {
|
|
483
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
484
|
+
}
|
|
485
|
+
break;
|
|
486
|
+
|
|
487
|
+
case '!demoten':
|
|
488
|
+
if (!msg.isGroup) {
|
|
489
|
+
await safeSend('❌ Dieser Befehl funktioniert nur in Gruppen');
|
|
490
|
+
break;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
const demoteNumber = args[0];
|
|
494
|
+
if (!demoteNumber) {
|
|
495
|
+
await safeSend('❌ Verwendung: !demoten <Telefonnummer>');
|
|
496
|
+
break;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
try {
|
|
500
|
+
const jid = demoteNumber.includes('@') ? demoteNumber : `${demoteNumber}@s.whatsapp.net`;
|
|
501
|
+
await demoteParticipants(msg.sessionId, msg.from, [jid]);
|
|
502
|
+
await safeSend(`✅ Admin-Rechte entfernt`);
|
|
503
|
+
} catch (e) {
|
|
504
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
505
|
+
}
|
|
506
|
+
break;
|
|
507
|
+
|
|
508
|
+
// ===========================================
|
|
509
|
+
// ADVANCED MESSAGING COMMANDS
|
|
510
|
+
// ===========================================
|
|
511
|
+
|
|
512
|
+
case '!ort':
|
|
513
|
+
const lat = parseFloat(args[0]);
|
|
514
|
+
const lon = parseFloat(args[1]);
|
|
515
|
+
|
|
516
|
+
if (isNaN(lat) || isNaN(lon)) {
|
|
517
|
+
await safeSend('❌ Verwendung: !ort <Breitengrad> <Längengrad>\nBeispiel: !ort 52.520008 13.404954');
|
|
518
|
+
break;
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
try {
|
|
522
|
+
await sendLocation(msg.sessionId, msg.from, lat, lon, 'Mein Standort');
|
|
523
|
+
await safeSend(`📍 Standort gesendet`);
|
|
524
|
+
} catch (e) {
|
|
525
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
526
|
+
}
|
|
527
|
+
break;
|
|
528
|
+
|
|
529
|
+
case '!reaktion':
|
|
530
|
+
const emoji = args[0];
|
|
531
|
+
if (!emoji) {
|
|
532
|
+
await safeSend('❌ Verwendung: !reaktion <emoji>\nBeispiel: !reaktion 👍');
|
|
533
|
+
break;
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
if (!msg.quoted) {
|
|
537
|
+
await safeSend('❌ Bitte antworte auf eine Nachricht');
|
|
538
|
+
break;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
try {
|
|
542
|
+
// Get the message ID from the quoted message
|
|
543
|
+
const quotedMsgId = msg.raw.message?.extendedTextMessage?.contextInfo?.stanzaId;
|
|
544
|
+
if (quotedMsgId) {
|
|
545
|
+
await sendReaction(msg.sessionId, msg.from, quotedMsgId, emoji);
|
|
546
|
+
} else {
|
|
547
|
+
await safeSend('❌ Konnte Nachricht nicht finden');
|
|
548
|
+
}
|
|
549
|
+
} catch (e) {
|
|
550
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
551
|
+
}
|
|
552
|
+
break;
|
|
553
|
+
|
|
554
|
+
case '!tippen':
|
|
555
|
+
try {
|
|
556
|
+
await sendTyping(msg.sessionId, msg.from, true);
|
|
557
|
+
await safeSend('⌨️ Tipp-Indikator angezeigt (5 Sekunden)');
|
|
558
|
+
setTimeout(async () => {
|
|
559
|
+
await sendTyping(msg.sessionId, msg.from, false);
|
|
560
|
+
}, 5000);
|
|
561
|
+
} catch (e) {
|
|
562
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
563
|
+
}
|
|
564
|
+
break;
|
|
565
|
+
|
|
566
|
+
case '!aufnehmen':
|
|
567
|
+
try {
|
|
568
|
+
await sendRecording(msg.sessionId, msg.from, true);
|
|
569
|
+
await safeSend('🎙️ Aufnahme-Indikator angezeigt (5 Sekunden)');
|
|
570
|
+
setTimeout(async () => {
|
|
571
|
+
await sendRecording(msg.sessionId, msg.from, false);
|
|
572
|
+
}, 5000);
|
|
573
|
+
} catch (e) {
|
|
574
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
575
|
+
}
|
|
576
|
+
break;
|
|
577
|
+
|
|
578
|
+
// ===========================================
|
|
579
|
+
// CONTACT & PROFILE COMMANDS
|
|
580
|
+
// ===========================================
|
|
581
|
+
|
|
582
|
+
case '!profilbild':
|
|
583
|
+
try {
|
|
584
|
+
// Get sender's JID (use participant if in group)
|
|
585
|
+
const senderJid = msg.isGroup ? msg.participant : msg.from;
|
|
586
|
+
const url = await getProfilePicture(msg.sessionId, senderJid);
|
|
587
|
+
|
|
588
|
+
if (url) {
|
|
589
|
+
await safeSend(`🖼️ *Profilbild:*\n\n${url}`);
|
|
590
|
+
} else {
|
|
591
|
+
await safeSend('❌ Kein Profilbild vorhanden');
|
|
592
|
+
}
|
|
593
|
+
} catch (e) {
|
|
594
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
595
|
+
}
|
|
596
|
+
break;
|
|
597
|
+
|
|
598
|
+
case '!status':
|
|
599
|
+
try {
|
|
600
|
+
const senderJid = msg.isGroup ? msg.participant : msg.from;
|
|
601
|
+
const status = await getStatus(msg.sessionId, senderJid);
|
|
602
|
+
|
|
603
|
+
if (status?.status) {
|
|
604
|
+
await safeSend(`💬 *Status:*\n\n${status.status}`);
|
|
605
|
+
} else {
|
|
606
|
+
await safeSend('❌ Kein Status vorhanden');
|
|
607
|
+
}
|
|
608
|
+
} catch (e) {
|
|
609
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
610
|
+
}
|
|
611
|
+
break;
|
|
612
|
+
|
|
613
|
+
case '!kontakt':
|
|
614
|
+
try {
|
|
615
|
+
const senderJid = msg.isGroup ? msg.participant : msg.from;
|
|
616
|
+
const contact = await getContact(msg.sessionId, senderJid);
|
|
617
|
+
|
|
618
|
+
let contactInfo = `👤 *Kontaktinfo:*\n\n`;
|
|
619
|
+
contactInfo += `JID: ${contact.jid}\n`;
|
|
620
|
+
contactInfo += `Nummer: ${contact.jid.split('@')[0]}\n`;
|
|
621
|
+
contactInfo += `Exists: ${contact.exists ? 'Ja' : 'Nein'}\n`;
|
|
622
|
+
|
|
623
|
+
await safeSend(contactInfo);
|
|
624
|
+
} catch (e) {
|
|
625
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
626
|
+
}
|
|
627
|
+
break;
|
|
628
|
+
|
|
629
|
+
case '!meinestatus':
|
|
630
|
+
const newStatus = args.join(' ');
|
|
631
|
+
if (!newStatus) {
|
|
632
|
+
await safeSend('❌ Verwendung: !meinestatus <neuer Status>');
|
|
633
|
+
break;
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
try {
|
|
637
|
+
await updateProfileStatus(msg.sessionId, newStatus);
|
|
638
|
+
await safeSend(`✅ Status geändert zu: "${newStatus}"`);
|
|
639
|
+
} catch (e) {
|
|
640
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
641
|
+
}
|
|
642
|
+
break;
|
|
643
|
+
|
|
644
|
+
// ===========================================
|
|
645
|
+
// POLL, BROADCAST, QUEUE & STATUS COMMANDS
|
|
646
|
+
// ===========================================
|
|
647
|
+
|
|
648
|
+
case '!umfrage':
|
|
649
|
+
const pollQuestion = args.join(' ');
|
|
650
|
+
if (!pollQuestion || !pollQuestion.includes('|')) {
|
|
651
|
+
await safeSend('❌ Verwendung: !umfrage Frage|Option1|Option2|Option3\nBeispiel: !umfrage Pizza oder Pasta?|Pizza|Pasta');
|
|
652
|
+
break;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
try {
|
|
656
|
+
const [question, ...options] = pollQuestion.split('|').map(s => s.trim());
|
|
657
|
+
await sendPoll(msg.sessionId, msg.from, question, options);
|
|
658
|
+
await safeSend('✅ Umfrage gesendet!');
|
|
659
|
+
} catch (e) {
|
|
660
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
661
|
+
}
|
|
662
|
+
break;
|
|
663
|
+
|
|
664
|
+
case '!broadcast':
|
|
665
|
+
const broadcastText = args.join(' ');
|
|
666
|
+
if (!broadcastText) {
|
|
667
|
+
await safeSend('❌ Verwendung: !broadcast <Text>');
|
|
668
|
+
break;
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
try {
|
|
672
|
+
// Example: broadcast to first 3 contacts (customize as needed)
|
|
673
|
+
const sessions = client.getAllSessions();
|
|
674
|
+
const recipients = ['491234567890@s.whatsapp.net']; // Add real numbers
|
|
675
|
+
|
|
676
|
+
await safeSend('📢 Sende Broadcast...');
|
|
677
|
+
const results = await sendBroadcast(msg.sessionId, recipients, { text: broadcastText });
|
|
678
|
+
|
|
679
|
+
const successful = results.filter(r => r.success).length;
|
|
680
|
+
await safeSend(`✅ Broadcast: ${successful}/${results.length} erfolgreich`);
|
|
681
|
+
} catch (e) {
|
|
682
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
683
|
+
}
|
|
684
|
+
break;
|
|
685
|
+
|
|
686
|
+
case '!status':
|
|
687
|
+
const statusText = args.join(' ');
|
|
688
|
+
if (!statusText) {
|
|
689
|
+
await safeSend('❌ Verwendung: !status <Text>');
|
|
690
|
+
break;
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
try {
|
|
694
|
+
await uploadStatus(msg.sessionId, { text: statusText });
|
|
695
|
+
await safeSend('✅ Status hochgeladen!');
|
|
696
|
+
} catch (e) {
|
|
697
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
698
|
+
}
|
|
699
|
+
break;
|
|
700
|
+
|
|
701
|
+
case '!queue':
|
|
702
|
+
const queueText = args.join(' ');
|
|
703
|
+
if (!queueText) {
|
|
704
|
+
await safeSend('❌ Verwendung: !queue <Text>');
|
|
705
|
+
break;
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
try {
|
|
709
|
+
queueMessage(msg.sessionId, msg.from, { text: queueText }, 0);
|
|
710
|
+
await safeSend('✅ Nachricht zur Queue hinzugefügt');
|
|
711
|
+
} catch (e) {
|
|
712
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
713
|
+
}
|
|
714
|
+
break;
|
|
715
|
+
|
|
716
|
+
case '!queuestatus':
|
|
717
|
+
try {
|
|
718
|
+
const queueStatus = getQueueStatus(msg.sessionId);
|
|
719
|
+
let queueInfo = `📊 *Queue Status*\n\n`;
|
|
720
|
+
queueInfo += `Warteschlange: ${queueStatus.queueLength} Nachrichten\n`;
|
|
721
|
+
|
|
722
|
+
if (queueStatus.rateLimit) {
|
|
723
|
+
queueInfo += `Rate Limit: ${queueStatus.rateLimit.count}/${queueStatus.rateLimit.limit}\n`;
|
|
724
|
+
queueInfo += `Reset in: ${Math.round(queueStatus.rateLimit.resetIn / 1000)}s\n`;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
await safeSend(queueInfo);
|
|
728
|
+
} catch (e) {
|
|
729
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
730
|
+
}
|
|
731
|
+
break;
|
|
732
|
+
|
|
733
|
+
case '!clearqueue':
|
|
734
|
+
try {
|
|
735
|
+
clearQueue(msg.sessionId);
|
|
736
|
+
await safeSend('✅ Queue geleert');
|
|
737
|
+
} catch (e) {
|
|
738
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
739
|
+
}
|
|
740
|
+
break;
|
|
741
|
+
|
|
742
|
+
case '!ratelimit':
|
|
743
|
+
const limit = parseInt(args[0]);
|
|
744
|
+
if (isNaN(limit) || limit < 1) {
|
|
745
|
+
await safeSend('❌ Verwendung: !ratelimit <Anzahl pro Minute>\nBeispiel: !ratelimit 30');
|
|
746
|
+
break;
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
try {
|
|
750
|
+
setRateLimit(msg.sessionId, limit);
|
|
751
|
+
await safeSend(`✅ Rate Limit gesetzt: ${limit} Nachrichten/Minute`);
|
|
752
|
+
} catch (e) {
|
|
753
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
754
|
+
}
|
|
755
|
+
break;
|
|
756
|
+
|
|
757
|
+
// ===========================================
|
|
758
|
+
// CONNECTION HEALTH & AUTO-RECONNECT
|
|
759
|
+
// ===========================================
|
|
760
|
+
|
|
761
|
+
case '!autoreconnect':
|
|
762
|
+
try {
|
|
763
|
+
setAutoReconnect(msg.sessionId, true, 5, 2);
|
|
764
|
+
await safeSend('✅ Auto-Reconnect aktiviert\n- Max Retries: 5\n- Backoff: 2x');
|
|
765
|
+
} catch (e) {
|
|
766
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
767
|
+
}
|
|
768
|
+
break;
|
|
769
|
+
|
|
770
|
+
case '!health':
|
|
771
|
+
try {
|
|
772
|
+
const health = getConnectionHealth(msg.sessionId);
|
|
773
|
+
let healthInfo = `🏥 *Connection Health*\n\n`;
|
|
774
|
+
healthInfo += `Status: ${health.connected ? '🟢 Verbunden' : '🔴 Getrennt'}\n`;
|
|
775
|
+
healthInfo += `Uptime: ${Math.round(health.uptime / 1000)}s\n`;
|
|
776
|
+
healthInfo += `Auto-Reconnect: ${health.autoReconnect ? 'Aktiv' : 'Inaktiv'}\n`;
|
|
777
|
+
|
|
778
|
+
if (health.autoReconnect) {
|
|
779
|
+
healthInfo += `Retries: ${health.retryCount}/${health.maxRetries}\n`;
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
await safeSend(healthInfo);
|
|
783
|
+
} catch (e) {
|
|
784
|
+
await safeSend(`❌ Fehler: ${e.message}`);
|
|
785
|
+
}
|
|
786
|
+
break;
|
|
787
|
+
|
|
788
|
+
// ===========================================
|
|
789
|
+
// SESSION MANAGEMENT COMMANDS
|
|
790
|
+
// ===========================================
|
|
791
|
+
|
|
243
792
|
case '!neustart':
|
|
244
793
|
if (!targetSession) {
|
|
245
794
|
await safeSend('❌ Verwendung: !neustart <sessionId>');
|