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.
- package/README.md +1983 -79
- package/lib/Socket/business.d.ts +4 -0
- package/lib/Socket/business.d.ts.map +1 -1
- package/lib/Socket/chats.d.ts +4 -0
- package/lib/Socket/chats.d.ts.map +1 -1
- package/lib/Socket/chats.js +44 -1
- package/lib/Socket/chats.js.map +1 -1
- package/lib/Socket/communities.d.ts +4 -0
- package/lib/Socket/communities.d.ts.map +1 -1
- package/lib/Socket/groups.d.ts +4 -0
- package/lib/Socket/groups.d.ts.map +1 -1
- package/lib/Socket/index.d.ts +4 -0
- package/lib/Socket/index.d.ts.map +1 -1
- package/lib/Socket/messages-recv.d.ts +4 -0
- package/lib/Socket/messages-recv.d.ts.map +1 -1
- package/lib/Socket/messages-send.d.ts +4 -0
- package/lib/Socket/messages-send.d.ts.map +1 -1
- package/lib/Socket/newsletter.d.ts +4 -0
- package/lib/Socket/newsletter.d.ts.map +1 -1
- package/lib/Types/Message.d.ts +4 -0
- package/lib/Types/Message.d.ts.map +1 -1
- package/lib/Utils/activity-logger.d.ts +189 -0
- package/lib/Utils/activity-logger.d.ts.map +1 -0
- package/lib/Utils/activity-logger.js +418 -0
- package/lib/Utils/activity-logger.js.map +1 -0
- package/lib/Utils/anti-spam.d.ts +145 -0
- package/lib/Utils/anti-spam.d.ts.map +1 -0
- package/lib/Utils/anti-spam.js +398 -0
- package/lib/Utils/anti-spam.js.map +1 -0
- package/lib/Utils/auto-reply.d.ts +123 -0
- package/lib/Utils/auto-reply.d.ts.map +1 -0
- package/lib/Utils/auto-reply.js +234 -0
- package/lib/Utils/auto-reply.js.map +1 -0
- package/lib/Utils/broadcast.d.ts +121 -0
- package/lib/Utils/broadcast.d.ts.map +1 -0
- package/lib/Utils/broadcast.js +223 -0
- package/lib/Utils/broadcast.js.map +1 -0
- package/lib/Utils/bulk-messaging.d.ts +79 -0
- package/lib/Utils/bulk-messaging.d.ts.map +1 -0
- package/lib/Utils/bulk-messaging.js +148 -0
- package/lib/Utils/bulk-messaging.js.map +1 -0
- package/lib/Utils/chat-analytics.d.ts +92 -0
- package/lib/Utils/chat-analytics.d.ts.map +1 -0
- package/lib/Utils/chat-analytics.js +337 -0
- package/lib/Utils/chat-analytics.js.map +1 -0
- package/lib/Utils/chat-control.d.ts +156 -0
- package/lib/Utils/chat-control.d.ts.map +1 -0
- package/lib/Utils/chat-control.js +224 -0
- package/lib/Utils/chat-control.js.map +1 -0
- package/lib/Utils/chat-export.d.ts +75 -0
- package/lib/Utils/chat-export.d.ts.map +1 -0
- package/lib/Utils/chat-export.js +309 -0
- package/lib/Utils/chat-export.js.map +1 -0
- package/lib/Utils/content-detector.d.ts +199 -0
- package/lib/Utils/content-detector.d.ts.map +1 -0
- package/lib/Utils/content-detector.js +442 -0
- package/lib/Utils/content-detector.js.map +1 -0
- package/lib/Utils/index.d.ts +23 -0
- package/lib/Utils/index.d.ts.map +1 -1
- package/lib/Utils/index.js +52 -0
- package/lib/Utils/index.js.map +1 -1
- package/lib/Utils/link-scanner.d.ts +112 -0
- package/lib/Utils/link-scanner.d.ts.map +1 -0
- package/lib/Utils/link-scanner.js +433 -0
- package/lib/Utils/link-scanner.js.map +1 -0
- package/lib/Utils/media-downloader.d.ts +86 -0
- package/lib/Utils/media-downloader.d.ts.map +1 -0
- package/lib/Utils/media-downloader.js +269 -0
- package/lib/Utils/media-downloader.js.map +1 -0
- package/lib/Utils/meme-generator.d.ts +96 -0
- package/lib/Utils/meme-generator.d.ts.map +1 -0
- package/lib/Utils/meme-generator.js +368 -0
- package/lib/Utils/meme-generator.js.map +1 -0
- package/lib/Utils/message-search.d.ts +96 -0
- package/lib/Utils/message-search.d.ts.map +1 -0
- package/lib/Utils/message-search.js +261 -0
- package/lib/Utils/message-search.js.map +1 -0
- package/lib/Utils/messages-media.d.ts +20 -1
- package/lib/Utils/messages-media.d.ts.map +1 -1
- package/lib/Utils/messages-media.js +100 -5
- package/lib/Utils/messages-media.js.map +1 -1
- package/lib/Utils/messages.d.ts.map +1 -1
- package/lib/Utils/messages.js +9 -2
- package/lib/Utils/messages.js.map +1 -1
- package/lib/Utils/mini-games.d.ts +155 -0
- package/lib/Utils/mini-games.d.ts.map +1 -0
- package/lib/Utils/mini-games.js +445 -0
- package/lib/Utils/mini-games.js.map +1 -0
- package/lib/Utils/pomodoro.d.ts +139 -0
- package/lib/Utils/pomodoro.d.ts.map +1 -0
- package/lib/Utils/pomodoro.js +434 -0
- package/lib/Utils/pomodoro.js.map +1 -0
- package/lib/Utils/qr-generator.d.ts +95 -0
- package/lib/Utils/qr-generator.d.ts.map +1 -0
- package/lib/Utils/qr-generator.js +226 -0
- package/lib/Utils/qr-generator.js.map +1 -0
- package/lib/Utils/quotes.d.ts +110 -0
- package/lib/Utils/quotes.d.ts.map +1 -0
- package/lib/Utils/quotes.js +325 -0
- package/lib/Utils/quotes.js.map +1 -0
- package/lib/Utils/scheduling.d.ts +88 -0
- package/lib/Utils/scheduling.d.ts.map +1 -0
- package/lib/Utils/scheduling.js +163 -0
- package/lib/Utils/scheduling.js.map +1 -0
- package/lib/Utils/status-posting.d.ts +151 -0
- package/lib/Utils/status-posting.d.ts.map +1 -0
- package/lib/Utils/status-posting.js +162 -0
- package/lib/Utils/status-posting.js.map +1 -0
- package/lib/Utils/templates.d.ts +154 -0
- package/lib/Utils/templates.d.ts.map +1 -0
- package/lib/Utils/templates.js +368 -0
- package/lib/Utils/templates.js.map +1 -0
- package/lib/Utils/vcard.d.ts +86 -0
- package/lib/Utils/vcard.d.ts.map +1 -0
- package/lib/Utils/vcard.js +195 -0
- package/lib/Utils/vcard.js.map +1 -0
- package/lib/Utils/voice-note.d.ts +115 -0
- package/lib/Utils/voice-note.d.ts.map +1 -0
- package/lib/Utils/voice-note.js +212 -0
- package/lib/Utils/voice-note.js.map +1 -0
- package/lib/Utils/weather.d.ts +118 -0
- package/lib/Utils/weather.d.ts.map +1 -0
- package/lib/Utils/weather.js +362 -0
- package/lib/Utils/weather.js.map +1 -0
- package/package.json +6 -3
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Baileys-Joss: Chat Control Utilities
|
|
3
|
+
*
|
|
4
|
+
* Fitur untuk Read Receipt, Typing Indicator, Pinned Messages, Disappearing Messages
|
|
5
|
+
*/
|
|
6
|
+
export interface TypingOptions {
|
|
7
|
+
/** Duration in milliseconds before auto-pause */
|
|
8
|
+
duration?: number;
|
|
9
|
+
/** Auto pause after duration */
|
|
10
|
+
autoPause?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface DisappearingOptions {
|
|
13
|
+
/** Duration in seconds (0 = off, 86400 = 24h, 604800 = 7 days, 7776000 = 90 days) */
|
|
14
|
+
duration: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Disappearing message durations
|
|
18
|
+
*/
|
|
19
|
+
export declare const DISAPPEARING_DURATIONS: {
|
|
20
|
+
readonly OFF: 0;
|
|
21
|
+
readonly HOURS_24: 86400;
|
|
22
|
+
readonly DAYS_7: 604800;
|
|
23
|
+
readonly DAYS_90: 7776000;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Typing indicator helper
|
|
27
|
+
*/
|
|
28
|
+
export declare class TypingIndicator {
|
|
29
|
+
private intervals;
|
|
30
|
+
private sendPresence;
|
|
31
|
+
constructor(sendPresence: (jid: string, presence: 'composing' | 'paused' | 'recording') => Promise<void>);
|
|
32
|
+
/**
|
|
33
|
+
* Start typing indicator
|
|
34
|
+
*/
|
|
35
|
+
startTyping(jid: string, options?: TypingOptions): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Start recording indicator (for voice notes)
|
|
38
|
+
*/
|
|
39
|
+
startRecording(jid: string, options?: TypingOptions): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Stop typing/recording indicator
|
|
42
|
+
*/
|
|
43
|
+
stopTyping(jid: string): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Stop all typing indicators
|
|
46
|
+
*/
|
|
47
|
+
stopAll(): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Simulate typing for a duration then execute callback
|
|
50
|
+
*/
|
|
51
|
+
simulateTyping<T>(jid: string, duration: number, callback: () => Promise<T>): Promise<T>;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Read Receipt controller
|
|
55
|
+
*/
|
|
56
|
+
export interface ReadReceiptConfig {
|
|
57
|
+
/** Enable read receipts (blue ticks) */
|
|
58
|
+
enabled: boolean;
|
|
59
|
+
/** Auto-read messages */
|
|
60
|
+
autoRead?: boolean;
|
|
61
|
+
/** Delay before marking as read (ms) */
|
|
62
|
+
readDelay?: number;
|
|
63
|
+
/** Excluded JIDs */
|
|
64
|
+
excludeJids?: string[];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Create read receipt controller
|
|
68
|
+
*/
|
|
69
|
+
export declare const createReadReceiptController: (sendReadReceipt: (jid: string, participant: string | undefined, messageIds: string[]) => Promise<void>, config?: ReadReceiptConfig) => {
|
|
70
|
+
/**
|
|
71
|
+
* Update config
|
|
72
|
+
*/
|
|
73
|
+
setConfig(newConfig: Partial<ReadReceiptConfig>): void;
|
|
74
|
+
/**
|
|
75
|
+
* Get current config
|
|
76
|
+
*/
|
|
77
|
+
getConfig(): {
|
|
78
|
+
/** Enable read receipts (blue ticks) */
|
|
79
|
+
enabled: boolean;
|
|
80
|
+
/** Auto-read messages */
|
|
81
|
+
autoRead?: boolean;
|
|
82
|
+
/** Delay before marking as read (ms) */
|
|
83
|
+
readDelay?: number;
|
|
84
|
+
/** Excluded JIDs */
|
|
85
|
+
excludeJids?: string[];
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Enable read receipts
|
|
89
|
+
*/
|
|
90
|
+
enable(): void;
|
|
91
|
+
/**
|
|
92
|
+
* Disable read receipts
|
|
93
|
+
*/
|
|
94
|
+
disable(): void;
|
|
95
|
+
/**
|
|
96
|
+
* Check if enabled
|
|
97
|
+
*/
|
|
98
|
+
isEnabled(): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Mark messages as read (respects config)
|
|
101
|
+
*/
|
|
102
|
+
markRead(jid: string, participant: string | undefined, messageIds: string[]): Promise<void>;
|
|
103
|
+
/**
|
|
104
|
+
* Force mark as read (ignores config)
|
|
105
|
+
*/
|
|
106
|
+
forceMarkRead(jid: string, participant: string | undefined, messageIds: string[]): Promise<void>;
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* Pinned message interface
|
|
110
|
+
*/
|
|
111
|
+
export interface PinnedMessage {
|
|
112
|
+
messageId: string;
|
|
113
|
+
jid: string;
|
|
114
|
+
pinnedAt: Date;
|
|
115
|
+
pinnedBy?: string;
|
|
116
|
+
expiresAt?: Date;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Pinned messages manager (client-side tracking)
|
|
120
|
+
*/
|
|
121
|
+
export declare class PinnedMessagesManager {
|
|
122
|
+
private pinnedMessages;
|
|
123
|
+
/**
|
|
124
|
+
* Add pinned message
|
|
125
|
+
*/
|
|
126
|
+
pin(jid: string, messageId: string, pinnedBy?: string, expiresAt?: Date): PinnedMessage;
|
|
127
|
+
/**
|
|
128
|
+
* Remove pinned message
|
|
129
|
+
*/
|
|
130
|
+
unpin(jid: string, messageId: string): boolean;
|
|
131
|
+
/**
|
|
132
|
+
* Get pinned messages for a chat
|
|
133
|
+
*/
|
|
134
|
+
getPinned(jid: string): PinnedMessage[];
|
|
135
|
+
/**
|
|
136
|
+
* Check if message is pinned
|
|
137
|
+
*/
|
|
138
|
+
isPinned(jid: string, messageId: string): boolean;
|
|
139
|
+
/**
|
|
140
|
+
* Clear all pins for a chat
|
|
141
|
+
*/
|
|
142
|
+
clearPins(jid: string): void;
|
|
143
|
+
/**
|
|
144
|
+
* Clear expired pins
|
|
145
|
+
*/
|
|
146
|
+
clearExpired(): number;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Create typing indicator helper
|
|
150
|
+
*/
|
|
151
|
+
export declare const createTypingIndicator: (sendPresence: (jid: string, presence: "composing" | "paused" | "recording") => Promise<void>) => TypingIndicator;
|
|
152
|
+
/**
|
|
153
|
+
* Create pinned messages manager
|
|
154
|
+
*/
|
|
155
|
+
export declare const createPinnedMessagesManager: () => PinnedMessagesManager;
|
|
156
|
+
//# sourceMappingURL=chat-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-control.d.ts","sourceRoot":"","sources":["../../src/Utils/chat-control.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Baileys-Joss: Chat Control Utilities
|
|
3
|
+
*
|
|
4
|
+
* Fitur untuk Read Receipt, Typing Indicator, Pinned Messages, Disappearing Messages
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Disappearing message durations
|
|
8
|
+
*/
|
|
9
|
+
export const DISAPPEARING_DURATIONS = {
|
|
10
|
+
OFF: 0,
|
|
11
|
+
HOURS_24: 86400,
|
|
12
|
+
DAYS_7: 604800,
|
|
13
|
+
DAYS_90: 7776000
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Typing indicator helper
|
|
17
|
+
*/
|
|
18
|
+
export class TypingIndicator {
|
|
19
|
+
constructor(sendPresence) {
|
|
20
|
+
this.intervals = new Map();
|
|
21
|
+
this.sendPresence = sendPresence;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Start typing indicator
|
|
25
|
+
*/
|
|
26
|
+
async startTyping(jid, options = {}) {
|
|
27
|
+
// Stop existing typing for this jid
|
|
28
|
+
this.stopTyping(jid);
|
|
29
|
+
await this.sendPresence(jid, 'composing');
|
|
30
|
+
if (options.autoPause !== false && options.duration) {
|
|
31
|
+
const timeout = setTimeout(() => {
|
|
32
|
+
this.stopTyping(jid);
|
|
33
|
+
}, options.duration);
|
|
34
|
+
this.intervals.set(jid, timeout);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Start recording indicator (for voice notes)
|
|
39
|
+
*/
|
|
40
|
+
async startRecording(jid, options = {}) {
|
|
41
|
+
this.stopTyping(jid);
|
|
42
|
+
await this.sendPresence(jid, 'recording');
|
|
43
|
+
if (options.autoPause !== false && options.duration) {
|
|
44
|
+
const timeout = setTimeout(() => {
|
|
45
|
+
this.stopTyping(jid);
|
|
46
|
+
}, options.duration);
|
|
47
|
+
this.intervals.set(jid, timeout);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Stop typing/recording indicator
|
|
52
|
+
*/
|
|
53
|
+
async stopTyping(jid) {
|
|
54
|
+
const existing = this.intervals.get(jid);
|
|
55
|
+
if (existing) {
|
|
56
|
+
clearTimeout(existing);
|
|
57
|
+
this.intervals.delete(jid);
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
await this.sendPresence(jid, 'paused');
|
|
61
|
+
}
|
|
62
|
+
catch { }
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Stop all typing indicators
|
|
66
|
+
*/
|
|
67
|
+
async stopAll() {
|
|
68
|
+
for (const [jid] of this.intervals) {
|
|
69
|
+
await this.stopTyping(jid);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Simulate typing for a duration then execute callback
|
|
74
|
+
*/
|
|
75
|
+
async simulateTyping(jid, duration, callback) {
|
|
76
|
+
await this.startTyping(jid);
|
|
77
|
+
await new Promise(r => setTimeout(r, duration));
|
|
78
|
+
await this.stopTyping(jid);
|
|
79
|
+
return callback();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Create read receipt controller
|
|
84
|
+
*/
|
|
85
|
+
export const createReadReceiptController = (sendReadReceipt, config = { enabled: true }) => {
|
|
86
|
+
let currentConfig = { ...config };
|
|
87
|
+
return {
|
|
88
|
+
/**
|
|
89
|
+
* Update config
|
|
90
|
+
*/
|
|
91
|
+
setConfig(newConfig) {
|
|
92
|
+
currentConfig = { ...currentConfig, ...newConfig };
|
|
93
|
+
},
|
|
94
|
+
/**
|
|
95
|
+
* Get current config
|
|
96
|
+
*/
|
|
97
|
+
getConfig() {
|
|
98
|
+
return { ...currentConfig };
|
|
99
|
+
},
|
|
100
|
+
/**
|
|
101
|
+
* Enable read receipts
|
|
102
|
+
*/
|
|
103
|
+
enable() {
|
|
104
|
+
currentConfig.enabled = true;
|
|
105
|
+
},
|
|
106
|
+
/**
|
|
107
|
+
* Disable read receipts
|
|
108
|
+
*/
|
|
109
|
+
disable() {
|
|
110
|
+
currentConfig.enabled = false;
|
|
111
|
+
},
|
|
112
|
+
/**
|
|
113
|
+
* Check if enabled
|
|
114
|
+
*/
|
|
115
|
+
isEnabled() {
|
|
116
|
+
return currentConfig.enabled;
|
|
117
|
+
},
|
|
118
|
+
/**
|
|
119
|
+
* Mark messages as read (respects config)
|
|
120
|
+
*/
|
|
121
|
+
async markRead(jid, participant, messageIds) {
|
|
122
|
+
if (!currentConfig.enabled)
|
|
123
|
+
return;
|
|
124
|
+
if (currentConfig.excludeJids?.includes(jid))
|
|
125
|
+
return;
|
|
126
|
+
if (currentConfig.readDelay) {
|
|
127
|
+
await new Promise(r => setTimeout(r, currentConfig.readDelay));
|
|
128
|
+
}
|
|
129
|
+
await sendReadReceipt(jid, participant, messageIds);
|
|
130
|
+
},
|
|
131
|
+
/**
|
|
132
|
+
* Force mark as read (ignores config)
|
|
133
|
+
*/
|
|
134
|
+
async forceMarkRead(jid, participant, messageIds) {
|
|
135
|
+
await sendReadReceipt(jid, participant, messageIds);
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
};
|
|
139
|
+
/**
|
|
140
|
+
* Pinned messages manager (client-side tracking)
|
|
141
|
+
*/
|
|
142
|
+
export class PinnedMessagesManager {
|
|
143
|
+
constructor() {
|
|
144
|
+
this.pinnedMessages = new Map();
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Add pinned message
|
|
148
|
+
*/
|
|
149
|
+
pin(jid, messageId, pinnedBy, expiresAt) {
|
|
150
|
+
const pinned = {
|
|
151
|
+
messageId,
|
|
152
|
+
jid,
|
|
153
|
+
pinnedAt: new Date(),
|
|
154
|
+
pinnedBy,
|
|
155
|
+
expiresAt
|
|
156
|
+
};
|
|
157
|
+
const existing = this.pinnedMessages.get(jid) || [];
|
|
158
|
+
// Remove if already pinned
|
|
159
|
+
const filtered = existing.filter(p => p.messageId !== messageId);
|
|
160
|
+
filtered.push(pinned);
|
|
161
|
+
this.pinnedMessages.set(jid, filtered);
|
|
162
|
+
return pinned;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Remove pinned message
|
|
166
|
+
*/
|
|
167
|
+
unpin(jid, messageId) {
|
|
168
|
+
const existing = this.pinnedMessages.get(jid);
|
|
169
|
+
if (!existing)
|
|
170
|
+
return false;
|
|
171
|
+
const filtered = existing.filter(p => p.messageId !== messageId);
|
|
172
|
+
if (filtered.length === existing.length)
|
|
173
|
+
return false;
|
|
174
|
+
this.pinnedMessages.set(jid, filtered);
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Get pinned messages for a chat
|
|
179
|
+
*/
|
|
180
|
+
getPinned(jid) {
|
|
181
|
+
return this.pinnedMessages.get(jid) || [];
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Check if message is pinned
|
|
185
|
+
*/
|
|
186
|
+
isPinned(jid, messageId) {
|
|
187
|
+
const existing = this.pinnedMessages.get(jid) || [];
|
|
188
|
+
return existing.some(p => p.messageId === messageId);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Clear all pins for a chat
|
|
192
|
+
*/
|
|
193
|
+
clearPins(jid) {
|
|
194
|
+
this.pinnedMessages.delete(jid);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Clear expired pins
|
|
198
|
+
*/
|
|
199
|
+
clearExpired() {
|
|
200
|
+
let cleared = 0;
|
|
201
|
+
const now = Date.now();
|
|
202
|
+
for (const [jid, pins] of this.pinnedMessages) {
|
|
203
|
+
const valid = pins.filter(p => !p.expiresAt || p.expiresAt.getTime() > now);
|
|
204
|
+
if (valid.length < pins.length) {
|
|
205
|
+
cleared += pins.length - valid.length;
|
|
206
|
+
this.pinnedMessages.set(jid, valid);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return cleared;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Create typing indicator helper
|
|
214
|
+
*/
|
|
215
|
+
export const createTypingIndicator = (sendPresence) => {
|
|
216
|
+
return new TypingIndicator(sendPresence);
|
|
217
|
+
};
|
|
218
|
+
/**
|
|
219
|
+
* Create pinned messages manager
|
|
220
|
+
*/
|
|
221
|
+
export const createPinnedMessagesManager = () => {
|
|
222
|
+
return new PinnedMessagesManager();
|
|
223
|
+
};
|
|
224
|
+
//# sourceMappingURL=chat-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-control.js","sourceRoot":"","sources":["../../src/Utils/chat-control.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Baileys-Joss: Chat Export
|
|
3
|
+
*
|
|
4
|
+
* Export chat ke JSON, HTML, atau TXT
|
|
5
|
+
*/
|
|
6
|
+
import type { WAMessage } from '../Types/index.js';
|
|
7
|
+
export type ExportFormat = 'json' | 'html' | 'txt' | 'csv';
|
|
8
|
+
export interface ExportOptions {
|
|
9
|
+
/** Export format */
|
|
10
|
+
format: ExportFormat;
|
|
11
|
+
/** Include media info (not actual media) */
|
|
12
|
+
includeMediaInfo?: boolean;
|
|
13
|
+
/** Include message metadata */
|
|
14
|
+
includeMetadata?: boolean;
|
|
15
|
+
/** Date format string */
|
|
16
|
+
dateFormat?: string;
|
|
17
|
+
/** Title for HTML export */
|
|
18
|
+
title?: string;
|
|
19
|
+
/** Custom CSS for HTML export */
|
|
20
|
+
customCss?: string;
|
|
21
|
+
/** Filter messages by date range */
|
|
22
|
+
dateRange?: {
|
|
23
|
+
start: Date;
|
|
24
|
+
end: Date;
|
|
25
|
+
};
|
|
26
|
+
/** Filter by sender */
|
|
27
|
+
fromSender?: string;
|
|
28
|
+
/** Only messages from me */
|
|
29
|
+
fromMe?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface ExportResult {
|
|
32
|
+
content: string;
|
|
33
|
+
format: ExportFormat;
|
|
34
|
+
messageCount: number;
|
|
35
|
+
exportedAt: Date;
|
|
36
|
+
filename: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Export chat messages
|
|
40
|
+
*/
|
|
41
|
+
export declare const exportChat: (messages: WAMessage[], jid: string, options: ExportOptions) => ExportResult;
|
|
42
|
+
/**
|
|
43
|
+
* Chat Export Manager
|
|
44
|
+
*/
|
|
45
|
+
export declare class ChatExporter {
|
|
46
|
+
private messages;
|
|
47
|
+
/**
|
|
48
|
+
* Add messages for export
|
|
49
|
+
*/
|
|
50
|
+
addMessages(jid: string, messages: WAMessage[]): void;
|
|
51
|
+
/**
|
|
52
|
+
* Export a specific chat
|
|
53
|
+
*/
|
|
54
|
+
export(jid: string, options: ExportOptions): ExportResult | null;
|
|
55
|
+
/**
|
|
56
|
+
* Export all chats
|
|
57
|
+
*/
|
|
58
|
+
exportAll(options: ExportOptions): ExportResult[];
|
|
59
|
+
/**
|
|
60
|
+
* Get available chats for export
|
|
61
|
+
*/
|
|
62
|
+
getAvailableChats(): Array<{
|
|
63
|
+
jid: string;
|
|
64
|
+
messageCount: number;
|
|
65
|
+
}>;
|
|
66
|
+
/**
|
|
67
|
+
* Clear messages
|
|
68
|
+
*/
|
|
69
|
+
clear(jid?: string): void;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Create chat exporter
|
|
73
|
+
*/
|
|
74
|
+
export declare const createChatExporter: () => ChatExporter;
|
|
75
|
+
//# sourceMappingURL=chat-export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-export.d.ts","sourceRoot":"","sources":["../../src/Utils/chat-export.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEzC,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAA;AAE1D,MAAM,WAAW,aAAa;IAC7B,oBAAoB;IACpB,MAAM,EAAE,YAAY,CAAA;IACpB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,+BAA+B;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oCAAoC;IACpC,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,CAAA;IACtC,uBAAuB;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,YAAY,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,IAAI,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CAChB;AAmOD;;GAEG;AACH,eAAO,MAAM,UAAU,GACtB,UAAU,SAAS,EAAE,EACrB,KAAK,MAAM,EACX,SAAS,aAAa,KACpB,YA+BF,CAAA;AAED;;GAEG;AACH,qBAAa,YAAY;IACxB,OAAO,CAAC,QAAQ,CAAsC;IAEtD;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI;IAKrD;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,YAAY,GAAG,IAAI;IAMhE;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,YAAY,EAAE;IAQjD;;OAEG;IACH,iBAAiB,IAAI,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAOjE;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;CAOzB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,QAAO,YAErC,CAAA"}
|