wa-multi-mongodb 3.9.6 → 3.9.8
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/dist/Messaging/index.d.ts +12 -1
- package/dist/Messaging/index.d.ts.map +1 -1
- package/dist/Messaging/index.js +122 -1
- package/dist/Socket/index.d.ts.map +1 -1
- package/dist/Socket/index.js +38 -18
- package/dist/Types/index.d.ts +3 -0
- package/dist/Types/index.d.ts.map +1 -1
- package/package.json +2 -2
- package/readme.md +65 -4
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import { proto } from "baileys";
|
|
2
|
-
import { SendMediaTypes, SendMessageTypes, SendReadTypes, SendTypingTypes } from "../Types";
|
|
2
|
+
import { SendMediaTypes, SendMessageTypes, SendReadTypes, SendTypingTypes, SendMessageWithMentionTypes } from "../Types";
|
|
3
3
|
export declare const sendTextMessage: ({ sessionId, to, text, isGroup, ...props }: SendMessageTypes) => Promise<proto.WebMessageInfo | undefined>;
|
|
4
|
+
/**
|
|
5
|
+
* Kirim pesan teks dengan mention
|
|
6
|
+
*
|
|
7
|
+
* @param sessionId - ID sesi WhatsApp
|
|
8
|
+
* @param to - Nomor telepon atau JID tujuan
|
|
9
|
+
* @param text - Teks pesan (bisa mengandung @nomor untuk mention)
|
|
10
|
+
* @param mentions - Array JID yang akan di-mention
|
|
11
|
+
* @param isGroup - Apakah ini adalah grup
|
|
12
|
+
* @param props - Properti tambahan seperti answering
|
|
13
|
+
*/
|
|
14
|
+
export declare const sendTextMessageWithMention: ({ sessionId, to, text, mentions, isGroup, ...props }: SendMessageWithMentionTypes) => Promise<proto.WebMessageInfo | undefined>;
|
|
4
15
|
export declare const sendMedia: ({ sessionId, to, media, type, caption, fileName, isGroup, answering, }: SendMediaTypes) => Promise<proto.WebMessageInfo | undefined>;
|
|
5
16
|
export declare const sendVoiceNote: ({ sessionId, to, isGroup, media, ...props }: Omit<SendMediaTypes, "text">) => Promise<proto.WebMessageInfo | undefined>;
|
|
6
17
|
export declare const sendSticker: ({ sessionId, to, isGroup, media, ...props }: SendMediaTypes) => Promise<proto.WebMessageInfo | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Messaging/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,SAAS,CAAC;AAGnD,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Messaging/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,SAAS,CAAC;AAGnD,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,2BAA2B,EAC5B,MAAM,UAAU,CAAC;AAOlB,eAAO,MAAM,eAAe,GAAU,4CAMnC,gBAAgB,KAAG,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,SAAS,CA2H7D,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,GAAU,sDAO9C,2BAA2B,KAAG,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,SAAS,CAiJxE,CAAC;AAaF,eAAO,MAAM,SAAS,GAAU,wEAS7B,cAAc,KAAG,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,SAAS,CAgL3D,CAAC;AAEF,eAAO,MAAM,aAAa,GAAU,6CAMjC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,KAAG,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,SAAS,CA2GzE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAU,6CAM/B,cAAc,KAAG,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,SAAS,CAyG3D,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,GAAU,uCAK9B,eAAe,KAAG,OAAO,CAAC,IAAI,CAuEhC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAU,qBAG/B,aAAa,KAAG,OAAO,CAAC,IAAI,CA6B9B,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GAAU,qBAGjC,aAAa,KAAG,OAAO,CAAC,IAAI,CAsC9B,CAAC"}
|
package/dist/Messaging/index.js
CHANGED
|
@@ -23,7 +23,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
23
23
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.deleteMessage = exports.readMessage = exports.sendTyping = exports.sendSticker = exports.sendVoiceNote = exports.sendMedia = exports.sendTextMessage = void 0;
|
|
26
|
+
exports.deleteMessage = exports.readMessage = exports.sendTyping = exports.sendSticker = exports.sendVoiceNote = exports.sendMedia = exports.sendTextMessageWithMention = exports.sendTextMessage = void 0;
|
|
27
27
|
const Defaults_1 = require("../Defaults");
|
|
28
28
|
const Socket_1 = require("../Socket");
|
|
29
29
|
const Utils_1 = require("../Utils");
|
|
@@ -126,6 +126,127 @@ const sendTextMessage = (_a) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
126
126
|
return attemptSend();
|
|
127
127
|
});
|
|
128
128
|
exports.sendTextMessage = sendTextMessage;
|
|
129
|
+
/**
|
|
130
|
+
* Kirim pesan teks dengan mention
|
|
131
|
+
*
|
|
132
|
+
* @param sessionId - ID sesi WhatsApp
|
|
133
|
+
* @param to - Nomor telepon atau JID tujuan
|
|
134
|
+
* @param text - Teks pesan (bisa mengandung @nomor untuk mention)
|
|
135
|
+
* @param mentions - Array JID yang akan di-mention
|
|
136
|
+
* @param isGroup - Apakah ini adalah grup
|
|
137
|
+
* @param props - Properti tambahan seperti answering
|
|
138
|
+
*/
|
|
139
|
+
const sendTextMessageWithMention = (_a) => __awaiter(void 0, void 0, void 0, function* () {
|
|
140
|
+
var { sessionId, to, text = "", mentions = [], isGroup = false } = _a, props = __rest(_a, ["sessionId", "to", "text", "mentions", "isGroup"]);
|
|
141
|
+
const session = (0, Socket_1.getSession)(sessionId);
|
|
142
|
+
if (!session)
|
|
143
|
+
throw new Error_1.WhatsappError(Defaults_1.Messages.sessionNotFound(sessionId));
|
|
144
|
+
// Deteksi otomatis apakah ini adalah grup berdasarkan format JID
|
|
145
|
+
const toStr = to.toString();
|
|
146
|
+
const isGroupChat = toStr.includes('@g.us');
|
|
147
|
+
// Jika sudah dalam format grup, gunakan to langsung
|
|
148
|
+
// Jika tidak, gunakan phoneToJid untuk mengkonversi ke format yang benar
|
|
149
|
+
let jid;
|
|
150
|
+
if (isGroupChat) {
|
|
151
|
+
if (!toStr.endsWith('@g.us')) {
|
|
152
|
+
jid = toStr + '@g.us';
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
jid = toStr;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
jid = (0, Utils_1.phoneToJid)({ to, isGroup: isGroup || isGroupChat });
|
|
160
|
+
}
|
|
161
|
+
let retryCount = 0;
|
|
162
|
+
const maxRetries = 3;
|
|
163
|
+
const attemptSend = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
164
|
+
var _a, _b, _c;
|
|
165
|
+
try {
|
|
166
|
+
// Gunakan flag force untuk mencoba memaksa pengiriman pesan bahkan jika koneksi tidak stabil
|
|
167
|
+
const messageOptions = {
|
|
168
|
+
quoted: props.answering,
|
|
169
|
+
};
|
|
170
|
+
// Konfirmasi sekali lagi apakah ini grup berdasarkan format JID setelah konversi
|
|
171
|
+
const isDestinationGroup = jid.endsWith('@g.us');
|
|
172
|
+
// Gunakan waktu jeda untuk memastikan koneksi siap
|
|
173
|
+
yield (0, create_delay_1.createDelay)(500);
|
|
174
|
+
// Beri timeout yang lebih pendek untuk grup untuk mencegah hanging
|
|
175
|
+
const timeoutMs = isDestinationGroup ? 15000 : 30000;
|
|
176
|
+
// Persiapkan pesan dengan mention jika ada
|
|
177
|
+
const messageContent = {
|
|
178
|
+
text: text,
|
|
179
|
+
};
|
|
180
|
+
// Tambahkan mentions jika ada
|
|
181
|
+
if (mentions && mentions.length > 0) {
|
|
182
|
+
messageContent.mentions = mentions;
|
|
183
|
+
}
|
|
184
|
+
// Gunakan withTimeout untuk membatasi waktu operasi
|
|
185
|
+
return yield (0, create_delay_1.withTimeout)(session.sendMessage(jid, messageContent, messageOptions), timeoutMs, `Pengiriman pesan dengan mention ke ${jid} melebihi batas waktu ${timeoutMs / 1000} detik`);
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
console.error(`Error saat mengirim pesan dengan mention (percobaan ${retryCount + 1}/${maxRetries}): ${(error === null || error === void 0 ? void 0 : error.message) || 'Unknown error'}`);
|
|
189
|
+
// Jika error terkait MessageCounterError (grup dengan channel pengumuman)
|
|
190
|
+
if (((_a = error === null || error === void 0 ? void 0 : error.message) === null || _a === void 0 ? void 0 : _a.includes('MessageCounterError')) || ((_b = error === null || error === void 0 ? void 0 : error.stack) === null || _b === void 0 ? void 0 : _b.includes('MessageCounterError'))) {
|
|
191
|
+
console.warn('Terdeteksi MessageCounterError, kemungkinan grup dengan channel pengumuman');
|
|
192
|
+
if (retryCount < maxRetries) {
|
|
193
|
+
retryCount++;
|
|
194
|
+
// Tambahkan delay lebih lama antara percobaan
|
|
195
|
+
yield (0, create_delay_1.createDelay)(2000 * retryCount);
|
|
196
|
+
console.log(`Mencoba kembali pengiriman pesan dengan mention (${retryCount}/${maxRetries})...`);
|
|
197
|
+
return attemptSend();
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
console.error('Batas maksimum percobaan ulang tercapai');
|
|
201
|
+
throw new Error_1.WhatsappError(`Gagal mengirim pesan dengan mention ke grup dengan channel pengumuman setelah ${maxRetries} kali percobaan`);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// Jika koneksi tertutup, coba reconnect
|
|
205
|
+
if ((_c = error === null || error === void 0 ? void 0 : error.message) === null || _c === void 0 ? void 0 : _c.includes('Connection Closed')) {
|
|
206
|
+
try {
|
|
207
|
+
yield (0, Socket_1.reconnect)(sessionId);
|
|
208
|
+
yield (0, create_delay_1.createDelay)(3000); // Beri waktu untuk reconnect sepenuhnya
|
|
209
|
+
// Persiapkan pesan dengan mention untuk reconnect
|
|
210
|
+
const messageContent = {
|
|
211
|
+
text: text,
|
|
212
|
+
};
|
|
213
|
+
if (mentions && mentions.length > 0) {
|
|
214
|
+
messageContent.mentions = mentions;
|
|
215
|
+
}
|
|
216
|
+
// Coba kirim lagi setelah reconnect
|
|
217
|
+
return yield (0, create_delay_1.withTimeout)(session.sendMessage(jid, messageContent, {
|
|
218
|
+
quoted: props.answering,
|
|
219
|
+
}), 30000, `Pengiriman pesan dengan mention setelah reconnect melebihi batas waktu`);
|
|
220
|
+
}
|
|
221
|
+
catch (reconnectError) {
|
|
222
|
+
console.error(`Gagal reconnect: ${(reconnectError === null || reconnectError === void 0 ? void 0 : reconnectError.message) || 'Unknown error'}`);
|
|
223
|
+
throw new Error_1.WhatsappError(`Koneksi terputus dan gagal reconnect: ${(reconnectError === null || reconnectError === void 0 ? void 0 : reconnectError.message) || 'Unknown error'}`);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// Jika ada error timeout atau error lain, coba lagi sekali dengan delay lebih lama
|
|
227
|
+
try {
|
|
228
|
+
yield (0, create_delay_1.createDelay)(2000);
|
|
229
|
+
// Persiapkan pesan dengan mention untuk percobaan kedua
|
|
230
|
+
const messageContent = {
|
|
231
|
+
text: text,
|
|
232
|
+
};
|
|
233
|
+
if (mentions && mentions.length > 0) {
|
|
234
|
+
messageContent.mentions = mentions;
|
|
235
|
+
}
|
|
236
|
+
// Untuk percobaan kedua, gunakan timeout yang lebih lama
|
|
237
|
+
return yield (0, create_delay_1.withTimeout)(session.sendMessage(jid, messageContent, {
|
|
238
|
+
quoted: props.answering,
|
|
239
|
+
}), 20000, `Percobaan kedua pengiriman pesan dengan mention melebihi batas waktu`);
|
|
240
|
+
}
|
|
241
|
+
catch (retryError) {
|
|
242
|
+
console.error(`Gagal pada percobaan kedua: ${(retryError === null || retryError === void 0 ? void 0 : retryError.message) || 'Unknown error'}`);
|
|
243
|
+
throw new Error_1.WhatsappError(`Gagal mengirim pesan dengan mention: ${(retryError === null || retryError === void 0 ? void 0 : retryError.message) || 'Unknown error'}`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
return attemptSend();
|
|
248
|
+
});
|
|
249
|
+
exports.sendTextMessageWithMention = sendTextMessageWithMention;
|
|
129
250
|
const sendMedia = (_a) => __awaiter(void 0, [_a], void 0, function* ({ sessionId, to, media, type, caption = "", fileName, isGroup = false, answering, }) {
|
|
130
251
|
const session = (0, Socket_1.getSession)(sessionId);
|
|
131
252
|
if (!session)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Socket/index.ts"],"names":[],"mappings":"AAAA,OAAqB,EAInB,QAAQ,EACT,MAAM,SAAS,CAAC;AAKjB,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,kBAAkB,EAEnB,MAAM,UAAU,CAAC;AAiClB;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAU,KAAK,MAAM,kBAkB5C,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,GAAG,QAEjD;AAkBD,eAAO,MAAM,YAAY,GACvB,kBAAuB,EACvB,UAAS,kBAAsC,KAC9C,OAAO,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Socket/index.ts"],"names":[],"mappings":"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"}
|
package/dist/Socket/index.js
CHANGED
|
@@ -230,15 +230,25 @@ const startSession = (...args_1) => __awaiter(void 0, [...args_1], void 0, funct
|
|
|
230
230
|
(_o = options.onMessageUpdated) === null || _o === void 0 ? void 0 : _o.call(options, data);
|
|
231
231
|
}
|
|
232
232
|
if (events["messages.upsert"]) {
|
|
233
|
-
const
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
233
|
+
const messages = events["messages.upsert"].messages || [];
|
|
234
|
+
for (const rawMsg of messages) {
|
|
235
|
+
// Skip protocol messages and system messages
|
|
236
|
+
if ((_p = rawMsg.message) === null || _p === void 0 ? void 0 : _p.protocolMessage) {
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
// Skip messages without content
|
|
240
|
+
if (!rawMsg.message || Object.keys(rawMsg.message).length === 0) {
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
const msg = rawMsg;
|
|
244
|
+
msg.sessionId = sessionId;
|
|
245
|
+
msg.saveImage = (path) => (0, save_media_1.saveImageHandler)(msg, path);
|
|
246
|
+
msg.saveVideo = (path) => (0, save_media_1.saveVideoHandler)(msg, path);
|
|
247
|
+
msg.saveDocument = (path) => (0, save_media_1.saveDocumentHandler)(msg, path);
|
|
248
|
+
msg.saveAudio = (path) => (0, save_media_1.saveAudioHandler)(msg, path);
|
|
249
|
+
(_q = callback.get(Defaults_1.CALLBACK_KEY.ON_MESSAGE_RECEIVED)) === null || _q === void 0 ? void 0 : _q(Object.assign({}, msg));
|
|
250
|
+
(_r = options.onMessageReceived) === null || _r === void 0 ? void 0 : _r.call(options, msg);
|
|
251
|
+
}
|
|
242
252
|
}
|
|
243
253
|
}));
|
|
244
254
|
return sock;
|
|
@@ -423,15 +433,25 @@ const startSessionWithPairingCode = (sessionId_1, phoneNumber_1, ...args_1) => _
|
|
|
423
433
|
(_m = options.onMessageUpdated) === null || _m === void 0 ? void 0 : _m.call(options, data);
|
|
424
434
|
}
|
|
425
435
|
if (events["messages.upsert"]) {
|
|
426
|
-
const
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
436
|
+
const messages = events["messages.upsert"].messages || [];
|
|
437
|
+
for (const rawMsg of messages) {
|
|
438
|
+
// Skip protocol messages and system messages
|
|
439
|
+
if ((_o = rawMsg.message) === null || _o === void 0 ? void 0 : _o.protocolMessage) {
|
|
440
|
+
continue;
|
|
441
|
+
}
|
|
442
|
+
// Skip messages without content
|
|
443
|
+
if (!rawMsg.message || Object.keys(rawMsg.message).length === 0) {
|
|
444
|
+
continue;
|
|
445
|
+
}
|
|
446
|
+
const msg = rawMsg;
|
|
447
|
+
msg.sessionId = sessionId;
|
|
448
|
+
msg.saveImage = (path) => (0, save_media_1.saveImageHandler)(msg, path);
|
|
449
|
+
msg.saveVideo = (path) => (0, save_media_1.saveVideoHandler)(msg, path);
|
|
450
|
+
msg.saveDocument = (path) => (0, save_media_1.saveDocumentHandler)(msg, path);
|
|
451
|
+
msg.saveAudio = (path) => (0, save_media_1.saveAudioHandler)(msg, path);
|
|
452
|
+
(_p = callback.get(Defaults_1.CALLBACK_KEY.ON_MESSAGE_RECEIVED)) === null || _p === void 0 ? void 0 : _p(Object.assign({}, msg));
|
|
453
|
+
(_q = options.onMessageReceived) === null || _q === void 0 ? void 0 : _q.call(options, msg);
|
|
454
|
+
}
|
|
435
455
|
}
|
|
436
456
|
}));
|
|
437
457
|
return sock;
|
package/dist/Types/index.d.ts
CHANGED
|
@@ -6,6 +6,9 @@ export interface SendMessageTypes {
|
|
|
6
6
|
isGroup?: boolean;
|
|
7
7
|
answering?: proto.IWebMessageInfo;
|
|
8
8
|
}
|
|
9
|
+
export interface SendMessageWithMentionTypes extends SendMessageTypes {
|
|
10
|
+
mentions?: string[];
|
|
11
|
+
}
|
|
9
12
|
export interface SendMediaTypes extends SendMessageTypes {
|
|
10
13
|
media: string | Buffer;
|
|
11
14
|
type: "image" | "video" | "audio" | "pdf" | "xls" | "xlsx" | "doc" | "docx" | "zip" | "mp3";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACtD,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IAC5F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,eAAgB,SAAQ,KAAK,CAAC,eAAe;IAC5D;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C;;;OAGG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C;;;OAGG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C;;;OAGG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAGvC,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;IACvD,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,iCAAiC;IAChD;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EACT,OAAO,GACP,SAAS,GACT,QAAQ,GACR,WAAW,GACX,MAAM,GACN,QAAQ,CAAC;CACd,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,2BAA4B,SAAQ,gBAAgB;IACnE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACtD,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IAC5F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,eAAgB,SAAQ,KAAK,CAAC,eAAe;IAC5D;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C;;;OAGG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C;;;OAGG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C;;;OAGG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAGvC,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;IACvD,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,iCAAiC;IAChD;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EACT,OAAO,GACP,SAAS,GACT,QAAQ,GACR,WAAW,GACX,MAAM,GACN,QAAQ,CAAC;CACd,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wa-multi-mongodb",
|
|
3
|
-
"version": "3.9.
|
|
3
|
+
"version": "3.9.8",
|
|
4
4
|
"description": "Multi Session Whatsapp Library with MongoDB Integration",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"@types/node-cache": "^4.1.3",
|
|
21
21
|
"@types/qrcode": "^1.5.5",
|
|
22
22
|
"aws4": "^1.13.2",
|
|
23
|
-
"baileys": "
|
|
23
|
+
"baileys": "github:WhiskeySockets/Baileys#next",
|
|
24
24
|
"dotenv": "^16.5.0",
|
|
25
25
|
"link-preview-js": "^3.0.14",
|
|
26
26
|
"mime": "^3.0.0",
|
package/readme.md
CHANGED
|
@@ -248,9 +248,51 @@ function autoDeleteMessage(sessionId, message, delayMs = 3000) {
|
|
|
248
248
|
}, delayMs);
|
|
249
249
|
}
|
|
250
250
|
|
|
251
|
-
//
|
|
252
|
-
|
|
253
|
-
|
|
251
|
+
// Send text message with mention (v3.9.8+)
|
|
252
|
+
// Mention one user in a group
|
|
253
|
+
await whatsapp.sendTextMessageWithMention({
|
|
254
|
+
sessionId: "mysession",
|
|
255
|
+
to: "6281234567890@g.us", // group JID
|
|
256
|
+
text: "Halo @6281234567890, selamat datang di grup!",
|
|
257
|
+
mentions: ["6281234567890@s.whatsapp.net"], // JID to mention
|
|
258
|
+
isGroup: true
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
// Mention multiple users in a group
|
|
262
|
+
await whatsapp.sendTextMessageWithMention({
|
|
263
|
+
sessionId: "mysession",
|
|
264
|
+
to: "6281234567890@g.us",
|
|
265
|
+
text: "Halo @6281234567890 dan @6289876543210, ada yang bisa saya bantu?",
|
|
266
|
+
mentions: [
|
|
267
|
+
"6281234567890@s.whatsapp.net",
|
|
268
|
+
"6289876543210@s.whatsapp.net"
|
|
269
|
+
],
|
|
270
|
+
isGroup: true
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
// Mention in private chat (less common but supported)
|
|
274
|
+
await whatsapp.sendTextMessageWithMention({
|
|
275
|
+
sessionId: "mysession",
|
|
276
|
+
to: "6281234567890",
|
|
277
|
+
text: "Halo @6281234567890, ini adalah pesan pribadi dengan mention",
|
|
278
|
+
mentions: ["6281234567890@s.whatsapp.net"]
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
// Alternative: Use sendTextMessage with mentions property
|
|
282
|
+
// You can also use the regular sendTextMessage with mentions
|
|
283
|
+
const session = whatsapp.getSession("mysession");
|
|
284
|
+
if (session) {
|
|
285
|
+
await session.sendMessage(
|
|
286
|
+
"6281234567890@g.us",
|
|
287
|
+
{
|
|
288
|
+
text: "Halo @6281234567890, ini pesan dengan mention!",
|
|
289
|
+
mentions: ["6281234567890@s.whatsapp.net"]
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
quoted: null // or message to quote
|
|
293
|
+
}
|
|
294
|
+
);
|
|
295
|
+
}
|
|
254
296
|
```
|
|
255
297
|
|
|
256
298
|
### Event Listeners
|
|
@@ -764,6 +806,7 @@ export default WhatsAppQRComponent;
|
|
|
764
806
|
5. **Announcement Channels**: Groups with announcement channels may trigger `MessageCounterError` (handled automatically in v3.9.1+)
|
|
765
807
|
6. **Retry Strategy**: For announcement channel groups, the library will automatically retry sending messages up to 3 times with increasing delays
|
|
766
808
|
7. **Group Metadata Caching**: Use the hybrid caching system (v3.9.4+) to improve performance when working with groups
|
|
809
|
+
8. **New `sendTextMessageWithMention` Function**: Comprehensive mention functionality for WhatsApp messages (v3.9.8+)
|
|
767
810
|
|
|
768
811
|
## WhatsApp Limitations
|
|
769
812
|
|
|
@@ -773,7 +816,25 @@ export default WhatsAppQRComponent;
|
|
|
773
816
|
|
|
774
817
|
## Changelog
|
|
775
818
|
|
|
776
|
-
### v3.9.
|
|
819
|
+
### v3.9.8 (latest)
|
|
820
|
+
### Added
|
|
821
|
+
- **New `sendTextMessageWithMention` Function**: Comprehensive mention functionality for WhatsApp messages
|
|
822
|
+
- Support for mentioning single or multiple users in group chats
|
|
823
|
+
- Automatic JID format validation and conversion
|
|
824
|
+
- Full retry mechanism with error handling for mention messages
|
|
825
|
+
- Support for quoted messages with mentions
|
|
826
|
+
- Compatible with both group and private chat mentions
|
|
827
|
+
- Enhanced timeout handling for mention messages
|
|
828
|
+
|
|
829
|
+
### v3.9.7
|
|
830
|
+
- **Enhanced Message Processing for Group Chats**: Fixed issues with group message handling and improved message processing architecture
|
|
831
|
+
- **Multiple Message Processing**: Event handler `messages.upsert` now processes all messages in array instead of only the first message
|
|
832
|
+
- **Improved Message Filtering**: Added intelligent filtering to skip protocol messages and empty messages while preserving valid group messages
|
|
833
|
+
- **Enhanced Group Message Support**: Better detection and processing of group messages with participant information
|
|
834
|
+
- **Group vs Private Chat Detection**: Better differentiation between group and private messages
|
|
835
|
+
- **Improved Error Recovery**: Better error handling without changing existing error patterns
|
|
836
|
+
|
|
837
|
+
### v3.9.6
|
|
777
838
|
- **Enhanced Pairing Code Support**: Added comprehensive pairing code session management with auto-reconnect capabilities
|
|
778
839
|
- New `startSessionWithPairingCode()` function for creating sessions using pairing codes
|
|
779
840
|
- Intelligent session tracking system that preserves pairing code session data across disconnections
|