baileys-joss 1.0.0 → 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 (127) hide show
  1. package/README.md +2554 -78
  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/messages-send.js +130 -1
  19. package/lib/Socket/messages-send.js.map +1 -1
  20. package/lib/Socket/newsletter.d.ts +4 -0
  21. package/lib/Socket/newsletter.d.ts.map +1 -1
  22. package/lib/Types/Message.d.ts +25 -1
  23. package/lib/Types/Message.d.ts.map +1 -1
  24. package/lib/Utils/activity-logger.d.ts +189 -0
  25. package/lib/Utils/activity-logger.d.ts.map +1 -0
  26. package/lib/Utils/activity-logger.js +418 -0
  27. package/lib/Utils/activity-logger.js.map +1 -0
  28. package/lib/Utils/anti-spam.d.ts +145 -0
  29. package/lib/Utils/anti-spam.d.ts.map +1 -0
  30. package/lib/Utils/anti-spam.js +398 -0
  31. package/lib/Utils/anti-spam.js.map +1 -0
  32. package/lib/Utils/auto-reply.d.ts +123 -0
  33. package/lib/Utils/auto-reply.d.ts.map +1 -0
  34. package/lib/Utils/auto-reply.js +234 -0
  35. package/lib/Utils/auto-reply.js.map +1 -0
  36. package/lib/Utils/broadcast.d.ts +121 -0
  37. package/lib/Utils/broadcast.d.ts.map +1 -0
  38. package/lib/Utils/broadcast.js +223 -0
  39. package/lib/Utils/broadcast.js.map +1 -0
  40. package/lib/Utils/bulk-messaging.d.ts +79 -0
  41. package/lib/Utils/bulk-messaging.d.ts.map +1 -0
  42. package/lib/Utils/bulk-messaging.js +148 -0
  43. package/lib/Utils/bulk-messaging.js.map +1 -0
  44. package/lib/Utils/chat-analytics.d.ts +92 -0
  45. package/lib/Utils/chat-analytics.d.ts.map +1 -0
  46. package/lib/Utils/chat-analytics.js +337 -0
  47. package/lib/Utils/chat-analytics.js.map +1 -0
  48. package/lib/Utils/chat-control.d.ts +156 -0
  49. package/lib/Utils/chat-control.d.ts.map +1 -0
  50. package/lib/Utils/chat-control.js +224 -0
  51. package/lib/Utils/chat-control.js.map +1 -0
  52. package/lib/Utils/chat-export.d.ts +75 -0
  53. package/lib/Utils/chat-export.d.ts.map +1 -0
  54. package/lib/Utils/chat-export.js +309 -0
  55. package/lib/Utils/chat-export.js.map +1 -0
  56. package/lib/Utils/content-detector.d.ts +199 -0
  57. package/lib/Utils/content-detector.d.ts.map +1 -0
  58. package/lib/Utils/content-detector.js +442 -0
  59. package/lib/Utils/content-detector.js.map +1 -0
  60. package/lib/Utils/index.d.ts +23 -0
  61. package/lib/Utils/index.d.ts.map +1 -1
  62. package/lib/Utils/index.js +52 -0
  63. package/lib/Utils/index.js.map +1 -1
  64. package/lib/Utils/link-scanner.d.ts +112 -0
  65. package/lib/Utils/link-scanner.d.ts.map +1 -0
  66. package/lib/Utils/link-scanner.js +433 -0
  67. package/lib/Utils/link-scanner.js.map +1 -0
  68. package/lib/Utils/media-downloader.d.ts +86 -0
  69. package/lib/Utils/media-downloader.d.ts.map +1 -0
  70. package/lib/Utils/media-downloader.js +269 -0
  71. package/lib/Utils/media-downloader.js.map +1 -0
  72. package/lib/Utils/meme-generator.d.ts +96 -0
  73. package/lib/Utils/meme-generator.d.ts.map +1 -0
  74. package/lib/Utils/meme-generator.js +368 -0
  75. package/lib/Utils/meme-generator.js.map +1 -0
  76. package/lib/Utils/message-search.d.ts +96 -0
  77. package/lib/Utils/message-search.d.ts.map +1 -0
  78. package/lib/Utils/message-search.js +261 -0
  79. package/lib/Utils/message-search.js.map +1 -0
  80. package/lib/Utils/messages-media.d.ts +20 -1
  81. package/lib/Utils/messages-media.d.ts.map +1 -1
  82. package/lib/Utils/messages-media.js +100 -5
  83. package/lib/Utils/messages-media.js.map +1 -1
  84. package/lib/Utils/messages.d.ts.map +1 -1
  85. package/lib/Utils/messages.js +14 -2
  86. package/lib/Utils/messages.js.map +1 -1
  87. package/lib/Utils/mini-games.d.ts +155 -0
  88. package/lib/Utils/mini-games.d.ts.map +1 -0
  89. package/lib/Utils/mini-games.js +445 -0
  90. package/lib/Utils/mini-games.js.map +1 -0
  91. package/lib/Utils/pomodoro.d.ts +139 -0
  92. package/lib/Utils/pomodoro.d.ts.map +1 -0
  93. package/lib/Utils/pomodoro.js +434 -0
  94. package/lib/Utils/pomodoro.js.map +1 -0
  95. package/lib/Utils/qr-generator.d.ts +95 -0
  96. package/lib/Utils/qr-generator.d.ts.map +1 -0
  97. package/lib/Utils/qr-generator.js +226 -0
  98. package/lib/Utils/qr-generator.js.map +1 -0
  99. package/lib/Utils/quotes.d.ts +110 -0
  100. package/lib/Utils/quotes.d.ts.map +1 -0
  101. package/lib/Utils/quotes.js +325 -0
  102. package/lib/Utils/quotes.js.map +1 -0
  103. package/lib/Utils/scheduling.d.ts +88 -0
  104. package/lib/Utils/scheduling.d.ts.map +1 -0
  105. package/lib/Utils/scheduling.js +163 -0
  106. package/lib/Utils/scheduling.js.map +1 -0
  107. package/lib/Utils/status-posting.d.ts +151 -0
  108. package/lib/Utils/status-posting.d.ts.map +1 -0
  109. package/lib/Utils/status-posting.js +162 -0
  110. package/lib/Utils/status-posting.js.map +1 -0
  111. package/lib/Utils/templates.d.ts +154 -0
  112. package/lib/Utils/templates.d.ts.map +1 -0
  113. package/lib/Utils/templates.js +368 -0
  114. package/lib/Utils/templates.js.map +1 -0
  115. package/lib/Utils/vcard.d.ts +86 -0
  116. package/lib/Utils/vcard.d.ts.map +1 -0
  117. package/lib/Utils/vcard.js +195 -0
  118. package/lib/Utils/vcard.js.map +1 -0
  119. package/lib/Utils/voice-note.d.ts +115 -0
  120. package/lib/Utils/voice-note.d.ts.map +1 -0
  121. package/lib/Utils/voice-note.js +212 -0
  122. package/lib/Utils/voice-note.js.map +1 -0
  123. package/lib/Utils/weather.d.ts +118 -0
  124. package/lib/Utils/weather.d.ts.map +1 -0
  125. package/lib/Utils/weather.js +362 -0
  126. package/lib/Utils/weather.js.map +1 -0
  127. package/package.json +6 -3
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Baileys-Joss: vCard / Contact Card Generator
3
+ *
4
+ * Fitur untuk membuat dan mengirim kartu kontak
5
+ */
6
+ /**
7
+ * Escape special characters for vCard
8
+ */
9
+ const escapeVCard = (str) => {
10
+ return str
11
+ .replace(/\\/g, '\\\\')
12
+ .replace(/;/g, '\\;')
13
+ .replace(/,/g, '\\,')
14
+ .replace(/\n/g, '\\n');
15
+ };
16
+ /**
17
+ * Format phone number for vCard
18
+ */
19
+ const formatPhone = (phone) => {
20
+ // Remove all non-digit characters except +
21
+ return phone.replace(/[^\d+]/g, '');
22
+ };
23
+ /**
24
+ * Generate vCard string from contact data
25
+ */
26
+ export const generateVCard = (contact) => {
27
+ const lines = [];
28
+ // vCard header
29
+ lines.push('BEGIN:VCARD');
30
+ lines.push('VERSION:3.0');
31
+ // Full name (required)
32
+ const escapedName = escapeVCard(contact.fullName);
33
+ lines.push(`FN:${escapedName}`);
34
+ // Structured name (N: last;first;middle;prefix;suffix)
35
+ const nameParts = contact.fullName.split(' ');
36
+ if (nameParts.length >= 2) {
37
+ const lastName = nameParts[nameParts.length - 1] || '';
38
+ const firstName = nameParts.slice(0, -1).join(' ');
39
+ lines.push(`N:${escapeVCard(lastName)};${escapeVCard(firstName)};;;`);
40
+ }
41
+ else {
42
+ lines.push(`N:${escapedName};;;;`);
43
+ }
44
+ // Organization
45
+ if (contact.organization) {
46
+ lines.push(`ORG:${escapeVCard(contact.organization)}`);
47
+ }
48
+ // Title
49
+ if (contact.title) {
50
+ lines.push(`TITLE:${escapeVCard(contact.title)}`);
51
+ }
52
+ // Phone numbers
53
+ if (contact.phones && contact.phones.length > 0) {
54
+ for (const phone of contact.phones) {
55
+ const type = phone.type || 'CELL';
56
+ const formattedPhone = formatPhone(phone.number);
57
+ if (phone.label) {
58
+ lines.push(`TEL;type=${type};type=VOICE;X-ABLabel=${escapeVCard(phone.label)}:${formattedPhone}`);
59
+ }
60
+ else {
61
+ lines.push(`TEL;type=${type};type=VOICE:${formattedPhone}`);
62
+ }
63
+ }
64
+ }
65
+ // Email addresses
66
+ if (contact.emails && contact.emails.length > 0) {
67
+ for (const email of contact.emails) {
68
+ const type = email.type || 'OTHER';
69
+ lines.push(`EMAIL;type=${type}:${email.email}`);
70
+ }
71
+ }
72
+ // URLs
73
+ if (contact.urls && contact.urls.length > 0) {
74
+ for (const url of contact.urls) {
75
+ const type = url.type || 'OTHER';
76
+ lines.push(`URL;type=${type}:${url.url}`);
77
+ }
78
+ }
79
+ // Addresses
80
+ if (contact.addresses && contact.addresses.length > 0) {
81
+ for (const addr of contact.addresses) {
82
+ const type = addr.type || 'OTHER';
83
+ const parts = [
84
+ '', // PO Box
85
+ '', // Extended address
86
+ addr.street || '',
87
+ addr.city || '',
88
+ addr.state || '',
89
+ addr.postalCode || '',
90
+ addr.country || ''
91
+ ].map(p => escapeVCard(p));
92
+ lines.push(`ADR;type=${type}:${parts.join(';')}`);
93
+ }
94
+ }
95
+ // Birthday
96
+ if (contact.birthday) {
97
+ lines.push(`BDAY:${contact.birthday}`);
98
+ }
99
+ // Notes
100
+ if (contact.note) {
101
+ lines.push(`NOTE:${escapeVCard(contact.note)}`);
102
+ }
103
+ // vCard footer
104
+ lines.push('END:VCARD');
105
+ return lines.join('\r\n');
106
+ };
107
+ /**
108
+ * Generate multiple vCards (for contact array)
109
+ */
110
+ export const generateVCards = (contacts) => {
111
+ return contacts.map(generateVCard).join('\r\n');
112
+ };
113
+ /**
114
+ * Parse vCard string to contact data (basic parser)
115
+ */
116
+ export const parseVCard = (vcard) => {
117
+ const contact = {};
118
+ const lines = vcard.split(/\r?\n/);
119
+ for (const line of lines) {
120
+ const [key, ...valueParts] = line.split(':');
121
+ if (!key)
122
+ continue;
123
+ const value = valueParts.join(':');
124
+ if (key.startsWith('FN')) {
125
+ contact.fullName = value.replace(/\\([;,n\\])/g, '$1').replace(/\\n/g, '\n');
126
+ }
127
+ else if (key.startsWith('ORG')) {
128
+ contact.organization = value.replace(/\\([;,n\\])/g, '$1');
129
+ }
130
+ else if (key.startsWith('TITLE')) {
131
+ contact.title = value.replace(/\\([;,n\\])/g, '$1');
132
+ }
133
+ else if (key.startsWith('TEL')) {
134
+ contact.phones = contact.phones || [];
135
+ const typeMatch = key.match(/type=(\w+)/i);
136
+ const phoneType = (typeMatch?.[1]?.toUpperCase() || 'CELL');
137
+ contact.phones.push({
138
+ number: value,
139
+ type: phoneType
140
+ });
141
+ }
142
+ else if (key.startsWith('EMAIL')) {
143
+ contact.emails = contact.emails || [];
144
+ const typeMatch = key.match(/type=(\w+)/i);
145
+ contact.emails.push({
146
+ email: value,
147
+ type: typeMatch?.[1]?.toUpperCase() || 'OTHER'
148
+ });
149
+ }
150
+ else if (key.startsWith('BDAY')) {
151
+ contact.birthday = value;
152
+ }
153
+ else if (key.startsWith('NOTE')) {
154
+ contact.note = value.replace(/\\n/g, '\n');
155
+ }
156
+ }
157
+ return contact;
158
+ };
159
+ /**
160
+ * Create a simple contact card message content
161
+ */
162
+ export const createContactCard = (contact) => {
163
+ return {
164
+ contacts: {
165
+ displayName: contact.displayName || contact.fullName,
166
+ contacts: [{ vcard: generateVCard(contact) }]
167
+ }
168
+ };
169
+ };
170
+ /**
171
+ * Create a contact array message content
172
+ */
173
+ export const createContactCards = (contacts) => {
174
+ const firstContact = contacts[0];
175
+ return {
176
+ contacts: {
177
+ displayName: contacts.length === 1 && firstContact
178
+ ? (firstContact.displayName || firstContact.fullName)
179
+ : `${contacts.length} Contacts`,
180
+ contacts: contacts.map(c => ({ vcard: generateVCard(c) }))
181
+ }
182
+ };
183
+ };
184
+ /**
185
+ * Quick helper to create contact from phone number
186
+ */
187
+ export const quickContact = (name, phone, options) => {
188
+ return {
189
+ fullName: name,
190
+ phones: [{ number: phone, type: 'CELL' }],
191
+ organization: options?.organization,
192
+ emails: options?.email ? [{ email: options.email, type: 'WORK' }] : undefined
193
+ };
194
+ };
195
+ //# sourceMappingURL=vcard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vcard.js","sourceRoot":"","sources":["../../src/Utils/vcard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Baileys-Joss: Voice Note Utilities
3
+ *
4
+ * Fitur untuk merekam dan mengirim voice note
5
+ */
6
+ export interface VoiceNoteOptions {
7
+ /** Duration in seconds */
8
+ seconds?: number;
9
+ /** Audio sample rate (default: 48000) */
10
+ sampleRate?: number;
11
+ /** Audio channels (default: 1 for mono) */
12
+ channels?: number;
13
+ }
14
+ export interface AudioConversionOptions {
15
+ /** Target format (default: 'ogg') */
16
+ format?: 'ogg' | 'mp3' | 'wav';
17
+ /** Audio bitrate (default: '64k') */
18
+ bitrate?: string;
19
+ /** Sample rate (default: 48000) */
20
+ sampleRate?: number;
21
+ /** Audio channels (default: 1) */
22
+ channels?: number;
23
+ }
24
+ /**
25
+ * Check if FFmpeg is available
26
+ */
27
+ export declare const isFFmpegAvailable: () => Promise<boolean>;
28
+ /**
29
+ * Get audio duration from buffer
30
+ */
31
+ export declare const getAudioDurationFromBuffer: (buffer: Buffer) => Promise<number>;
32
+ /**
33
+ * Convert audio to Opus OGG format (required for WhatsApp voice notes)
34
+ */
35
+ export declare const convertToOpusOgg: (input: Buffer | string, options?: AudioConversionOptions) => Promise<Buffer>;
36
+ /**
37
+ * Convert audio to MP3 format
38
+ */
39
+ export declare const convertToMp3: (input: Buffer | string, options?: AudioConversionOptions) => Promise<Buffer>;
40
+ /**
41
+ * Create voice note message content
42
+ */
43
+ export declare const createVoiceNote: (audio: Buffer | string, options?: VoiceNoteOptions) => Promise<{
44
+ audio: Buffer;
45
+ ptt: true;
46
+ seconds: number;
47
+ mimetype: string;
48
+ }>;
49
+ /**
50
+ * Create regular audio message (not voice note)
51
+ */
52
+ export declare const createAudioMessage: (audio: Buffer | string, options?: VoiceNoteOptions) => Promise<{
53
+ audio: Buffer;
54
+ ptt: false;
55
+ seconds: number;
56
+ mimetype: string;
57
+ }>;
58
+ /**
59
+ * Voice note helper for quick usage
60
+ */
61
+ export declare const VoiceNoteHelper: {
62
+ /**
63
+ * Create PTT voice note from buffer
64
+ */
65
+ fromBuffer: (buffer: Buffer, seconds?: number) => Promise<{
66
+ audio: Buffer;
67
+ ptt: true;
68
+ seconds: number;
69
+ mimetype: string;
70
+ }>;
71
+ /**
72
+ * Create PTT voice note from file
73
+ */
74
+ fromFile: (filePath: string) => Promise<{
75
+ audio: Buffer;
76
+ ptt: true;
77
+ seconds: number;
78
+ mimetype: string;
79
+ }>;
80
+ /**
81
+ * Create regular audio from buffer
82
+ */
83
+ audioFromBuffer: (buffer: Buffer, seconds?: number) => Promise<{
84
+ audio: Buffer;
85
+ ptt: false;
86
+ seconds: number;
87
+ mimetype: string;
88
+ }>;
89
+ /**
90
+ * Create regular audio from file
91
+ */
92
+ audioFromFile: (filePath: string) => Promise<{
93
+ audio: Buffer;
94
+ ptt: false;
95
+ seconds: number;
96
+ mimetype: string;
97
+ }>;
98
+ /**
99
+ * Check FFmpeg availability
100
+ */
101
+ checkFFmpeg: () => Promise<boolean>;
102
+ /**
103
+ * Get audio duration
104
+ */
105
+ getDuration: (buffer: Buffer) => Promise<number>;
106
+ /**
107
+ * Convert to Opus OGG
108
+ */
109
+ toOpus: (input: Buffer | string, options?: AudioConversionOptions) => Promise<Buffer>;
110
+ /**
111
+ * Convert to MP3
112
+ */
113
+ toMp3: (input: Buffer | string, options?: AudioConversionOptions) => Promise<Buffer>;
114
+ };
115
+ //# sourceMappingURL=voice-note.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-note.d.ts","sourceRoot":"","sources":["../../src/Utils/voice-note.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,MAAM,WAAW,gBAAgB;IAChC,0BAA0B;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,sBAAsB;IACtC,qCAAqC;IACrC,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;IAC9B,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAa,OAAO,CAAC,OAAO,CAOzD,CAAA;AAgBD;;GAEG;AACH,eAAO,MAAM,0BAA0B,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,CAW/E,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC5B,OAAO,MAAM,GAAG,MAAM,EACtB,UAAS,sBAA2B,KAClC,OAAO,CAAC,MAAM,CAgChB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,GACxB,OAAO,MAAM,GAAG,MAAM,EACtB,UAAS,sBAA2B,KAClC,OAAO,CAAC,MAAM,CA4BhB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,GAC3B,OAAO,MAAM,GAAG,MAAM,EACtB,UAAS,gBAAqB,KAC5B,OAAO,CAAC;IACV,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,IAAI,CAAA;IACT,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;CAChB,CA+BA,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC9B,OAAO,MAAM,GAAG,MAAM,EACtB,UAAS,gBAAqB,KAC5B,OAAO,CAAC;IACV,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,KAAK,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;CAChB,CAoBA,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,eAAe;IAC3B;;OAEG;yBACwB,MAAM,YAAY,MAAM;eA7E5C,MAAM;aACR,IAAI;iBACA,MAAM;kBACL,MAAM;;IA8EhB;;OAEG;yBACwB,MAAM;eApF1B,MAAM;aACR,IAAI;iBACA,MAAM;kBACL,MAAM;;IAqFhB;;OAEG;8BAC6B,MAAM,YAAY,MAAM;eA/CjD,MAAM;aACR,KAAK;iBACD,MAAM;kBACL,MAAM;;IAgDhB;;OAEG;8BAC6B,MAAM;eAtD/B,MAAM;aACR,KAAK;iBACD,MAAM;kBACL,MAAM;;IAuDhB;;OAEG;uBAlOuC,OAAO,CAAC,OAAO,CAAC;IAqO1D;;OAEG;0BA7MqD,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;IAgNhF;;OAEG;oBAjMI,MAAM,GAAG,MAAM,YACb,sBAAsB,KAC7B,OAAO,CAAC,MAAM,CAAC;IAkMjB;;OAEG;mBA9JI,MAAM,GAAG,MAAM,YACb,sBAAsB,KAC7B,OAAO,CAAC,MAAM,CAAC;CA8JjB,CAAA"}
@@ -0,0 +1,212 @@
1
+ /**
2
+ * Baileys-Joss: Voice Note Utilities
3
+ *
4
+ * Fitur untuk merekam dan mengirim voice note
5
+ */
6
+ import { exec } from 'child_process';
7
+ import { promisify } from 'util';
8
+ import * as fs from 'fs';
9
+ import * as path from 'path';
10
+ import * as os from 'os';
11
+ const execAsync = promisify(exec);
12
+ /**
13
+ * Check if FFmpeg is available
14
+ */
15
+ export const isFFmpegAvailable = async () => {
16
+ try {
17
+ await execAsync('ffmpeg -version');
18
+ return true;
19
+ }
20
+ catch {
21
+ return false;
22
+ }
23
+ };
24
+ /**
25
+ * Get audio duration using FFprobe
26
+ */
27
+ const getAudioDuration = async (audioPath) => {
28
+ try {
29
+ const { stdout } = await execAsync(`ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "${audioPath}"`);
30
+ return Math.ceil(parseFloat(stdout.trim()));
31
+ }
32
+ catch {
33
+ return 0;
34
+ }
35
+ };
36
+ /**
37
+ * Get audio duration from buffer
38
+ */
39
+ export const getAudioDurationFromBuffer = async (buffer) => {
40
+ const tempPath = path.join(os.tmpdir(), `audio_${Date.now()}.tmp`);
41
+ try {
42
+ await fs.promises.writeFile(tempPath, buffer);
43
+ const duration = await getAudioDuration(tempPath);
44
+ return duration;
45
+ }
46
+ finally {
47
+ try {
48
+ await fs.promises.unlink(tempPath);
49
+ }
50
+ catch { }
51
+ }
52
+ };
53
+ /**
54
+ * Convert audio to Opus OGG format (required for WhatsApp voice notes)
55
+ */
56
+ export const convertToOpusOgg = async (input, options = {}) => {
57
+ const isBuffer = Buffer.isBuffer(input);
58
+ const inputPath = isBuffer
59
+ ? path.join(os.tmpdir(), `input_${Date.now()}.tmp`)
60
+ : input;
61
+ const outputPath = path.join(os.tmpdir(), `output_${Date.now()}.ogg`);
62
+ try {
63
+ // Write buffer to temp file if needed
64
+ if (isBuffer) {
65
+ await fs.promises.writeFile(inputPath, input);
66
+ }
67
+ const sampleRate = options.sampleRate || 48000;
68
+ const channels = options.channels || 1;
69
+ const bitrate = options.bitrate || '64k';
70
+ // Convert using FFmpeg
71
+ await execAsync(`ffmpeg -y -i "${inputPath}" -ar ${sampleRate} -ac ${channels} -b:a ${bitrate} -c:a libopus "${outputPath}"`);
72
+ const outputBuffer = await fs.promises.readFile(outputPath);
73
+ return outputBuffer;
74
+ }
75
+ finally {
76
+ // Cleanup temp files
77
+ try {
78
+ if (isBuffer)
79
+ await fs.promises.unlink(inputPath);
80
+ await fs.promises.unlink(outputPath);
81
+ }
82
+ catch { }
83
+ }
84
+ };
85
+ /**
86
+ * Convert audio to MP3 format
87
+ */
88
+ export const convertToMp3 = async (input, options = {}) => {
89
+ const isBuffer = Buffer.isBuffer(input);
90
+ const inputPath = isBuffer
91
+ ? path.join(os.tmpdir(), `input_${Date.now()}.tmp`)
92
+ : input;
93
+ const outputPath = path.join(os.tmpdir(), `output_${Date.now()}.mp3`);
94
+ try {
95
+ if (isBuffer) {
96
+ await fs.promises.writeFile(inputPath, input);
97
+ }
98
+ const sampleRate = options.sampleRate || 44100;
99
+ const channels = options.channels || 2;
100
+ const bitrate = options.bitrate || '128k';
101
+ await execAsync(`ffmpeg -y -i "${inputPath}" -ar ${sampleRate} -ac ${channels} -b:a ${bitrate} "${outputPath}"`);
102
+ return await fs.promises.readFile(outputPath);
103
+ }
104
+ finally {
105
+ try {
106
+ if (isBuffer)
107
+ await fs.promises.unlink(inputPath);
108
+ await fs.promises.unlink(outputPath);
109
+ }
110
+ catch { }
111
+ }
112
+ };
113
+ /**
114
+ * Create voice note message content
115
+ */
116
+ export const createVoiceNote = async (audio, options = {}) => {
117
+ let audioBuffer;
118
+ // Load audio if it's a file path
119
+ if (typeof audio === 'string') {
120
+ audioBuffer = await fs.promises.readFile(audio);
121
+ }
122
+ else {
123
+ audioBuffer = audio;
124
+ }
125
+ // Get or calculate duration
126
+ let seconds = options.seconds;
127
+ if (!seconds) {
128
+ seconds = await getAudioDurationFromBuffer(audioBuffer);
129
+ }
130
+ // Convert to Opus OGG format for WhatsApp compatibility
131
+ const hasFFmpeg = await isFFmpegAvailable();
132
+ if (hasFFmpeg) {
133
+ audioBuffer = await convertToOpusOgg(audioBuffer, {
134
+ sampleRate: options.sampleRate,
135
+ channels: options.channels
136
+ });
137
+ }
138
+ return {
139
+ audio: audioBuffer,
140
+ ptt: true,
141
+ seconds: seconds || 1,
142
+ mimetype: 'audio/ogg; codecs=opus'
143
+ };
144
+ };
145
+ /**
146
+ * Create regular audio message (not voice note)
147
+ */
148
+ export const createAudioMessage = async (audio, options = {}) => {
149
+ let audioBuffer;
150
+ if (typeof audio === 'string') {
151
+ audioBuffer = await fs.promises.readFile(audio);
152
+ }
153
+ else {
154
+ audioBuffer = audio;
155
+ }
156
+ let seconds = options.seconds;
157
+ if (!seconds) {
158
+ seconds = await getAudioDurationFromBuffer(audioBuffer);
159
+ }
160
+ return {
161
+ audio: audioBuffer,
162
+ ptt: false,
163
+ seconds: seconds || 1,
164
+ mimetype: 'audio/mp4'
165
+ };
166
+ };
167
+ /**
168
+ * Voice note helper for quick usage
169
+ */
170
+ export const VoiceNoteHelper = {
171
+ /**
172
+ * Create PTT voice note from buffer
173
+ */
174
+ fromBuffer: async (buffer, seconds) => {
175
+ return createVoiceNote(buffer, { seconds });
176
+ },
177
+ /**
178
+ * Create PTT voice note from file
179
+ */
180
+ fromFile: async (filePath) => {
181
+ return createVoiceNote(filePath);
182
+ },
183
+ /**
184
+ * Create regular audio from buffer
185
+ */
186
+ audioFromBuffer: async (buffer, seconds) => {
187
+ return createAudioMessage(buffer, { seconds });
188
+ },
189
+ /**
190
+ * Create regular audio from file
191
+ */
192
+ audioFromFile: async (filePath) => {
193
+ return createAudioMessage(filePath);
194
+ },
195
+ /**
196
+ * Check FFmpeg availability
197
+ */
198
+ checkFFmpeg: isFFmpegAvailable,
199
+ /**
200
+ * Get audio duration
201
+ */
202
+ getDuration: getAudioDurationFromBuffer,
203
+ /**
204
+ * Convert to Opus OGG
205
+ */
206
+ toOpus: convertToOpusOgg,
207
+ /**
208
+ * Convert to MP3
209
+ */
210
+ toMp3: convertToMp3
211
+ };
212
+ //# sourceMappingURL=voice-note.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-note.js","sourceRoot":"","sources":["../../src/Utils/voice-note.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Baileys-Joss: Weather Bot
3
+ *
4
+ * Informasi cuaca dengan integrasi OpenWeatherMap API
5
+ */
6
+ export interface WeatherConfig {
7
+ apiKey?: string;
8
+ units: 'metric' | 'imperial';
9
+ language: string;
10
+ defaultCity?: string;
11
+ }
12
+ export interface WeatherData {
13
+ city: string;
14
+ country: string;
15
+ temperature: number;
16
+ feelsLike: number;
17
+ humidity: number;
18
+ pressure: number;
19
+ windSpeed: number;
20
+ windDirection: number;
21
+ description: string;
22
+ icon: string;
23
+ visibility: number;
24
+ clouds: number;
25
+ sunrise: number;
26
+ sunset: number;
27
+ timestamp: number;
28
+ }
29
+ export interface ForecastData {
30
+ city: string;
31
+ country: string;
32
+ forecasts: Array<{
33
+ date: string;
34
+ time: string;
35
+ temperature: number;
36
+ feelsLike: number;
37
+ humidity: number;
38
+ description: string;
39
+ icon: string;
40
+ windSpeed: number;
41
+ pop: number;
42
+ }>;
43
+ }
44
+ export interface WeatherAlert {
45
+ event: string;
46
+ description: string;
47
+ start: number;
48
+ end: number;
49
+ severity: 'minor' | 'moderate' | 'severe' | 'extreme';
50
+ }
51
+ export declare class WeatherBot {
52
+ private config;
53
+ private cache;
54
+ private cacheTimeout;
55
+ constructor(config?: Partial<WeatherConfig>);
56
+ /**
57
+ * Set API key
58
+ */
59
+ setApiKey(apiKey: string): void;
60
+ /**
61
+ * Get weather for city
62
+ */
63
+ getWeather(city: string): Promise<WeatherData>;
64
+ /**
65
+ * Fetch weather from OpenWeatherMap API
66
+ */
67
+ private fetchWeatherFromAPI;
68
+ /**
69
+ * Get mock weather data
70
+ */
71
+ private getMockWeather;
72
+ /**
73
+ * Format weather data for display
74
+ */
75
+ formatWeather(data: WeatherData, style?: 'simple' | 'detailed' | 'compact'): string;
76
+ /**
77
+ * Get weather advice based on conditions
78
+ */
79
+ getAdvice(data: WeatherData): string;
80
+ /**
81
+ * Parse command and return weather
82
+ */
83
+ parseCommand(command: string): Promise<string>;
84
+ /**
85
+ * Get help message
86
+ */
87
+ getHelpMessage(): string;
88
+ /**
89
+ * Get wind direction from degrees
90
+ */
91
+ private getWindDirection;
92
+ /**
93
+ * Capitalize first letter
94
+ */
95
+ private capitalizeFirst;
96
+ /**
97
+ * Capitalize each word
98
+ */
99
+ private capitalizeWords;
100
+ /**
101
+ * Clear cache
102
+ */
103
+ clearCache(): void;
104
+ }
105
+ export declare const createWeatherBot: (config?: Partial<WeatherConfig>) => WeatherBot;
106
+ /**
107
+ * Get weather for city
108
+ */
109
+ export declare const getWeather: (city: string) => Promise<string>;
110
+ /**
111
+ * Get simple weather
112
+ */
113
+ export declare const getSimpleWeather: (city: string) => Promise<string>;
114
+ /**
115
+ * Parse weather command
116
+ */
117
+ export declare const weatherCommand: (cmd: string) => Promise<string>;
118
+ //# sourceMappingURL=weather.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weather.d.ts","sourceRoot":"","sources":["../../src/Utils/weather.ts"],"names":[],"mappings":"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"}