wa-multi-mongodb 3.9.7 → 3.9.9

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.
@@ -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,EAChB,MAAM,UAAU,CAAC;AAOlB,eAAO,MAAM,eAAe,GAAU,4CAMnC,gBAAgB,KAAG,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,SAAS,CA2H7D,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"}
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"}
@@ -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)
@@ -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.7",
3
+ "version": "3.9.9",
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": "github:WhiskeySockets/Baileys#next",
23
+ "baileys": "^6.7.20",
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
- // Usage: Auto-delete a sent message after 5 seconds
252
- const sentMsg = await whatsapp.sendTextMessage({/*...*/});
253
- autoDeleteMessage("mysession", sentMsg, 5000);
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,17 @@ export default WhatsAppQRComponent;
773
816
 
774
817
  ## Changelog
775
818
 
776
- ### v3.9.7 (latest)
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
777
830
  - **Enhanced Message Processing for Group Chats**: Fixed issues with group message handling and improved message processing architecture
778
831
  - **Multiple Message Processing**: Event handler `messages.upsert` now processes all messages in array instead of only the first message
779
832
  - **Improved Message Filtering**: Added intelligent filtering to skip protocol messages and empty messages while preserving valid group messages