baileys-joss 1.0.1 → 1.0.2

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.
Files changed (125) hide show
  1. package/README.md +1983 -79
  2. package/lib/Socket/business.d.ts +4 -0
  3. package/lib/Socket/business.d.ts.map +1 -1
  4. package/lib/Socket/chats.d.ts +4 -0
  5. package/lib/Socket/chats.d.ts.map +1 -1
  6. package/lib/Socket/chats.js +44 -1
  7. package/lib/Socket/chats.js.map +1 -1
  8. package/lib/Socket/communities.d.ts +4 -0
  9. package/lib/Socket/communities.d.ts.map +1 -1
  10. package/lib/Socket/groups.d.ts +4 -0
  11. package/lib/Socket/groups.d.ts.map +1 -1
  12. package/lib/Socket/index.d.ts +4 -0
  13. package/lib/Socket/index.d.ts.map +1 -1
  14. package/lib/Socket/messages-recv.d.ts +4 -0
  15. package/lib/Socket/messages-recv.d.ts.map +1 -1
  16. package/lib/Socket/messages-send.d.ts +4 -0
  17. package/lib/Socket/messages-send.d.ts.map +1 -1
  18. package/lib/Socket/newsletter.d.ts +4 -0
  19. package/lib/Socket/newsletter.d.ts.map +1 -1
  20. package/lib/Types/Message.d.ts +4 -0
  21. package/lib/Types/Message.d.ts.map +1 -1
  22. package/lib/Utils/activity-logger.d.ts +189 -0
  23. package/lib/Utils/activity-logger.d.ts.map +1 -0
  24. package/lib/Utils/activity-logger.js +418 -0
  25. package/lib/Utils/activity-logger.js.map +1 -0
  26. package/lib/Utils/anti-spam.d.ts +145 -0
  27. package/lib/Utils/anti-spam.d.ts.map +1 -0
  28. package/lib/Utils/anti-spam.js +398 -0
  29. package/lib/Utils/anti-spam.js.map +1 -0
  30. package/lib/Utils/auto-reply.d.ts +123 -0
  31. package/lib/Utils/auto-reply.d.ts.map +1 -0
  32. package/lib/Utils/auto-reply.js +234 -0
  33. package/lib/Utils/auto-reply.js.map +1 -0
  34. package/lib/Utils/broadcast.d.ts +121 -0
  35. package/lib/Utils/broadcast.d.ts.map +1 -0
  36. package/lib/Utils/broadcast.js +223 -0
  37. package/lib/Utils/broadcast.js.map +1 -0
  38. package/lib/Utils/bulk-messaging.d.ts +79 -0
  39. package/lib/Utils/bulk-messaging.d.ts.map +1 -0
  40. package/lib/Utils/bulk-messaging.js +148 -0
  41. package/lib/Utils/bulk-messaging.js.map +1 -0
  42. package/lib/Utils/chat-analytics.d.ts +92 -0
  43. package/lib/Utils/chat-analytics.d.ts.map +1 -0
  44. package/lib/Utils/chat-analytics.js +337 -0
  45. package/lib/Utils/chat-analytics.js.map +1 -0
  46. package/lib/Utils/chat-control.d.ts +156 -0
  47. package/lib/Utils/chat-control.d.ts.map +1 -0
  48. package/lib/Utils/chat-control.js +224 -0
  49. package/lib/Utils/chat-control.js.map +1 -0
  50. package/lib/Utils/chat-export.d.ts +75 -0
  51. package/lib/Utils/chat-export.d.ts.map +1 -0
  52. package/lib/Utils/chat-export.js +309 -0
  53. package/lib/Utils/chat-export.js.map +1 -0
  54. package/lib/Utils/content-detector.d.ts +199 -0
  55. package/lib/Utils/content-detector.d.ts.map +1 -0
  56. package/lib/Utils/content-detector.js +442 -0
  57. package/lib/Utils/content-detector.js.map +1 -0
  58. package/lib/Utils/index.d.ts +23 -0
  59. package/lib/Utils/index.d.ts.map +1 -1
  60. package/lib/Utils/index.js +52 -0
  61. package/lib/Utils/index.js.map +1 -1
  62. package/lib/Utils/link-scanner.d.ts +112 -0
  63. package/lib/Utils/link-scanner.d.ts.map +1 -0
  64. package/lib/Utils/link-scanner.js +433 -0
  65. package/lib/Utils/link-scanner.js.map +1 -0
  66. package/lib/Utils/media-downloader.d.ts +86 -0
  67. package/lib/Utils/media-downloader.d.ts.map +1 -0
  68. package/lib/Utils/media-downloader.js +269 -0
  69. package/lib/Utils/media-downloader.js.map +1 -0
  70. package/lib/Utils/meme-generator.d.ts +96 -0
  71. package/lib/Utils/meme-generator.d.ts.map +1 -0
  72. package/lib/Utils/meme-generator.js +368 -0
  73. package/lib/Utils/meme-generator.js.map +1 -0
  74. package/lib/Utils/message-search.d.ts +96 -0
  75. package/lib/Utils/message-search.d.ts.map +1 -0
  76. package/lib/Utils/message-search.js +261 -0
  77. package/lib/Utils/message-search.js.map +1 -0
  78. package/lib/Utils/messages-media.d.ts +20 -1
  79. package/lib/Utils/messages-media.d.ts.map +1 -1
  80. package/lib/Utils/messages-media.js +100 -5
  81. package/lib/Utils/messages-media.js.map +1 -1
  82. package/lib/Utils/messages.d.ts.map +1 -1
  83. package/lib/Utils/messages.js +9 -2
  84. package/lib/Utils/messages.js.map +1 -1
  85. package/lib/Utils/mini-games.d.ts +155 -0
  86. package/lib/Utils/mini-games.d.ts.map +1 -0
  87. package/lib/Utils/mini-games.js +445 -0
  88. package/lib/Utils/mini-games.js.map +1 -0
  89. package/lib/Utils/pomodoro.d.ts +139 -0
  90. package/lib/Utils/pomodoro.d.ts.map +1 -0
  91. package/lib/Utils/pomodoro.js +434 -0
  92. package/lib/Utils/pomodoro.js.map +1 -0
  93. package/lib/Utils/qr-generator.d.ts +95 -0
  94. package/lib/Utils/qr-generator.d.ts.map +1 -0
  95. package/lib/Utils/qr-generator.js +226 -0
  96. package/lib/Utils/qr-generator.js.map +1 -0
  97. package/lib/Utils/quotes.d.ts +110 -0
  98. package/lib/Utils/quotes.d.ts.map +1 -0
  99. package/lib/Utils/quotes.js +325 -0
  100. package/lib/Utils/quotes.js.map +1 -0
  101. package/lib/Utils/scheduling.d.ts +88 -0
  102. package/lib/Utils/scheduling.d.ts.map +1 -0
  103. package/lib/Utils/scheduling.js +163 -0
  104. package/lib/Utils/scheduling.js.map +1 -0
  105. package/lib/Utils/status-posting.d.ts +151 -0
  106. package/lib/Utils/status-posting.d.ts.map +1 -0
  107. package/lib/Utils/status-posting.js +162 -0
  108. package/lib/Utils/status-posting.js.map +1 -0
  109. package/lib/Utils/templates.d.ts +154 -0
  110. package/lib/Utils/templates.d.ts.map +1 -0
  111. package/lib/Utils/templates.js +368 -0
  112. package/lib/Utils/templates.js.map +1 -0
  113. package/lib/Utils/vcard.d.ts +86 -0
  114. package/lib/Utils/vcard.d.ts.map +1 -0
  115. package/lib/Utils/vcard.js +195 -0
  116. package/lib/Utils/vcard.js.map +1 -0
  117. package/lib/Utils/voice-note.d.ts +115 -0
  118. package/lib/Utils/voice-note.d.ts.map +1 -0
  119. package/lib/Utils/voice-note.js +212 -0
  120. package/lib/Utils/voice-note.js.map +1 -0
  121. package/lib/Utils/weather.d.ts +118 -0
  122. package/lib/Utils/weather.d.ts.map +1 -0
  123. package/lib/Utils/weather.js +362 -0
  124. package/lib/Utils/weather.js.map +1 -0
  125. package/package.json +6 -3
