@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/socket.js CHANGED
@@ -1,4 +1,43 @@
1
- import { startSession, onMessage, sendText, client, getAllSessionsInfo, getGlobalStats, countReceivedMessage } from './nishi-wa-api-new/src/index.js';
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>');