@realvare/based 2.5.1
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/LICENSE +41 -0
- package/README.MD +829 -0
- package/WAProto/GenerateStatics.sh +4 -0
- package/WAProto/WAProto.proto +4775 -0
- package/WAProto/index.d.ts +55057 -0
- package/WAProto/index.js +169661 -0
- package/WAProto/index.ts.ts +53473 -0
- package/WAProto/p.html +1 -0
- package/engine-requirements.js +10 -0
- package/lib/Defaults/baileys-version.json +3 -0
- package/lib/Defaults/index.d.ts +51 -0
- package/lib/Defaults/index.js +106 -0
- package/lib/Signal/Group/ciphertext-message.d.ts +9 -0
- package/lib/Signal/Group/ciphertext-message.js +15 -0
- package/lib/Signal/Group/group-session-builder.d.ts +14 -0
- package/lib/Signal/Group/group-session-builder.js +64 -0
- package/lib/Signal/Group/group_cipher.d.ts +17 -0
- package/lib/Signal/Group/group_cipher.js +96 -0
- package/lib/Signal/Group/index.d.ts +11 -0
- package/lib/Signal/Group/index.js +57 -0
- package/lib/Signal/Group/keyhelper.d.ts +10 -0
- package/lib/Signal/Group/keyhelper.js +55 -0
- package/lib/Signal/Group/queue-job.d.ts +1 -0
- package/lib/Signal/Group/queue-job.js +57 -0
- package/lib/Signal/Group/sender-chain-key.d.ts +13 -0
- package/lib/Signal/Group/sender-chain-key.js +34 -0
- package/lib/Signal/Group/sender-key-distribution-message.d.ts +16 -0
- package/lib/Signal/Group/sender-key-distribution-message.js +66 -0
- package/lib/Signal/Group/sender-key-message.d.ts +18 -0
- package/lib/Signal/Group/sender-key-message.js +69 -0
- package/lib/Signal/Group/sender-key-name.d.ts +17 -0
- package/lib/Signal/Group/sender-key-name.js +51 -0
- package/lib/Signal/Group/sender-key-record.d.ts +30 -0
- package/lib/Signal/Group/sender-key-record.js +53 -0
- package/lib/Signal/Group/sender-key-state.d.ts +38 -0
- package/lib/Signal/Group/sender-key-state.js +99 -0
- package/lib/Signal/Group/sender-message-key.d.ts +11 -0
- package/lib/Signal/Group/sender-message-key.js +29 -0
- package/lib/Signal/libsignal.d.ts +3 -0
- package/lib/Signal/libsignal.js +174 -0
- package/lib/Socket/Client/index.d.ts +2 -0
- package/lib/Socket/Client/index.js +18 -0
- package/lib/Socket/Client/types.d.ts +16 -0
- package/lib/Socket/Client/types.js +13 -0
- package/lib/Socket/Client/websocket.d.ts +13 -0
- package/lib/Socket/Client/websocket.js +111 -0
- package/lib/Socket/business.d.ts +172 -0
- package/lib/Socket/business.js +260 -0
- package/lib/Socket/chats.d.ts +82 -0
- package/lib/Socket/chats.js +890 -0
- package/lib/Socket/groups.d.ts +124 -0
- package/lib/Socket/groups.js +332 -0
- package/lib/Socket/index.d.ts +172 -0
- package/lib/Socket/index.js +10 -0
- package/lib/Socket/messages-recv.d.ts +161 -0
- package/lib/Socket/messages-recv.js +1054 -0
- package/lib/Socket/messages-send.d.ts +151 -0
- package/lib/Socket/messages-send.js +900 -0
- package/lib/Socket/newsletter.d.ts +136 -0
- package/lib/Socket/newsletter.js +250 -0
- package/lib/Socket/socket.d.ts +43 -0
- package/lib/Socket/socket.js +654 -0
- package/lib/Socket/usync.d.ts +36 -0
- package/lib/Socket/usync.js +70 -0
- package/lib/Store/index.d.ts +2 -0
- package/lib/Store/index.js +8 -0
- package/lib/Store/make-in-memory-store.d.ts +118 -0
- package/lib/Store/make-in-memory-store.js +439 -0
- package/lib/Store/make-ordered-dictionary.d.ts +13 -0
- package/lib/Store/make-ordered-dictionary.js +81 -0
- package/lib/Store/object-repository.d.ts +10 -0
- package/lib/Store/object-repository.js +27 -0
- package/lib/Types/Auth.d.ts +103 -0
- package/lib/Types/Auth.js +2 -0
- package/lib/Types/Call.d.ts +13 -0
- package/lib/Types/Call.js +2 -0
- package/lib/Types/Chat.d.ts +109 -0
- package/lib/Types/Chat.js +4 -0
- package/lib/Types/Contact.d.ts +23 -0
- package/lib/Types/Contact.js +2 -0
- package/lib/Types/Events.d.ts +199 -0
- package/lib/Types/Events.js +2 -0
- package/lib/Types/GroupMetadata.d.ts +64 -0
- package/lib/Types/GroupMetadata.js +2 -0
- package/lib/Types/Label.d.ts +35 -0
- package/lib/Types/Label.js +27 -0
- package/lib/Types/LabelAssociation.d.ts +29 -0
- package/lib/Types/LabelAssociation.js +9 -0
- package/lib/Types/Message.d.ts +414 -0
- package/lib/Types/Message.js +7 -0
- package/lib/Types/Newsletter.d.ts +79 -0
- package/lib/Types/Newsletter.js +18 -0
- package/lib/Types/Product.d.ts +78 -0
- package/lib/Types/Product.js +2 -0
- package/lib/Types/Signal.d.ts +57 -0
- package/lib/Types/Signal.js +2 -0
- package/lib/Types/Socket.d.ts +119 -0
- package/lib/Types/Socket.js +2 -0
- package/lib/Types/State.d.ts +27 -0
- package/lib/Types/State.js +2 -0
- package/lib/Types/USync.d.ts +25 -0
- package/lib/Types/USync.js +2 -0
- package/lib/Types/index.d.ts +64 -0
- package/lib/Types/index.js +42 -0
- package/lib/Utils/auth-utils.d.ts +18 -0
- package/lib/Utils/auth-utils.js +199 -0
- package/lib/Utils/baileys-event-stream.d.ts +16 -0
- package/lib/Utils/baileys-event-stream.js +63 -0
- package/lib/Utils/business.d.ts +22 -0
- package/lib/Utils/business.js +234 -0
- package/lib/Utils/chat-utils.d.ts +70 -0
- package/lib/Utils/chat-utils.js +730 -0
- package/lib/Utils/crypto.d.ts +40 -0
- package/lib/Utils/crypto.js +193 -0
- package/lib/Utils/decode-wa-message.d.ts +35 -0
- package/lib/Utils/decode-wa-message.js +207 -0
- package/lib/Utils/event-buffer.d.ts +35 -0
- package/lib/Utils/event-buffer.js +518 -0
- package/lib/Utils/generics.d.ts +89 -0
- package/lib/Utils/generics.js +441 -0
- package/lib/Utils/history.d.ts +19 -0
- package/lib/Utils/history.js +94 -0
- package/lib/Utils/index.d.ts +17 -0
- package/lib/Utils/index.js +34 -0
- package/lib/Utils/link-preview.d.ts +21 -0
- package/lib/Utils/link-preview.js +126 -0
- package/lib/Utils/logger.d.ts +11 -0
- package/lib/Utils/logger.js +7 -0
- package/lib/Utils/lt-hash.d.ts +12 -0
- package/lib/Utils/lt-hash.js +51 -0
- package/lib/Utils/make-mutex.d.ts +7 -0
- package/lib/Utils/make-mutex.js +43 -0
- package/lib/Utils/messages-media.d.ts +120 -0
- package/lib/Utils/messages-media.js +879 -0
- package/lib/Utils/messages.d.ts +131 -0
- package/lib/Utils/messages.js +1290 -0
- package/lib/Utils/noise-handler.d.ts +19 -0
- package/lib/Utils/noise-handler.js +150 -0
- package/lib/Utils/performance-config.d.ts +60 -0
- package/lib/Utils/performance-config.js +150 -0
- package/lib/Utils/process-message.d.ts +42 -0
- package/lib/Utils/process-message.js +404 -0
- package/lib/Utils/retry.js +66 -0
- package/lib/Utils/signal.d.ts +33 -0
- package/lib/Utils/signal.js +153 -0
- package/lib/Utils/use-multi-file-auth-state.d.ts +12 -0
- package/lib/Utils/use-multi-file-auth-state.js +125 -0
- package/lib/Utils/validate-connection.d.ts +10 -0
- package/lib/Utils/validate-connection.js +173 -0
- package/lib/WABinary/constants.d.ts +27 -0
- package/lib/WABinary/constants.js +1303 -0
- package/lib/WABinary/decode.d.ts +6 -0
- package/lib/WABinary/decode.js +265 -0
- package/lib/WABinary/encode.d.ts +2 -0
- package/lib/WABinary/encode.js +250 -0
- package/lib/WABinary/generic-utils.d.ts +14 -0
- package/lib/WABinary/generic-utils.js +110 -0
- package/lib/WABinary/index.d.ts +5 -0
- package/lib/WABinary/index.js +21 -0
- package/lib/WABinary/jid-utils.d.ts +37 -0
- package/lib/WABinary/jid-utils.js +140 -0
- package/lib/WABinary/jid-utils.js.bak +83 -0
- package/lib/WABinary/types.d.ts +18 -0
- package/lib/WABinary/types.js +2 -0
- package/lib/WAM/BinaryInfo.d.ts +8 -0
- package/lib/WAM/BinaryInfo.js +13 -0
- package/lib/WAM/constants.d.ts +38 -0
- package/lib/WAM/constants.js +15350 -0
- package/lib/WAM/encode.d.ts +2 -0
- package/lib/WAM/encode.js +155 -0
- package/lib/WAM/index.d.ts +3 -0
- package/lib/WAM/index.js +19 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +32 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +22 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +57 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +30 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +42 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +25 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +53 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +8 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +24 -0
- package/lib/WAUSync/Protocols/index.d.ts +4 -0
- package/lib/WAUSync/Protocols/index.js +20 -0
- package/lib/WAUSync/USyncQuery.d.ts +28 -0
- package/lib/WAUSync/USyncQuery.js +89 -0
- package/lib/WAUSync/USyncUser.d.ts +12 -0
- package/lib/WAUSync/USyncUser.js +26 -0
- package/lib/WAUSync/index.d.ts +3 -0
- package/lib/WAUSync/index.js +19 -0
- package/lib/index.d.ts +16 -0
- package/lib/index.js +52 -0
- package/package.json +111 -0
package/README.MD
ADDED
|
@@ -0,0 +1,829 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# 🌌 Based - by Sam aka vare
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
<p align="center">
|
|
7
|
+
<img src="https://img.shields.io/badge/Licenza-MIT-8a2be2.svg?style=for-the-badge&labelColor=2d1b69" alt="Licenza: MIT"/>
|
|
8
|
+
<img src="https://img.shields.io/github/stars/realvare/based?style=for-the-badge&color=8a2be2&labelColor=2d1b69" alt="GitHub stelle"/>
|
|
9
|
+
<img src="https://img.shields.io/github/forks/realvare/based?style=for-the-badge&color=8a2be2&labelColor=2d1b69" alt="GitHub Forks"/>
|
|
10
|
+
</p>
|
|
11
|
+
<div align="center">
|
|
12
|
+
<p align="center">
|
|
13
|
+
<strong>💜 Una libreria WhatsApp Web API moderna, potente e veloce con supporto avanzato per LID/JID</strong>
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<p align="center">
|
|
17
|
+
<a href="#-caratteristiche-principali">Caratteristiche</a> •
|
|
18
|
+
<a href="#-installazione">Installazione</a> •
|
|
19
|
+
<a href="#-guida-rapida">Guida Rapida</a> •
|
|
20
|
+
<a href="#-documentazione-api">Documentazione API</a> •
|
|
21
|
+
<a href="#-messaggi-interattivi-e-bottoni">Messaggi Interattivi</a> •
|
|
22
|
+
<a href="#-fix-lidjid">Fix LID/JID</a> •
|
|
23
|
+
<a href="#-configurazione-avanzata">Configurazione Avanzata</a> •
|
|
24
|
+
<a href="#-supporto-e-community">Supporto</a>
|
|
25
|
+
</p>
|
|
26
|
+
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## ✨ Caratteristiche Principali
|
|
32
|
+
|
|
33
|
+
Questa libreria, basata su Baileys con miglioramenti specifici, offre un'API intuitiva per interagire con WhatsApp Web. Ecco un riassunto delle funzionalità chiave:
|
|
34
|
+
|
|
35
|
+
| Categoria | Dettagli |
|
|
36
|
+
|-----------|----------|
|
|
37
|
+
| **Core Features** | - 🔄 Mappatura intelligente `@lid` e `@s.whatsapp.net` (JID)<br>- 📱 Supporto multi-dispositivo completo<br>- 🔒 Crittografia End-to-End nativa (Protocollo Signal)<br>- ⚡ Codebase TypeScript moderna e ottimizzata |
|
|
38
|
+
| **Messaggi e Interazioni** | - 💬 Gestione avanzata di messaggi testo, media e interattivi<br>- 🎛️ Supporto per bottoni, liste, carousel e template<br>- 🖼️ Invio di album, poll e reazioni |
|
|
39
|
+
| **Developer Experience** | - 📡 Eventi real-time per connessioni e messaggi<br>- 🛡️ Tipizzazioni TypeScript complete<br>- 📖 Documentazione estesa con esempi<br>- 🔧 API semplici e estendibili |
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 🚀 Guida Rapida
|
|
44
|
+
|
|
45
|
+
Inizia creando un bot semplice. Questa sezione include esempi base per l'autenticazione e la gestione delle connessioni.
|
|
46
|
+
|
|
47
|
+
### Esempio Base - Avvio Bot
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
import makeWASocket, { DisconnectReason, useMultiFileAuthState, getPerformanceConfig, setPerformanceConfig } from 'realvare/based';
|
|
51
|
+
|
|
52
|
+
// Configura performance e cache
|
|
53
|
+
setPerformanceConfig({
|
|
54
|
+
performance: {
|
|
55
|
+
enableCache: true,
|
|
56
|
+
enableMetrics: true
|
|
57
|
+
},
|
|
58
|
+
debug: {
|
|
59
|
+
enableLidLogging: true,
|
|
60
|
+
logLevel: 'info'
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
async function startBot() {
|
|
65
|
+
// 🔐 Setup autenticazione multi-file per sessioni persistenti
|
|
66
|
+
const { state, saveCreds } = await useMultiFileAuthState('auth_info_baileys');
|
|
67
|
+
|
|
68
|
+
// 🌐 Creazione del socket con configurazione base
|
|
69
|
+
const sock = makeWASocket({
|
|
70
|
+
auth: state,
|
|
71
|
+
printQRInTerminal: true, // Stampa QR nel terminale per scansione
|
|
72
|
+
logger: console,
|
|
73
|
+
browser: ['VareBot', 'Chrome', '4.0.0'], // Simula un browser
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
// 📡 Gestione aggiornamenti connessione
|
|
77
|
+
conn.ev.on('connection.update', (update) => {
|
|
78
|
+
const { connection, lastDisconnect } = update;
|
|
79
|
+
|
|
80
|
+
if (connection === 'close') {
|
|
81
|
+
const shouldReconnect = lastDisconnect?.error?.output?.statusCode !== DisconnectReason.loggedOut;
|
|
82
|
+
console.log('🔴 Connessione chiusa:', lastDisconnect?.error, 'Riconnessione:', shouldReconnect);
|
|
83
|
+
|
|
84
|
+
if (shouldReconnect) {
|
|
85
|
+
startBot(); // Riconnessione automatica
|
|
86
|
+
}
|
|
87
|
+
} else if (connection === 'open') {
|
|
88
|
+
console.log('🟢 Connesso con successo!');
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
// 💾 Salva credenziali automaticamente
|
|
93
|
+
conn.ev.on('creds.update', saveCreds);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
startBot().catch(console.error);
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Gestione Messaggi Base con LID/JID
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
import makeWASocket, { getSenderLid, toJid, getCacheStats, validateJid, Logger } from 'realvare/based';
|
|
103
|
+
|
|
104
|
+
// ... (codice di creazione sock qui)
|
|
105
|
+
|
|
106
|
+
conn.ev.on('messages.upsert', ({ messages }) => {
|
|
107
|
+
for (const msg of messages) {
|
|
108
|
+
// 🔍 Estrai LID del mittente con validazione
|
|
109
|
+
const info = getSenderLid(msg);
|
|
110
|
+
|
|
111
|
+
// ✅ Valida JID prima di usarlo
|
|
112
|
+
const validation = validateJid(info.jid);
|
|
113
|
+
if (!validation.isValid) {
|
|
114
|
+
Logger.error('JID non valido:', validation.error);
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const jid = toJid(info.lid); // Normalizza in JID
|
|
119
|
+
|
|
120
|
+
Logger.info('💬 Messaggio da:', jid, 'Valid:', info.isValid);
|
|
121
|
+
console.log('📝 Contenuto:', msg.message?.conversation);
|
|
122
|
+
|
|
123
|
+
// Rispondi automaticamente solo se valido
|
|
124
|
+
if (info.isValid) {
|
|
125
|
+
conn.sendMessage(jid, { text: 'Messaggio ricevuto!' });
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// 📊 Monitora performance cache
|
|
130
|
+
const stats = getCacheStats();
|
|
131
|
+
Logger.performance('Cache stats:', stats);
|
|
132
|
+
});
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## 📚 Documentazione API
|
|
138
|
+
|
|
139
|
+
Questa sezione espande i metodi principali, con esempi dettagliati e parametri. Tutti i metodi sono tipizzati in TypeScript per un'esperienza di sviluppo sicura.
|
|
140
|
+
|
|
141
|
+
### 🏗️ Metodi Fondamentali
|
|
142
|
+
|
|
143
|
+
<details>
|
|
144
|
+
<summary><strong>📡 makeWASocket(config)</strong></summary>
|
|
145
|
+
|
|
146
|
+
Crea un'istanza del socket WhatsApp. È il punto di ingresso principale.
|
|
147
|
+
|
|
148
|
+
**Parametri:**
|
|
149
|
+
- `config`: Oggetto con opzioni (vedi sezione Configurazione Avanzata per dettagli completi).
|
|
150
|
+
|
|
151
|
+
**Restituisce:** Istanza del socket con metodi come `sendMessage` e `ev` per eventi.
|
|
152
|
+
|
|
153
|
+
**Esempio:**
|
|
154
|
+
```typescript
|
|
155
|
+
const sock = makeWASocket({
|
|
156
|
+
auth: state,
|
|
157
|
+
printQRInTerminal: true,
|
|
158
|
+
logger: console,
|
|
159
|
+
browser: ['Varebot', 'Chrome', '4.0.0'],
|
|
160
|
+
});
|
|
161
|
+
```
|
|
162
|
+
</details>
|
|
163
|
+
|
|
164
|
+
<details>
|
|
165
|
+
<summary><strong>🔐 useMultiFileAuthState(folder)</strong></summary>
|
|
166
|
+
|
|
167
|
+
Gestisce l'autenticazione persistente salvando credenziali in file multipli per sicurezza.
|
|
168
|
+
|
|
169
|
+
**Parametri:**
|
|
170
|
+
- `folder`: Stringa, path della cartella per i file di auth (es. 'auth_info').
|
|
171
|
+
|
|
172
|
+
**Restituisce:**
|
|
173
|
+
- `{ state, saveCreds }`: Stato autenticazione e funzione per salvare aggiornamenti.
|
|
174
|
+
|
|
175
|
+
**Esempio:**
|
|
176
|
+
```typescript
|
|
177
|
+
const { state, saveCreds } = await useMultiFileAuthState('auth_info');
|
|
178
|
+
conn.ev.on('creds.update', saveCreds); // Integra nel socket
|
|
179
|
+
```
|
|
180
|
+
</details>
|
|
181
|
+
|
|
182
|
+
<details>
|
|
183
|
+
<summary><strong>🔄 getSenderLid(message) & toJid(lid)</strong></summary>
|
|
184
|
+
|
|
185
|
+
Utilità per gestire LID/JID, risolvendo problemi comuni in gruppi e multi-dispositivo.
|
|
186
|
+
|
|
187
|
+
**getSenderLid(message):**
|
|
188
|
+
- Estrae LID dal messaggio.
|
|
189
|
+
- Restituisce: Oggetto con `lid` e altre info mittente.
|
|
190
|
+
|
|
191
|
+
**toJid(lid):**
|
|
192
|
+
- Converte LID in JID normalizzato (es. aggiunge `@s.whatsapp.net`).
|
|
193
|
+
|
|
194
|
+
**Esempio:**
|
|
195
|
+
```typescript
|
|
196
|
+
const info = getSenderLid(msg);
|
|
197
|
+
const jid = toJid(info.lid);
|
|
198
|
+
conn.sendMessage(jid, { text: 'Risposta personalizzata' });
|
|
199
|
+
```
|
|
200
|
+
</details>
|
|
201
|
+
|
|
202
|
+
<details>
|
|
203
|
+
<summary><strong>📤 sendMessage(jid, content, options)</strong></summary>
|
|
204
|
+
|
|
205
|
+
Invia messaggi di vari tipi. Supporta testo, media, interattivi.
|
|
206
|
+
|
|
207
|
+
**Parametri:**
|
|
208
|
+
- `jid`: Stringa JID del destinatario.
|
|
209
|
+
- `content`: Oggetto messaggio (es. { text: 'Ciao' }).
|
|
210
|
+
- `options`: Opzionale, include `quoted`, `mentions`, ecc.
|
|
211
|
+
|
|
212
|
+
**Esempio Testo Semplice:**
|
|
213
|
+
```typescript
|
|
214
|
+
await conn.sendMessage(jid, { text: 'Ciao Mondo!' });
|
|
215
|
+
```
|
|
216
|
+
</details>
|
|
217
|
+
|
|
218
|
+
### 🎯 Eventi Principali
|
|
219
|
+
|
|
220
|
+
| Evento | Descrizione | Callback Signature |
|
|
221
|
+
|---------------------|--------------------------------------|-----------------------------|
|
|
222
|
+
| `connection.update` | Aggiornamenti stato connessione | `(update: Partial<ConnectionState>) => void` |
|
|
223
|
+
| `creds.update` | Aggiornamento credenziali | `() => void` |
|
|
224
|
+
| `messages.upsert` | Nuovi messaggi o aggiornamenti | `({ messages: WAMessage[], type: MessageUpsertType }) => void` |
|
|
225
|
+
| `messages.update` | Modifiche a messaggi esistenti | `(update: WAMessageUpdate[]) => void` |
|
|
226
|
+
| `group-participants.update` | Cambiamenti partecipanti gruppo | `(update: GroupParticipantEvent) => void` |
|
|
227
|
+
|
|
228
|
+
**Esempio Registrazione Evento:**
|
|
229
|
+
```typescript
|
|
230
|
+
conn.ev.on('group-participants.update', (update) => {
|
|
231
|
+
console.log('Partecipante aggiornato:', update);
|
|
232
|
+
});
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## 🎪 Messaggi Interattivi e Bottoni
|
|
238
|
+
|
|
239
|
+
### Metodi per Messaggi Non Interattivi
|
|
240
|
+
|
|
241
|
+
Questi metodi inviano contenuti semplici senza elementi cliccabili.
|
|
242
|
+
|
|
243
|
+
#### Messaggi di Testo
|
|
244
|
+
Invia un messaggio di testo semplice, con supporto per menzioni.
|
|
245
|
+
|
|
246
|
+
```typescript
|
|
247
|
+
await conn.sendMessage(jid, {
|
|
248
|
+
text: 'finchevedotuttoviolaviola',
|
|
249
|
+
mentions: ['393476686131@s.whatsapp.net']
|
|
250
|
+
});
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
#### Messaggi Immagine
|
|
254
|
+
Invia un'immagine con caption opzionale.
|
|
255
|
+
|
|
256
|
+
```typescript
|
|
257
|
+
await conn.sendMessage(jid, {
|
|
258
|
+
image: { url: 'https://i.ibb.co/hJW7Wwx/varebot.jpg' },
|
|
259
|
+
caption: 'out soon!'
|
|
260
|
+
});
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
#### Messaggi Video
|
|
264
|
+
Invia un video con caption e mimetype.
|
|
265
|
+
|
|
266
|
+
```typescript
|
|
267
|
+
await conn.sendMessage(jid, {
|
|
268
|
+
video: { url: 'https://example.com/video.mp4' },
|
|
269
|
+
caption: 'peak!',
|
|
270
|
+
mimetype: 'video/mp4'
|
|
271
|
+
});
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
#### Messaggi Audio
|
|
275
|
+
Invia un file audio (nota vocale o file).
|
|
276
|
+
|
|
277
|
+
```typescript
|
|
278
|
+
await conn.sendMessage(jid, {
|
|
279
|
+
audio: { url: 'https://esempio.com/audio.ogg' },
|
|
280
|
+
mimetype: 'audio/ogg; codecs=opus'
|
|
281
|
+
});
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
#### Messaggi Documento
|
|
285
|
+
Invia un documento con titolo e descrizione.
|
|
286
|
+
|
|
287
|
+
```typescript
|
|
288
|
+
await conn.sendMessage(jid, {
|
|
289
|
+
document: { url: 'https://esempio.com/file.pdf' },
|
|
290
|
+
mimetype: 'application/pdf',
|
|
291
|
+
fileName: 'documento.pdf',
|
|
292
|
+
fileLength: 1024
|
|
293
|
+
});
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
#### Messaggi Sticker
|
|
297
|
+
Invia uno sticker (animato o statico).
|
|
298
|
+
|
|
299
|
+
```typescript
|
|
300
|
+
await conn.sendMessage(jid, {
|
|
301
|
+
sticker: { url: 'https://i.ibb.co/4nxpDtTS/shhh2.webp' },
|
|
302
|
+
mimetype: 'image/webp'
|
|
303
|
+
});
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
#### Messaggi Posizione
|
|
307
|
+
Invia una posizione geografica.
|
|
308
|
+
|
|
309
|
+
```typescript
|
|
310
|
+
await conn.sendMessage(jid, {
|
|
311
|
+
location: {
|
|
312
|
+
degreesLatitude: 45.4642,
|
|
313
|
+
degreesLongitude: 9.1900,
|
|
314
|
+
name: 'Milano, Italia'
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
#### Messaggi Contatto
|
|
320
|
+
Invia un vCard di un contatto.
|
|
321
|
+
|
|
322
|
+
```typescript
|
|
323
|
+
await conn.sendMessage(jid, {
|
|
324
|
+
contacts: {
|
|
325
|
+
displayName: 'Sam aka vare',
|
|
326
|
+
contacts: [{ vcard: 'BEGIN:VCARD\nVERSION:3.0\nFN:Sam\nTEL;waid=393476686131:+39 347 6686131\nEND:VCARD' }]
|
|
327
|
+
}
|
|
328
|
+
});
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
#### Messaggi Poll (Sondaggio)
|
|
332
|
+
Invia un sondaggio con opzioni.
|
|
333
|
+
|
|
334
|
+
```typescript
|
|
335
|
+
await conn.sendMessage(jid, {
|
|
336
|
+
poll: {
|
|
337
|
+
name: 'Anime preferito?',
|
|
338
|
+
values: ['Aot', 'Bleach', 'Death note'],
|
|
339
|
+
selectableCount: 1 // quante scelte possibili
|
|
340
|
+
}
|
|
341
|
+
});
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
#### Reazioni ai Messaggi
|
|
345
|
+
Aggiunge una reazione a un messaggio esistente.
|
|
346
|
+
|
|
347
|
+
```typescript
|
|
348
|
+
await conn.sendMessage(jid, {
|
|
349
|
+
react: {
|
|
350
|
+
text: '🍥',
|
|
351
|
+
key: msg.key // Key del messaggio da reagire
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
#### Album (Multi-Media)
|
|
357
|
+
Invia un album di immagini/video misti.
|
|
358
|
+
|
|
359
|
+
```typescript
|
|
360
|
+
await conn.sendMessage(jid, {
|
|
361
|
+
album: [
|
|
362
|
+
{ image: { url: 'img1.jpg' }, caption: 'Foto 1' },
|
|
363
|
+
{ video: { url: 'vid1.mp4' }, caption: 'Video 1' },
|
|
364
|
+
],
|
|
365
|
+
});
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
### Metodi per Messaggi Interattivi
|
|
369
|
+
|
|
370
|
+
Questi messaggi includono elementi interattivi come bottoni, liste e template.
|
|
371
|
+
|
|
372
|
+
#### Messaggi con Bottoni Semplici
|
|
373
|
+
Invia bottoni di risposta rapida.
|
|
374
|
+
|
|
375
|
+
```typescript
|
|
376
|
+
await conn.sendMessage(jid, {
|
|
377
|
+
text: 'Scegli un\'opzione:',
|
|
378
|
+
footer: 'Footer',
|
|
379
|
+
buttons: [
|
|
380
|
+
{ buttonId: 'cmd1', buttonText: { displayText: 'testo1' }, type: 1 },
|
|
381
|
+
{ buttonId: 'cmd2', buttonText: { displayText: 'testo2' }, type: 1 },
|
|
382
|
+
],
|
|
383
|
+
headerType: 1,
|
|
384
|
+
});
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
#### Messaggi con Bottoni e Immagine
|
|
388
|
+
Combina immagine con bottoni.
|
|
389
|
+
|
|
390
|
+
```typescript
|
|
391
|
+
await conn.sendMessage(jid, {
|
|
392
|
+
image: { url: 'https://i.ibb.co/hJW7Wwx/varebot.jpg' },
|
|
393
|
+
caption: 'Messaggio con bottoni e immagine',
|
|
394
|
+
footer: 'vare ✧ bot',
|
|
395
|
+
buttons: [
|
|
396
|
+
{ buttonId: 'cmd', buttonText: { displayText: 'testo1' }, type: 1 },
|
|
397
|
+
],
|
|
398
|
+
});
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
#### Messaggi Liste (Sezioni)
|
|
402
|
+
Invia una lista di opzioni (solo in privato).
|
|
403
|
+
|
|
404
|
+
```typescript
|
|
405
|
+
await conn.sendMessage(jid, {
|
|
406
|
+
text: 'Questa è una lista!',
|
|
407
|
+
footer: 'purplepurplepurple!',
|
|
408
|
+
title: 'Titolo Lista',
|
|
409
|
+
buttonText: 'Visualizza Lista',
|
|
410
|
+
sections: [
|
|
411
|
+
{
|
|
412
|
+
title: 'Sezione 1',
|
|
413
|
+
rows: [
|
|
414
|
+
{ title: 'Opzione 1', rowId: 'opt1' },
|
|
415
|
+
{ title: 'Opzione 2', rowId: 'opt2', description: 'Descrizione' }
|
|
416
|
+
]
|
|
417
|
+
},
|
|
418
|
+
],
|
|
419
|
+
});
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
#### Messaggi Carousel (Cards)
|
|
423
|
+
Invia un carousel di carte con bottoni URL.
|
|
424
|
+
|
|
425
|
+
```typescript
|
|
426
|
+
await conn.sendMessage(jid, {
|
|
427
|
+
text: '〖 🌸 〗 Benvenuto in VareBot!',
|
|
428
|
+
title: '',
|
|
429
|
+
footer: '',
|
|
430
|
+
cards: [
|
|
431
|
+
{
|
|
432
|
+
image: { url: 'https://i.ibb.co/hJW7Wwx/varebot.jpg' },
|
|
433
|
+
title: 'by sam aka vare',
|
|
434
|
+
body: '〖 💫 〗 Esplora funzionalità\n〖 🚀 〗 Bot aggiornato',
|
|
435
|
+
footer: '˗ˏˋ ☾ 𝚟𝚊𝚛𝚎𝚋𝚘𝚝 ☽ ˎˊ˗',
|
|
436
|
+
buttons: [
|
|
437
|
+
{ name: 'cta_url', buttonParamsJson: JSON.stringify({ display_text: 'Sito VareBot', url: 'https://varebot.netlify.app' }) },
|
|
438
|
+
{ name: 'cta_url', buttonParamsJson: JSON.stringify({ display_text: '💻 GitHub', url: 'https://github.com/realvare' }) },
|
|
439
|
+
{ name: 'cta_url', buttonParamsJson: JSON.stringify({ display_text: '💬 WhatsApp', url: 'https://wa.me/393476686131' }) },
|
|
440
|
+
{ name: 'cta_url', buttonParamsJson: JSON.stringify({ display_text: '📸 Instagram', url: 'https://instagram.com/samakavare' }) },
|
|
441
|
+
{ name: 'cta_url', buttonParamsJson: JSON.stringify({ display_text: '📧 Email', url: 'mailto:samakavare1@gmail.com' }) },
|
|
442
|
+
],
|
|
443
|
+
},
|
|
444
|
+
],
|
|
445
|
+
}, { quoted: m });
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
> **Nota:** Per tutti i messaggi interattivi, assicurati di gestire le risposte nei listener `messages.upsert` verificando `msg.message.buttonsResponseMessage` o simili per estrarre le selezioni.
|
|
449
|
+
|
|
450
|
+
---
|
|
451
|
+
|
|
452
|
+
## 🔧 Fix LID/JID nel Proprio Main e Handler
|
|
453
|
+
|
|
454
|
+
Il supporto LID/JID è un punto di forza di questa libreria, risolvendo problemi comuni come l'identificazione mittenti in gruppi e multi-dispositivo. Ecco come integrarlo nel tuo codice principale e handler, basandomi sui metodi estratti dai file forniti (main.js, handler.js e print.js).
|
|
455
|
+
|
|
456
|
+
### Best Practices per LID/JID
|
|
457
|
+
|
|
458
|
+
- **decodeJid(jid)**: Funzione principale per normalizzare JID/LID. Gestisce:
|
|
459
|
+
- Formati con `:\d+@` (usa `jidNormalizedUser`).
|
|
460
|
+
- Decodifica user/server in `${user}@${server}`.
|
|
461
|
+
- Converti `@lid` in `@s.whatsapp.net`.
|
|
462
|
+
|
|
463
|
+
**Esempio di Implementazione (da main.js):**
|
|
464
|
+
```typescript
|
|
465
|
+
decodeJid: (jid) => {
|
|
466
|
+
if (!jid) return jid;
|
|
467
|
+
let decoded = jid;
|
|
468
|
+
if (/:\d+@/gi.test(jid)) {
|
|
469
|
+
decoded = jidNormalizedUser(jid);
|
|
470
|
+
}
|
|
471
|
+
if (typeof decoded === 'object' && decoded.user && decoded.server) {
|
|
472
|
+
decoded = `${decoded.user}@${decoded.server}`;
|
|
473
|
+
}
|
|
474
|
+
if (decoded.endsWith('@lid')) {
|
|
475
|
+
decoded = decoded.replace('@lid', '@s.whatsapp.net');
|
|
476
|
+
}
|
|
477
|
+
return decoded;
|
|
478
|
+
},
|
|
479
|
+
```
|
|
480
|
+
Usa `conn.decodeJid(jid)` ovunque per normalizzare IDs (es. sender, participant, quoted).
|
|
481
|
+
|
|
482
|
+
- **Monkey-Patch per groupParticipantsUpdate**: Corregge aggiornamenti partecipanti gruppo trovando il JID reale dal metadata.
|
|
483
|
+
|
|
484
|
+
**Esempio (da handler.js):**
|
|
485
|
+
```typescript
|
|
486
|
+
if (!this.originalGroupParticipantsUpdate) {
|
|
487
|
+
this.originalGroupParticipantsUpdate = this.groupParticipantsUpdate;
|
|
488
|
+
this.groupParticipantsUpdate = async function(chatId, users, action) {
|
|
489
|
+
try {
|
|
490
|
+
let metadata = global.groupCache.get(chatId);
|
|
491
|
+
if (!metadata) {
|
|
492
|
+
metadata = await fetchGroupMetadataWithRetry(this, chatId);
|
|
493
|
+
if (metadata) global.groupCache.set(chatId, metadata);
|
|
494
|
+
}
|
|
495
|
+
if (!metadata) {
|
|
496
|
+
console.error('[ERRORE] Nessun metadato del gruppo disponibile per un aggiornamento sicuro');
|
|
497
|
+
return this.originalGroupParticipantsUpdate.call(this, chatId, users, action);
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
const correctedUsers = users.map(userJid => {
|
|
501
|
+
const decoded = this.decodeJid(userJid);
|
|
502
|
+
const phone = decoded.split('@')[0].split(':')[0];
|
|
503
|
+
const participant = metadata.participants.find(p => {
|
|
504
|
+
const pId = this.decodeJid(p.id || p.jid || '');
|
|
505
|
+
const pPhone = pId.split('@')[0].split(':')[0];
|
|
506
|
+
return pPhone === phone;
|
|
507
|
+
});
|
|
508
|
+
return participant ? participant.id : userJid; // Fallback all'originale se non trovato
|
|
509
|
+
});
|
|
510
|
+
|
|
511
|
+
return this.originalGroupParticipantsUpdate.call(this, chatId, correctedUsers, action);
|
|
512
|
+
} catch (e) {
|
|
513
|
+
console.error('[ERRORE] Errore in safeGroupParticipantsUpdate:', e);
|
|
514
|
+
throw e;
|
|
515
|
+
}
|
|
516
|
+
};
|
|
517
|
+
}
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
- **Cache per Metadata Gruppo e Admin**: Usa NodeCache per memorizzare metadata e admin, normalizzando con `decodeJid`.
|
|
521
|
+
|
|
522
|
+
**Esempio (da handler.js):**
|
|
523
|
+
```typescript
|
|
524
|
+
global.groupCache = new NodeCache({ stdTTL: 5 * 60, useClones: false });
|
|
525
|
+
global.adminCache = new NodeCache({ stdTTL: 5 * 60, useClones: false });
|
|
526
|
+
|
|
527
|
+
// In participantsUpdate o groups.update:
|
|
528
|
+
metadata.participants.forEach(u => {
|
|
529
|
+
const normId = this.decodeJid(u.id);
|
|
530
|
+
const jid = u.jid || normId;
|
|
531
|
+
if (u.admin === 'admin' || u.admin === 'superadmin') {
|
|
532
|
+
adminSet.add(jid);
|
|
533
|
+
if (jid !== normId) adminSet.add(normId);
|
|
534
|
+
}
|
|
535
|
+
});
|
|
536
|
+
metadata.admins = Array.from(adminSet);
|
|
537
|
+
global.groupCache.set(update.id, metadata);
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
- **Normalizzazione in Print/Log**: Rimuovi `:xx` dai numeri telefono per clean display.
|
|
541
|
+
|
|
542
|
+
**Esempio (da print.js):**
|
|
543
|
+
```typescript
|
|
544
|
+
function formatPhoneNumber(jid, name) {
|
|
545
|
+
if (!jid) return 'Sconosciuto';
|
|
546
|
+
let userPart = jid.split('@')[0];
|
|
547
|
+
let cleanNumber = userPart.split(':')[0]; // Rimuovi la parte :xx per ottenere il numero reale
|
|
548
|
+
try {
|
|
549
|
+
const number = PhoneNumber('+' + cleanNumber).getNumber('international');
|
|
550
|
+
return number + (name ? ` ~${name}` : '');
|
|
551
|
+
} catch {
|
|
552
|
+
return (cleanNumber || '') + (name ? ` ~${name}` : '');
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
- **Problemi Comuni e Fix:**
|
|
558
|
+
- **LID Mancante in Gruppi:** Usa `decodeJid` e cache metadata per trovare JID reali.
|
|
559
|
+
- **Conversione JID:** Sempre applica `decodeJid` prima di `sendMessage` o query.
|
|
560
|
+
- **Multi-Dispositivo:** Imposta `syncFullHistory: true` in config per sync LID.
|
|
561
|
+
- **Errori in Mention/Quoted:** Normalizza con `decodeJid` in handler per quoted.sender e mentionedJid.
|
|
562
|
+
|
|
563
|
+
### Esempio Integrato in Main
|
|
564
|
+
|
|
565
|
+
```typescript
|
|
566
|
+
// Nel tuo file main
|
|
567
|
+
import makeWASocket, { getSenderLid, toJid } from 'realvare/based';
|
|
568
|
+
// ... (autenticazione e creazione sock)
|
|
569
|
+
|
|
570
|
+
conn.ev.on('messages.upsert', async ({ messages }) => {
|
|
571
|
+
const msg = messages[0];
|
|
572
|
+
if (!msg.message) return;
|
|
573
|
+
|
|
574
|
+
const info = getSenderLid(msg);
|
|
575
|
+
const senderJid = toJid(info.lid); // Fix LID -> JID
|
|
576
|
+
|
|
577
|
+
// Esempio: Rispondi solo se JID valido
|
|
578
|
+
if (senderJid.endsWith('@s.whatsapp.net')) {
|
|
579
|
+
await conn.sendMessage(senderJid, { text: `Ciao da ${senderJid}!` }, { quoted: msg });
|
|
580
|
+
}
|
|
581
|
+
});
|
|
582
|
+
```
|
|
583
|
+
|
|
584
|
+
### Esempio Handler Personalizzato
|
|
585
|
+
|
|
586
|
+
Crea un handler separato per modularità:
|
|
587
|
+
|
|
588
|
+
```typescript
|
|
589
|
+
// handler.js
|
|
590
|
+
export async function handleMessage(sock, msg) {
|
|
591
|
+
const info = getSenderLid(msg);
|
|
592
|
+
const jid = toJid(info.lid);
|
|
593
|
+
|
|
594
|
+
// Log e risposta
|
|
595
|
+
console.log(`Messaggio da ${jid}`);
|
|
596
|
+
await conn.sendMessage(jid, { text: 'Handler attivato!' });
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
// Nel main: conn.ev.on('messages.upsert', ({ messages }) => handleMessage(sock, messages[0]));
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
**Consiglio:** Testa in gruppi per verificare LID, poiché Baileys upstream ha migliorato il supporto nativo nel 2025, ma i fix personalizzati qui garantiscono retrocompatibilità.
|
|
603
|
+
|
|
604
|
+
---
|
|
605
|
+
|
|
606
|
+
## ⚡ Nuove Funzionalità Performance (v2.5.0+)
|
|
607
|
+
|
|
608
|
+
### 🚀 Cache Intelligente LID/JID
|
|
609
|
+
|
|
610
|
+
La libreria ora include un sistema di cache avanzato per ottimizzare le conversioni LID/JID:
|
|
611
|
+
|
|
612
|
+
```typescript
|
|
613
|
+
import { getCacheStats, clearCache, setPerformanceConfig } from 'realvare/based';
|
|
614
|
+
|
|
615
|
+
// Configura cache personalizzata
|
|
616
|
+
setPerformanceConfig({
|
|
617
|
+
cache: {
|
|
618
|
+
lidCache: {
|
|
619
|
+
ttl: 10 * 60 * 1000, // 10 minuti
|
|
620
|
+
maxSize: 15000
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
});
|
|
624
|
+
|
|
625
|
+
// Monitora performance
|
|
626
|
+
const stats = getCacheStats();
|
|
627
|
+
console.log('Cache LID:', stats.lidCache.size, '/', stats.lidCache.maxSize);
|
|
628
|
+
|
|
629
|
+
// Pulisci cache se necessario
|
|
630
|
+
clearCache();
|
|
631
|
+
```
|
|
632
|
+
|
|
633
|
+
### 🛡️ Validazione JID Avanzata
|
|
634
|
+
|
|
635
|
+
```typescript
|
|
636
|
+
import { validateJid, Logger } from 'realvare/based';
|
|
637
|
+
|
|
638
|
+
const jid = '1234567890@s.whatsapp.net';
|
|
639
|
+
const validation = validateJid(jid);
|
|
640
|
+
|
|
641
|
+
if (validation.isValid) {
|
|
642
|
+
Logger.info('JID valido:', jid);
|
|
643
|
+
} else {
|
|
644
|
+
Logger.error('JID non valido:', validation.error);
|
|
645
|
+
}
|
|
646
|
+
```
|
|
647
|
+
|
|
648
|
+
### 📊 Logging Condizionale
|
|
649
|
+
|
|
650
|
+
```typescript
|
|
651
|
+
import { Logger, setPerformanceConfig } from 'realvare/based';
|
|
652
|
+
|
|
653
|
+
// Configura logging
|
|
654
|
+
setPerformanceConfig({
|
|
655
|
+
debug: {
|
|
656
|
+
enableLidLogging: true,
|
|
657
|
+
enablePerformanceLogging: true,
|
|
658
|
+
logLevel: 'debug' // 'error', 'warn', 'info', 'debug'
|
|
659
|
+
}
|
|
660
|
+
});
|
|
661
|
+
|
|
662
|
+
// Usa logger condizionale
|
|
663
|
+
Logger.debug('Debug info');
|
|
664
|
+
Logger.performance('Performance metrics');
|
|
665
|
+
Logger.error('Error occurred');
|
|
666
|
+
```
|
|
667
|
+
|
|
668
|
+
### 🔧 Configurazione Performance
|
|
669
|
+
|
|
670
|
+
```typescript
|
|
671
|
+
import { setPerformanceConfig, getPerformanceConfig } from 'realvare/based';
|
|
672
|
+
|
|
673
|
+
// Configurazione completa
|
|
674
|
+
setPerformanceConfig({
|
|
675
|
+
performance: {
|
|
676
|
+
enableCache: true,
|
|
677
|
+
enableMetrics: true,
|
|
678
|
+
batchSize: 100,
|
|
679
|
+
maxRetries: 3
|
|
680
|
+
},
|
|
681
|
+
cache: {
|
|
682
|
+
lidCache: { ttl: 5 * 60 * 1000, maxSize: 10000 },
|
|
683
|
+
jidCache: { ttl: 5 * 60 * 1000, maxSize: 10000 }
|
|
684
|
+
},
|
|
685
|
+
debug: {
|
|
686
|
+
enableLidLogging: false,
|
|
687
|
+
logLevel: 'warn'
|
|
688
|
+
}
|
|
689
|
+
});
|
|
690
|
+
|
|
691
|
+
// Ottieni configurazione corrente
|
|
692
|
+
const config = getPerformanceConfig();
|
|
693
|
+
console.log('Cache abilitata:', config.performance.enableCache);
|
|
694
|
+
```
|
|
695
|
+
|
|
696
|
+
---
|
|
697
|
+
|
|
698
|
+
## 🧩 Eventi: LID e JID sempre disponibili (nuovo)
|
|
699
|
+
|
|
700
|
+
Gli eventi emessi includono campi ausiliari sui messaggi per accedere facilmente sia al JID sia al LID del mittente/partecipante.
|
|
701
|
+
|
|
702
|
+
```typescript
|
|
703
|
+
conn.ev.on('messages.upsert', ({ messages, type }) => {
|
|
704
|
+
for (const msg of messages) {
|
|
705
|
+
// Campi aggiuntivi su msg.key
|
|
706
|
+
// - remoteJidNormalized: JID normalizzato (es. @s.whatsapp.net)
|
|
707
|
+
// - remoteLid: LID equivalente del remoteJid
|
|
708
|
+
// - participantLid: LID equivalente del participant (se presente)
|
|
709
|
+
const jid = msg.key.remoteJidNormalized || msg.key.remoteJid;
|
|
710
|
+
const remoteLid = msg.key.remoteLid;
|
|
711
|
+
const participantLid = msg.key.participantLid;
|
|
712
|
+
|
|
713
|
+
if (jid?.endsWith('@s.whatsapp.net')) {
|
|
714
|
+
conn.sendMessage(jid, { text: `Ciao! LID: ${remoteLid || 'n/d'}` });
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
});
|
|
718
|
+
```
|
|
719
|
+
|
|
720
|
+
Questi campi eliminano ambiguità in gruppi e contesti multi-dispositivo dove alcuni eventi riportano LID, altri JID.
|
|
721
|
+
|
|
722
|
+
---
|
|
723
|
+
|
|
724
|
+
## ⚙️ Configurazione Avanzata
|
|
725
|
+
|
|
726
|
+
Personalizza il socket per performance e comportamento.
|
|
727
|
+
|
|
728
|
+
### 🔧 Opzioni Complete per makeWASocket
|
|
729
|
+
|
|
730
|
+
```typescript
|
|
731
|
+
const sock = makeWASocket({
|
|
732
|
+
// 🔐 Autenticazione
|
|
733
|
+
auth: state,
|
|
734
|
+
|
|
735
|
+
// 🖥️ UI e Debug
|
|
736
|
+
printQRInTerminal: true,
|
|
737
|
+
logger: console, // Usa Pino per logging avanzato
|
|
738
|
+
browser: ['VareBot', 'Chrome', '4.0.0'],
|
|
739
|
+
|
|
740
|
+
// ⏱️ Timeout e Connessione
|
|
741
|
+
defaultQueryTimeoutMs: 60000,
|
|
742
|
+
keepAliveIntervalMs: 30000,
|
|
743
|
+
connectTimeoutMs: 60000,
|
|
744
|
+
retryRequestDelayMs: 250,
|
|
745
|
+
maxMsgRetryCount: 5,
|
|
746
|
+
|
|
747
|
+
// 🎛️ Comportamento
|
|
748
|
+
markOnlineOnConnect: true,
|
|
749
|
+
syncFullHistory: false, // Attiva per sync completo (consuma dati)
|
|
750
|
+
fireInitQueries: true,
|
|
751
|
+
generateHighQualityLinkPreview: true, // Anteprime link HD
|
|
752
|
+
});
|
|
753
|
+
```
|
|
754
|
+
|
|
755
|
+
### 🛡️ Sicurezza e Crittografia
|
|
756
|
+
|
|
757
|
+
| Caratteristica | Descrizione |
|
|
758
|
+
|---------------------------|------------------------------------------|
|
|
759
|
+
| 🔐 End-to-End Encryption | Protocollo Signal per messaggi sicuri |
|
|
760
|
+
| 🔑 Key Management | Generazione/rotazione automatica chiavi |
|
|
761
|
+
| 🔍 Authentication | Sicurezza tramite QR code o pairing code|
|
|
762
|
+
| 🛡️ Data Protection | Archiviazione sicura credenziali locali |
|
|
763
|
+
|
|
764
|
+
---
|
|
765
|
+
<div align="center">
|
|
766
|
+
|
|
767
|
+
|
|
768
|
+
## 🌐 Supporto e Community
|
|
769
|
+
|
|
770
|
+
Unisciti alla community per aiuto e contributi.
|
|
771
|
+
|
|
772
|
+
### 📞 Contatti e Risorse
|
|
773
|
+
|
|
774
|
+
| Canale | Link/Info |
|
|
775
|
+
|-----------------|----------------------------------------|
|
|
776
|
+
| **Email** | [samakavare1@gmail.com](mailto:samakavare1@gmail.com) |
|
|
777
|
+
| **GitHub Issues**| [Segnala Bug](https://github.com/realvare/based/issues) |
|
|
778
|
+
| **PayPal** | [Dona](https://www.paypal.me/samakavare) |
|
|
779
|
+
| **Canale whatsapp**| [Canale](https://www.whatsapp.com/channel/0029VbB41Sa1Hsq1JhsC1Z1z) |
|
|
780
|
+
|
|
781
|
+
---
|
|
782
|
+
|
|
783
|
+
## 🙏 Ringraziamenti
|
|
784
|
+
|
|
785
|
+
Grazie ai progetti che ispirano Based:
|
|
786
|
+
|
|
787
|
+
| Progetto | Contributo |
|
|
788
|
+
|---------------------------|-----------------------------------------|
|
|
789
|
+
| [Baileys](https://github.com/WhiskeySockets/Baileys) | API WhatsApp Web originale |
|
|
790
|
+
| [Yupra](https://www.npmjs.com/package/@yupra/baileys) | Fix LID/JID avanzati |
|
|
791
|
+
| [Signal Protocol](https://signal.org/) | Crittografia end-to-end |
|
|
792
|
+
|
|
793
|
+
---
|
|
794
|
+
|
|
795
|
+
## ⚠️ Disclaimer & Licenza
|
|
796
|
+
|
|
797
|
+
### 📋 Nota Legale
|
|
798
|
+
|
|
799
|
+
⚠️ **Importante**: Non affiliato a WhatsApp Inc. o Meta. Uso educativo/sviluppo solo.
|
|
800
|
+
|
|
801
|
+
🛡️ **Uso Responsabile**: Evita spam, violazioni ToS WhatsApp. Rischio ban account.
|
|
802
|
+
|
|
803
|
+
### 📜 Licenza MIT
|
|
804
|
+
|
|
805
|
+
MIT License © 2025 [realvare](https://github.com/realvare)
|
|
806
|
+
|
|
807
|
+
Vedi [LICENSE](LICENSE) per dettagli.
|
|
808
|
+
|
|
809
|
+
---
|
|
810
|
+
|
|
811
|
+
<div align="center">
|
|
812
|
+
|
|
813
|
+
<img src="https://i.ibb.co/Cp0SQznC/sam2.png" width="160" height="160" alt="realvare profile picture"/>
|
|
814
|
+
|
|
815
|
+
### Creato da [realvare](https://github.com/realvare)
|
|
816
|
+
|
|
817
|
+
<p>
|
|
818
|
+
<a href="https://github.com/realvare/based"><img src="https://img.shields.io/badge/⭐_Stella_il_Progetto-8a2be2?style=for-the-badge&logo=github&logoColor=white"/></a>
|
|
819
|
+
<a href="https://github.com/realvare/based/fork"><img src="https://img.shields.io/badge/🔄_Fork_Repository-8a2be2?style=for-the-badge&logo=github&logoColor=white"/></a>
|
|
820
|
+
</p>
|
|
821
|
+
|
|
822
|
+
<p>
|
|
823
|
+
<img src="https://img.shields.io/github/contributors/realvare/based?style=for-the-badge&color=8a2be2&labelColor=2d1b69" alt="Contributori"/>
|
|
824
|
+
<img src="https://img.shields.io/github/last-commit/realvare/based?style=for-the-badge&color=8a2be2&labelColor=2d1b69" alt="Ultimo Commit"/>
|
|
825
|
+
</p>
|
|
826
|
+
|
|
827
|
+
**Se ti è stato utile, valuta di lasciare una stella o di [donare](https://paypal.me/samakavare)!**
|
|
828
|
+
|
|
829
|
+
</div>
|