@@ -0,0 +1,234 @@
1
+ /**
2
+ * Baileys-Joss: Auto Reply System
3
+ *
4
+ * Sistem balasan otomatis berdasarkan keyword/pattern
5
+ */
6
+ /**
7
+ * Auto Reply Handler - Sistem balasan otomatis
8
+ */
9
+ export class AutoReplyHandler {
10
+ constructor(sendMessage, sendPresence, options = {}) {
11
+ this.rules = new Map();
12
+ this.cooldowns = new Map();
13
+ this.globalCooldown = new Map();
14
+ this.sendMessage = sendMessage;
15
+ this.sendPresence = sendPresence;
16
+ this.options = {
17
+ globalCooldown: options.globalCooldown ?? 1000,
18
+ simulateTyping: options.simulateTyping ?? false,
19
+ typingDuration: options.typingDuration ?? 1000,
20
+ multiMatch: options.multiMatch ?? false,
21
+ onReply: options.onReply ?? (() => { }),
22
+ onError: options.onError ?? (() => { })
23
+ };
24
+ }
25
+ /**
26
+ * Generate unique ID for rule
27
+ */
28
+ generateId() {
29
+ return `ar_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
30
+ }
31
+ /**
32
+ * Add a new auto-reply rule
33
+ */
34
+ addRule(rule) {
35
+ const fullRule = {
36
+ ...rule,
37
+ id: rule.id ?? this.generateId(),
38
+ active: rule.active ?? true,
39
+ priority: rule.priority ?? 0
40
+ };
41
+ if (!fullRule.keywords && !fullRule.pattern && !fullRule.exactMatch) {
42
+ throw new Error('Rule must have at least one of: keywords, pattern, or exactMatch');
43
+ }
44
+ this.rules.set(fullRule.id, fullRule);
45
+ return fullRule;
46
+ }
47
+ /**
48
+ * Remove a rule by ID
49
+ */
50
+ removeRule(id) {
51
+ return this.rules.delete(id);
52
+ }
53
+ /**
54
+ * Get all rules
55
+ */
56
+ getRules() {
57
+ return Array.from(this.rules.values());
58
+ }
59
+ /**
60
+ * Get a rule by ID
61
+ */
62
+ getRule(id) {
63
+ return this.rules.get(id);
64
+ }
65
+ /**
66
+ * Enable/disable a rule
67
+ */
68
+ setRuleActive(id, active) {
69
+ const rule = this.rules.get(id);
70
+ if (rule) {
71
+ rule.active = active;
72
+ return true;
73
+ }
74
+ return false;
75
+ }
76
+ /**
77
+ * Clear all rules
78
+ */
79
+ clearRules() {
80
+ this.rules.clear();
81
+ }
82
+ /**
83
+ * Check cooldown for a specific rule and JID
84
+ */
85
+ checkCooldown(ruleId, jid) {
86
+ const key = `${ruleId}:${jid}`;
87
+ const lastTime = this.cooldowns.get(key) ?? 0;
88
+ return Date.now() - lastTime > 0;
89
+ }
90
+ /**
91
+ * Check global cooldown for JID
92
+ */
93
+ checkGlobalCooldown(jid) {
94
+ const lastTime = this.globalCooldown.get(jid) ?? 0;
95
+ return Date.now() - lastTime > this.options.globalCooldown;
96
+ }
97
+ /**
98
+ * Set cooldown
99
+ */
100
+ setCooldown(ruleId, jid, cooldown) {
101
+ const key = `${ruleId}:${jid}`;
102
+ this.cooldowns.set(key, Date.now() + cooldown);
103
+ this.globalCooldown.set(jid, Date.now());
104
+ }
105
+ /**
106
+ * Check if message matches a rule
107
+ */
108
+ matchRule(text, rule) {
109
+ if (!rule.active)
110
+ return null;
111
+ // Check exact match
112
+ if (rule.exactMatch) {
113
+ if (text.toLowerCase() === rule.exactMatch.toLowerCase()) {
114
+ return [text];
115
+ }
116
+ }
117
+ // Check keywords
118
+ if (rule.keywords && rule.keywords.length > 0) {
119
+ const lowerText = text.toLowerCase();
120
+ for (const keyword of rule.keywords) {
121
+ if (lowerText.includes(keyword.toLowerCase())) {
122
+ return [keyword];
123
+ }
124
+ }
125
+ }
126
+ // Check pattern
127
+ if (rule.pattern) {
128
+ return text.match(rule.pattern);
129
+ }
130
+ return null;
131
+ }
132
+ /**
133
+ * Check if JID is allowed for this rule
134
+ */
135
+ isJidAllowed(jid, rule) {
136
+ const isGroup = jid.endsWith('@g.us');
137
+ const isNewsletter = jid.endsWith('@newsletter');
138
+ // Skip newsletters
139
+ if (isNewsletter)
140
+ return false;
141
+ // Check group/private filters
142
+ if (rule.groupsOnly && !isGroup)
143
+ return false;
144
+ if (rule.privateOnly && isGroup)
145
+ return false;
146
+ // Check allowed/blocked lists
147
+ if (rule.allowedJids && rule.allowedJids.length > 0) {
148
+ if (!rule.allowedJids.includes(jid))
149
+ return false;
150
+ }
151
+ if (rule.blockedJids && rule.blockedJids.includes(jid)) {
152
+ return false;
153
+ }
154
+ return true;
155
+ }
156
+ /**
157
+ * Process incoming message and send auto-reply if matched
158
+ */
159
+ async processMessage(message) {
160
+ // Get message text
161
+ const messageContent = message.message;
162
+ if (!messageContent)
163
+ return false;
164
+ const text = messageContent.conversation ||
165
+ messageContent.extendedTextMessage?.text ||
166
+ messageContent.imageMessage?.caption ||
167
+ messageContent.videoMessage?.caption ||
168
+ messageContent.documentMessage?.caption ||
169
+ '';
170
+ if (!text)
171
+ return false;
172
+ const jid = message.key.remoteJid;
173
+ if (!jid)
174
+ return false;
175
+ // Check global cooldown
176
+ if (!this.checkGlobalCooldown(jid))
177
+ return false;
178
+ // Sort rules by priority (descending)
179
+ const sortedRules = Array.from(this.rules.values())
180
+ .filter(r => r.active)
181
+ .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
182
+ let matched = false;
183
+ for (const rule of sortedRules) {
184
+ // Check JID filters
185
+ if (!this.isJidAllowed(jid, rule))
186
+ continue;
187
+ // Check cooldown
188
+ if (rule.cooldown && !this.checkCooldown(rule.id, jid))
189
+ continue;
190
+ // Match rule
191
+ const match = this.matchRule(text, rule);
192
+ if (!match)
193
+ continue;
194
+ try {
195
+ // Get response content
196
+ let response;
197
+ if (typeof rule.response === 'function') {
198
+ response = await rule.response(message, match);
199
+ }
200
+ else {
201
+ response = rule.response;
202
+ }
203
+ // Simulate typing
204
+ if (this.options.simulateTyping && this.sendPresence) {
205
+ await this.sendPresence(jid, 'composing');
206
+ await new Promise(r => setTimeout(r, this.options.typingDuration));
207
+ await this.sendPresence(jid, 'paused');
208
+ }
209
+ // Send reply
210
+ await this.sendMessage(jid, response, rule.quoted ? { quoted: message } : undefined);
211
+ // Set cooldown
212
+ if (rule.cooldown) {
213
+ this.setCooldown(rule.id, jid, rule.cooldown);
214
+ }
215
+ this.options.onReply(rule, message, response);
216
+ matched = true;
217
+ // Stop if not multi-match
218
+ if (!this.options.multiMatch)
219
+ break;
220
+ }
221
+ catch (error) {
222
+ this.options.onError(error, rule, message);
223
+ }
224
+ }
225
+ return matched;
226
+ }
227
+ }
228
+ /**
229
+ * Create an auto-reply handler instance
230
+ */
231
+ export const createAutoReply = (sendMessage, sendPresence, options) => {
232
+ return new AutoReplyHandler(sendMessage, sendPresence, options);
233
+ };
234
+ //# sourceMappingURL=auto-reply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-reply.js","sourceRoot":"","sources":["../../src/Utils/auto-reply.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Baileys-Joss: Broadcast List Manager
3
+ *
4
+ * Fitur untuk mengelola dan mengirim ke broadcast list
5
+ */
6
+ import type { AnyMessageContent, WAMessage } from '../Types/index.js';
7
+ export interface BroadcastList {
8
+ id: string;
9
+ name: string;
10
+ description?: string;
11
+ recipients: string[];
12
+ createdAt: Date;
13
+ updatedAt: Date;
14
+ metadata?: Record<string, any>;
15
+ }
16
+ export interface BroadcastResult {
17
+ listId: string;
18
+ listName: string;
19
+ totalRecipients: number;
20
+ sent: number;
21
+ failed: number;
22
+ results: Array<{
23
+ jid: string;
24
+ success: boolean;
25
+ messageId?: string;
26
+ error?: string;
27
+ }>;
28
+ startedAt: Date;
29
+ completedAt: Date;
30
+ }
31
+ export interface BroadcastOptions {
32
+ /** Delay between messages in ms (default: 1000) */
33
+ delay?: number;
34
+ /** Random delay variation in ms (default: 500) */
35
+ randomDelay?: number;
36
+ /** Continue on error (default: true) */
37
+ continueOnError?: boolean;
38
+ /** Progress callback */
39
+ onProgress?: (sent: number, total: number, currentJid: string) => void;
40
+ }
41
+ type BroadcastSendFunction = (jid: string, content: AnyMessageContent) => Promise<WAMessage | undefined>;
42
+ /**
43
+ * Broadcast List Manager
44
+ */
45
+ export declare class BroadcastManager {
46
+ private lists;
47
+ private sendMessage;
48
+ constructor(sendMessage: BroadcastSendFunction);
49
+ /**
50
+ * Generate unique ID
51
+ */
52
+ private generateId;
53
+ /**
54
+ * Create a new broadcast list
55
+ */
56
+ create(options: {
57
+ name: string;
58
+ recipients: string[];
59
+ description?: string;
60
+ id?: string;
61
+ metadata?: Record<string, any>;
62
+ }): BroadcastList;
63
+ /**
64
+ * Get a broadcast list by ID
65
+ */
66
+ get(id: string): BroadcastList | undefined;
67
+ /**
68
+ * Get list by name
69
+ */
70
+ getByName(name: string): BroadcastList | undefined;
71
+ /**
72
+ * Get all broadcast lists
73
+ */
74
+ getAll(): BroadcastList[];
75
+ /**
76
+ * Update a broadcast list
77
+ */
78
+ update(id: string, updates: Partial<Omit<BroadcastList, 'id' | 'createdAt'>>): BroadcastList | undefined;
79
+ /**
80
+ * Add recipients to a list
81
+ */
82
+ addRecipients(id: string, jids: string[]): BroadcastList | undefined;
83
+ /**
84
+ * Remove recipients from a list
85
+ */
86
+ removeRecipients(id: string, jids: string[]): BroadcastList | undefined;
87
+ /**
88
+ * Delete a broadcast list
89
+ */
90
+ delete(id: string): boolean;
91
+ /**
92
+ * Send message to a broadcast list
93
+ */
94
+ broadcast(listId: string, content: AnyMessageContent, options?: BroadcastOptions): Promise<BroadcastResult>;
95
+ /**
96
+ * Send message to multiple lists
97
+ */
98
+ broadcastToLists(listIds: string[], content: AnyMessageContent, options?: BroadcastOptions): Promise<BroadcastResult[]>;
99
+ /**
100
+ * Export lists to JSON
101
+ */
102
+ export(): string;
103
+ /**
104
+ * Import lists from JSON
105
+ */
106
+ import(json: string, overwrite?: boolean): number;
107
+ /**
108
+ * Get statistics
109
+ */
110
+ getStats(): {
111
+ totalLists: number;
112
+ totalRecipients: number;
113
+ averageRecipientsPerList: number;
114
+ };
115
+ }
116
+ /**
117
+ * Create a broadcast manager
118
+ */
119
+ export declare const createBroadcastManager: (sendMessage: BroadcastSendFunction) => BroadcastManager;
120
+ export {};
121
+ //# sourceMappingURL=broadcast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../src/Utils/broadcast.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * Baileys-Joss: Broadcast List Manager
3
+ *
4
+ * Fitur untuk mengelola dan mengirim ke broadcast list
5
+ */
6
+ /**
7
+ * Generate random delay
8
+ */
9
+ const getRandomDelay = (base, variation) => {
10
+ return base + Math.floor(Math.random() * variation);
11
+ };
12
+ /**
13
+ * Sleep helper
14
+ */
15
+ const sleep = (ms) => new Promise(r => setTimeout(r, ms));
16
+ /**
17
+ * Broadcast List Manager
18
+ */
19
+ export class BroadcastManager {
20
+ constructor(sendMessage) {
21
+ this.lists = new Map();
22
+ this.sendMessage = sendMessage;
23
+ }
24
+ /**
25
+ * Generate unique ID
26
+ */
27
+ generateId() {
28
+ return `bl_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
29
+ }
30
+ /**
31
+ * Create a new broadcast list
32
+ */
33
+ create(options) {
34
+ const list = {
35
+ id: options.id ?? this.generateId(),
36
+ name: options.name,
37
+ description: options.description,
38
+ recipients: [...new Set(options.recipients)], // Remove duplicates
39
+ createdAt: new Date(),
40
+ updatedAt: new Date(),
41
+ metadata: options.metadata
42
+ };
43
+ this.lists.set(list.id, list);
44
+ return list;
45
+ }
46
+ /**
47
+ * Get a broadcast list by ID
48
+ */
49
+ get(id) {
50
+ return this.lists.get(id);
51
+ }
52
+ /**
53
+ * Get list by name
54
+ */
55
+ getByName(name) {
56
+ return Array.from(this.lists.values()).find(l => l.name === name);
57
+ }
58
+ /**
59
+ * Get all broadcast lists
60
+ */
61
+ getAll() {
62
+ return Array.from(this.lists.values());
63
+ }
64
+ /**
65
+ * Update a broadcast list
66
+ */
67
+ update(id, updates) {
68
+ const list = this.lists.get(id);
69
+ if (!list)
70
+ return undefined;
71
+ const updated = {
72
+ ...list,
73
+ ...updates,
74
+ updatedAt: new Date()
75
+ };
76
+ if (updates.recipients) {
77
+ updated.recipients = [...new Set(updates.recipients)];
78
+ }
79
+ this.lists.set(id, updated);
80
+ return updated;
81
+ }
82
+ /**
83
+ * Add recipients to a list
84
+ */
85
+ addRecipients(id, jids) {
86
+ const list = this.lists.get(id);
87
+ if (!list)
88
+ return undefined;
89
+ const newRecipients = [...new Set([...list.recipients, ...jids])];
90
+ return this.update(id, { recipients: newRecipients });
91
+ }
92
+ /**
93
+ * Remove recipients from a list
94
+ */
95
+ removeRecipients(id, jids) {
96
+ const list = this.lists.get(id);
97
+ if (!list)
98
+ return undefined;
99
+ const jidSet = new Set(jids);
100
+ const newRecipients = list.recipients.filter(r => !jidSet.has(r));
101
+ return this.update(id, { recipients: newRecipients });
102
+ }
103
+ /**
104
+ * Delete a broadcast list
105
+ */
106
+ delete(id) {
107
+ return this.lists.delete(id);
108
+ }
109
+ /**
110
+ * Send message to a broadcast list
111
+ */
112
+ async broadcast(listId, content, options = {}) {
113
+ const list = this.lists.get(listId);
114
+ if (!list) {
115
+ throw new Error(`Broadcast list not found: ${listId}`);
116
+ }
117
+ const delay = options.delay ?? 1000;
118
+ const randomDelay = options.randomDelay ?? 500;
119
+ const continueOnError = options.continueOnError ?? true;
120
+ const result = {
121
+ listId: list.id,
122
+ listName: list.name,
123
+ totalRecipients: list.recipients.length,
124
+ sent: 0,
125
+ failed: 0,
126
+ results: [],
127
+ startedAt: new Date(),
128
+ completedAt: new Date()
129
+ };
130
+ for (let i = 0; i < list.recipients.length; i++) {
131
+ const jid = list.recipients[i];
132
+ if (!jid)
133
+ continue;
134
+ try {
135
+ options.onProgress?.(i + 1, list.recipients.length, jid);
136
+ const message = await this.sendMessage(jid, content);
137
+ result.sent++;
138
+ result.results.push({
139
+ jid,
140
+ success: true,
141
+ messageId: message?.key?.id ?? undefined
142
+ });
143
+ }
144
+ catch (error) {
145
+ result.failed++;
146
+ result.results.push({
147
+ jid,
148
+ success: false,
149
+ error: error.message
150
+ });
151
+ if (!continueOnError) {
152
+ throw error;
153
+ }
154
+ }
155
+ // Delay between messages
156
+ if (i < list.recipients.length - 1) {
157
+ await sleep(getRandomDelay(delay, randomDelay));
158
+ }
159
+ }
160
+ result.completedAt = new Date();
161
+ return result;
162
+ }
163
+ /**
164
+ * Send message to multiple lists
165
+ */
166
+ async broadcastToLists(listIds, content, options = {}) {
167
+ const results = [];
168
+ for (const listId of listIds) {
169
+ try {
170
+ const result = await this.broadcast(listId, content, options);
171
+ results.push(result);
172
+ }
173
+ catch (error) {
174
+ // Continue to next list
175
+ }
176
+ }
177
+ return results;
178
+ }
179
+ /**
180
+ * Export lists to JSON
181
+ */
182
+ export() {
183
+ return JSON.stringify(Array.from(this.lists.values()), null, 2);
184
+ }
185
+ /**
186
+ * Import lists from JSON
187
+ */
188
+ import(json, overwrite = false) {
189
+ const lists = JSON.parse(json);
190
+ let imported = 0;
191
+ for (const list of lists) {
192
+ if (!overwrite && this.lists.has(list.id)) {
193
+ continue;
194
+ }
195
+ this.lists.set(list.id, {
196
+ ...list,
197
+ createdAt: new Date(list.createdAt),
198
+ updatedAt: new Date(list.updatedAt)
199
+ });
200
+ imported++;
201
+ }
202
+ return imported;
203
+ }
204
+ /**
205
+ * Get statistics
206
+ */
207
+ getStats() {
208
+ const lists = this.getAll();
209
+ const totalRecipients = lists.reduce((sum, l) => sum + l.recipients.length, 0);
210
+ return {
211
+ totalLists: lists.length,
212
+ totalRecipients,
213
+ averageRecipientsPerList: lists.length > 0 ? Math.round(totalRecipients / lists.length) : 0
214
+ };
215
+ }
216
+ }
217
+ /**
218
+ * Create a broadcast manager
219
+ */
220
+ export const createBroadcastManager = (sendMessage) => {
221
+ return new BroadcastManager(sendMessage);
222
+ };
223
+ //# sourceMappingURL=broadcast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broadcast.js","sourceRoot":"","sources":["../../src/Utils/broadcast.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Baileys-Joss: Bulk Messaging System
3
+ *
4
+ * Fitur untuk mengirim pesan massal dengan rate limiting
5
+ */
6
+ import type { AnyMessageContent, WAMessage } from '../Types/index.js';
7
+ export interface BulkMessageResult {
8
+ jid: string;
9
+ success: boolean;
10
+ messageId?: string;
11
+ error?: string;
12
+ sentAt?: Date;
13
+ }
14
+ export interface BulkMessageProgress {
15
+ total: number;
16
+ sent: number;
17
+ failed: number;
18
+ remaining: number;
19
+ currentJid?: string;
20
+ percentage: number;
21
+ }
22
+ export interface BulkMessagingOptions {
23
+ /** Delay between each message in milliseconds (default: 1000ms) */
24
+ delayBetweenMessages?: number;
25
+ /** Random delay variation in milliseconds (default: 500ms) */
26
+ randomDelay?: number;
27
+ /** Maximum retries per message (default: 2) */
28
+ maxRetries?: number;
29
+ /** Continue on error (default: true) */
30
+ continueOnError?: boolean;
31
+ /** Callback on progress update */
32
+ onProgress?: (progress: BulkMessageProgress) => void;
33
+ /** Callback on each message sent */
34
+ onMessageSent?: (result: BulkMessageResult) => void;
35
+ /** Callback on error */
36
+ onError?: (jid: string, error: Error) => void;
37
+ /** Callback when all messages are sent */
38
+ onComplete?: (results: BulkMessageResult[]) => void;
39
+ }
40
+ type BulkSendMessageFunction = (jid: string, content: AnyMessageContent) => Promise<WAMessage | undefined>;
41
+ /**
42
+ * Bulk Message Sender - Kirim pesan ke banyak kontak dengan rate limiting
43
+ */
44
+ export declare class BulkMessageSender {
45
+ private sendMessage;
46
+ private options;
47
+ private isRunning;
48
+ private shouldStop;
49
+ constructor(sendMessage: BulkSendMessageFunction, options?: BulkMessagingOptions);
50
+ /**
51
+ * Send same message to multiple recipients
52
+ */
53
+ sendToMany(jids: string[], content: AnyMessageContent): Promise<BulkMessageResult[]>;
54
+ /**
55
+ * Send different messages to different recipients
56
+ */
57
+ send(messages: Array<{
58
+ jid: string;
59
+ content: AnyMessageContent;
60
+ }>): Promise<BulkMessageResult[]>;
61
+ /**
62
+ * Stop the current bulk messaging operation
63
+ */
64
+ stop(): void;
65
+ /**
66
+ * Check if bulk messaging is in progress
67
+ */
68
+ get running(): boolean;
69
+ }
70
+ /**
71
+ * Create a bulk message sender instance
72
+ */
73
+ export declare const createBulkSender: (sendMessage: BulkSendMessageFunction, options?: BulkMessagingOptions) => BulkMessageSender;
74
+ /**
75
+ * Simple helper to send message to multiple JIDs
76
+ */
77
+ export declare const sendBulkMessages: (sendMessage: BulkSendMessageFunction, jids: string[], content: AnyMessageContent, options?: BulkMessagingOptions) => Promise<BulkMessageResult[]>;
78
+ export {};
79
+ //# sourceMappingURL=bulk-messaging.d.ts.map