jsdecryptor 4.0.3

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 (247) hide show
  1. package/Database/database.js +446 -0
  2. package/Database/migration.js +327 -0
  3. package/Database/pgSync.js +229 -0
  4. package/Database/settingsStore.js +305 -0
  5. package/config.js +32 -0
  6. package/dave.js +3063 -0
  7. package/davelib/antibadword.js +278 -0
  8. package/davelib/antilink.js +88 -0
  9. package/davelib/antilinkHelper.js +48 -0
  10. package/davelib/botConfig.js +71 -0
  11. package/davelib/connect4.js +111 -0
  12. package/davelib/converter.js +89 -0
  13. package/davelib/dicegame.js +114 -0
  14. package/davelib/exif.js +138 -0
  15. package/davelib/fakeContact.js +85 -0
  16. package/davelib/fontStyles.js +237 -0
  17. package/davelib/greetings.js +47 -0
  18. package/davelib/id.js +11 -0
  19. package/davelib/index.js +577 -0
  20. package/davelib/isAdmin.js +32 -0
  21. package/davelib/isBanned.js +12 -0
  22. package/davelib/isOwner.js +15 -0
  23. package/davelib/lightweight_store.js +169 -0
  24. package/davelib/messageConfig.js +15 -0
  25. package/davelib/messageHandler.js +87 -0
  26. package/davelib/myfunc.js +379 -0
  27. package/davelib/myfunc2.js +170 -0
  28. package/davelib/reactions.js +180 -0
  29. package/davelib/server.html +563 -0
  30. package/davelib/sticker.js +208 -0
  31. package/davelib/tempCleanup.js +53 -0
  32. package/davelib/tictactoe.js +104 -0
  33. package/davelib/uploadImage.js +100 -0
  34. package/davelib/uploader.js +110 -0
  35. package/davelib/welcome.js +100 -0
  36. package/davelib/wordchain.js +121 -0
  37. package/daveset.js +16 -0
  38. package/davexcore/ai/ai.js +100 -0
  39. package/davexcore/ai/aiGpt4.js +59 -0
  40. package/davexcore/ai/aimodels.js +284 -0
  41. package/davexcore/ai/aivideo.js +31 -0
  42. package/davexcore/ai/analyze.js +233 -0
  43. package/davexcore/ai/bard.js +101 -0
  44. package/davexcore/ai/bird.js +101 -0
  45. package/davexcore/ai/blackbox.js +30 -0
  46. package/davexcore/ai/character.js +80 -0
  47. package/davexcore/ai/copilot.js +58 -0
  48. package/davexcore/ai/dalle.js +39 -0
  49. package/davexcore/ai/davex.js +50 -0
  50. package/davexcore/ai/deepseek.js +96 -0
  51. package/davexcore/ai/grok.js +67 -0
  52. package/davexcore/ai/imagine.js +89 -0
  53. package/davexcore/ai/meta.js +82 -0
  54. package/davexcore/ai/mistral.js +101 -0
  55. package/davexcore/ai/perplexity.js +95 -0
  56. package/davexcore/ai/sora.js +44 -0
  57. package/davexcore/ai/speechwriter.js +46 -0
  58. package/davexcore/ai/vision.js +244 -0
  59. package/davexcore/ai/wormgpt.js +56 -0
  60. package/davexcore/anti/antiaudio.js +106 -0
  61. package/davexcore/anti/antibadword.js +313 -0
  62. package/davexcore/anti/antibug.js +156 -0
  63. package/davexcore/anti/anticall.js +219 -0
  64. package/davexcore/anti/antichart.js +280 -0
  65. package/davexcore/anti/antidelete.js +673 -0
  66. package/davexcore/anti/antideletestatus.js +535 -0
  67. package/davexcore/anti/antidemote.js +352 -0
  68. package/davexcore/anti/antidocument.js +105 -0
  69. package/davexcore/anti/antiedit.js +410 -0
  70. package/davexcore/anti/antifiles.js +109 -0
  71. package/davexcore/anti/antigroupmention.js +206 -0
  72. package/davexcore/anti/antiimage.js +105 -0
  73. package/davexcore/anti/antikick.js +125 -0
  74. package/davexcore/anti/antilink.js +237 -0
  75. package/davexcore/anti/antimention.js +143 -0
  76. package/davexcore/anti/antipromote.js +320 -0
  77. package/davexcore/anti/antisticker.js +105 -0
  78. package/davexcore/anti/antitag.js +191 -0
  79. package/davexcore/anti/antivideo.js +105 -0
  80. package/davexcore/anti/antiviewonce.js +396 -0
  81. package/davexcore/anti/groupanticall.js +262 -0
  82. package/davexcore/anti/mention.js +242 -0
  83. package/davexcore/automation/alwaysonline.js +226 -0
  84. package/davexcore/automation/autoReadReciepts.js +96 -0
  85. package/davexcore/automation/autoread.js +104 -0
  86. package/davexcore/automation/autorecording.js +197 -0
  87. package/davexcore/automation/autostatus.js +317 -0
  88. package/davexcore/automation/autotyping.js +197 -0
  89. package/davexcore/automation/chatbot.js +444 -0
  90. package/davexcore/automation/chatmanage.js +199 -0
  91. package/davexcore/automation/devReact.js +43 -0
  92. package/davexcore/automation/goodbye.js +181 -0
  93. package/davexcore/automation/greetings.js +154 -0
  94. package/davexcore/automation/welcome.js +187 -0
  95. package/davexcore/downloads/apk.js +157 -0
  96. package/davexcore/downloads/facebook.js +94 -0
  97. package/davexcore/downloads/gitclone.js +137 -0
  98. package/davexcore/downloads/igs.js +333 -0
  99. package/davexcore/downloads/instagram.js +133 -0
  100. package/davexcore/downloads/mediafire.js +144 -0
  101. package/davexcore/downloads/pinterest.js +38 -0
  102. package/davexcore/downloads/play.js +158 -0
  103. package/davexcore/downloads/saveStatus.js +3 -0
  104. package/davexcore/downloads/song.js +135 -0
  105. package/davexcore/downloads/spotify.js +133 -0
  106. package/davexcore/downloads/tiktok.js +167 -0
  107. package/davexcore/downloads/tiktokaudio.js +158 -0
  108. package/davexcore/downloads/video.js +188 -0
  109. package/davexcore/downloads/ytdl.js +252 -0
  110. package/davexcore/downloads/ytdocplay.js +130 -0
  111. package/davexcore/downloads/ytdocvideo.js +95 -0
  112. package/davexcore/downloads/yts.js +64 -0
  113. package/davexcore/games/connect4.js +267 -0
  114. package/davexcore/games/dice.js +286 -0
  115. package/davexcore/games/eightball.js +24 -0
  116. package/davexcore/games/hangman.js +60 -0
  117. package/davexcore/games/rps.js +25 -0
  118. package/davexcore/games/ship.js +36 -0
  119. package/davexcore/games/slot.js +21 -0
  120. package/davexcore/games/tictactoe.js +263 -0
  121. package/davexcore/games/trivia.js +46 -0
  122. package/davexcore/games/wordchain.js +242 -0
  123. package/davexcore/group/addmember.js +101 -0
  124. package/davexcore/group/ban.js +63 -0
  125. package/davexcore/group/blockUnblock.js +177 -0
  126. package/davexcore/group/clear.js +196 -0
  127. package/davexcore/group/creategroup.js +43 -0
  128. package/davexcore/group/demote.js +115 -0
  129. package/davexcore/group/disappear.js +67 -0
  130. package/davexcore/group/groupinfo.js +167 -0
  131. package/davexcore/group/groupmanage.js +133 -0
  132. package/davexcore/group/hidetag.js +108 -0
  133. package/davexcore/group/joinrequests.js +145 -0
  134. package/davexcore/group/kick.js +92 -0
  135. package/davexcore/group/kickall.js +63 -0
  136. package/davexcore/group/leave.js +38 -0
  137. package/davexcore/group/linkgroup.js +63 -0
  138. package/davexcore/group/mute.js +57 -0
  139. package/davexcore/group/online.js +117 -0
  140. package/davexcore/group/pmblocker.js +65 -0
  141. package/davexcore/group/promote.js +93 -0
  142. package/davexcore/group/resetlink.js +57 -0
  143. package/davexcore/group/staff.js +99 -0
  144. package/davexcore/group/tag.js +111 -0
  145. package/davexcore/group/tagadmins.js +88 -0
  146. package/davexcore/group/tagall.js +99 -0
  147. package/davexcore/group/tagnotadmin.js +92 -0
  148. package/davexcore/group/topmembers.js +202 -0
  149. package/davexcore/group/unban.js +64 -0
  150. package/davexcore/group/unmute.js +45 -0
  151. package/davexcore/group/warn.js +83 -0
  152. package/davexcore/group/warnings.js +26 -0
  153. package/davexcore/media/anime.js +130 -0
  154. package/davexcore/media/attp.js +127 -0
  155. package/davexcore/media/design.js +52 -0
  156. package/davexcore/media/emojimix.js +105 -0
  157. package/davexcore/media/getpp.js +108 -0
  158. package/davexcore/media/image.js +87 -0
  159. package/davexcore/media/imageedit.js +329 -0
  160. package/davexcore/media/img-blur.js +70 -0
  161. package/davexcore/media/meme.js +35 -0
  162. package/davexcore/media/pies.js +53 -0
  163. package/davexcore/media/quotesticker.js +153 -0
  164. package/davexcore/media/remini.js +126 -0
  165. package/davexcore/media/removebg.js +114 -0
  166. package/davexcore/media/setpp.js +65 -0
  167. package/davexcore/media/shazam.js +251 -0
  168. package/davexcore/media/simage.js +74 -0
  169. package/davexcore/media/sticker.js +134 -0
  170. package/davexcore/media/stickercrop.js +133 -0
  171. package/davexcore/media/stickertelegram.js +133 -0
  172. package/davexcore/media/take.js +76 -0
  173. package/davexcore/media/textmaker.js +106 -0
  174. package/davexcore/media/toAudio.js +180 -0
  175. package/davexcore/media/togif.js +33 -0
  176. package/davexcore/media/toimg.js +26 -0
  177. package/davexcore/media/tomp4.js +34 -0
  178. package/davexcore/media/tostatus.js +160 -0
  179. package/davexcore/media/tts.js +47 -0
  180. package/davexcore/media/viewonce.js +59 -0
  181. package/davexcore/media/vn.js +67 -0
  182. package/davexcore/media/vv2.js +3 -0
  183. package/davexcore/media/wallpaper.js +89 -0
  184. package/davexcore/media/wasted.js +57 -0
  185. package/davexcore/misc/compliment.js +93 -0
  186. package/davexcore/misc/dare.js +47 -0
  187. package/davexcore/misc/fact.js +14 -0
  188. package/davexcore/misc/flirt.js +26 -0
  189. package/davexcore/misc/goodnight.js +33 -0
  190. package/davexcore/misc/insult.js +281 -0
  191. package/davexcore/misc/joke.js +66 -0
  192. package/davexcore/misc/misc.js +200 -0
  193. package/davexcore/misc/quote.js +22 -0
  194. package/davexcore/misc/roseday.js +24 -0
  195. package/davexcore/misc/shayari.js +62 -0
  196. package/davexcore/misc/simp.js +47 -0
  197. package/davexcore/misc/stupid.js +51 -0
  198. package/davexcore/misc/truth.js +146 -0
  199. package/davexcore/owner/alive.js +67 -0
  200. package/davexcore/owner/bio.js +49 -0
  201. package/davexcore/owner/broadcast.js +74 -0
  202. package/davexcore/owner/chanel.js +79 -0
  203. package/davexcore/owner/channelid.js +50 -0
  204. package/davexcore/owner/clearsession.js +86 -0
  205. package/davexcore/owner/help.js +649 -0
  206. package/davexcore/owner/hijack.js +69 -0
  207. package/davexcore/owner/menuManage.js +173 -0
  208. package/davexcore/owner/menuSettings.js +1 -0
  209. package/davexcore/owner/owner.js +17 -0
  210. package/davexcore/owner/pair.js +160 -0
  211. package/davexcore/owner/pinchat.js +44 -0
  212. package/davexcore/owner/ping.js +65 -0
  213. package/davexcore/owner/profilepic.js +61 -0
  214. package/davexcore/owner/resetmenuimage.js +16 -0
  215. package/davexcore/owner/setGroupStatus.js +315 -0
  216. package/davexcore/owner/setbotconfig.js +306 -0
  217. package/davexcore/owner/setfont.js +79 -0
  218. package/davexcore/owner/setowner.js +144 -0
  219. package/davexcore/owner/setprefix.js +131 -0
  220. package/davexcore/owner/settings.js +98 -0
  221. package/davexcore/owner/startupwelcome.js +94 -0
  222. package/davexcore/owner/sudo.js +138 -0
  223. package/davexcore/owner/update.js +282 -0
  224. package/davexcore/tmp/1772020249097.jpg +0 -0
  225. package/davexcore/utility/bible.js +239 -0
  226. package/davexcore/utility/cleartmp.js +107 -0
  227. package/davexcore/utility/delete.js +182 -0
  228. package/davexcore/utility/encrypt.js +99 -0
  229. package/davexcore/utility/ethicalhacking.js +108 -0
  230. package/davexcore/utility/fetch.js +127 -0
  231. package/davexcore/utility/github.js +85 -0
  232. package/davexcore/utility/google.js +79 -0
  233. package/davexcore/utility/join.js +52 -0
  234. package/davexcore/utility/lastseen.js +67 -0
  235. package/davexcore/utility/location.js +106 -0
  236. package/davexcore/utility/lyrics.js +54 -0
  237. package/davexcore/utility/movie.js +66 -0
  238. package/davexcore/utility/news.js +37 -0
  239. package/davexcore/utility/sports.js +403 -0
  240. package/davexcore/utility/ss.js +63 -0
  241. package/davexcore/utility/tinyurl.js +83 -0
  242. package/davexcore/utility/translate.js +101 -0
  243. package/davexcore/utility/url.js +112 -0
  244. package/davexcore/utility/vcf.js +84 -0
  245. package/davexcore/utility/weather.js +162 -0
  246. package/index.js +994 -0
  247. package/package.json +64 -0
@@ -0,0 +1,280 @@
1
+ const { setAntichart, getAntichart, removeAntichart } = require('../../davelib/index');
2
+ const isAdmin = require('../../davelib/isAdmin');
3
+ const { createFakeContact, getBotName } = require('../../davelib/fakeContact');
4
+ const db = require('../../Database/database');
5
+
6
+ async function antichartCommand(sock, chatId, message, senderId, isSenderAdmin, fullArgs) {
7
+ try {
8
+ const fake = createFakeContact(senderId);
9
+ const botName = getBotName();
10
+
11
+ if (!isSenderAdmin && !message.key.fromMe && !db.isSudo(senderId)) {
12
+ await sock.sendMessage(chatId, { text: `*${botName}*\nFor Group Admins Only` }, { quoted: fake });
13
+ return;
14
+ }
15
+
16
+ const contextInfo = message.message?.extendedTextMessage?.contextInfo || {};
17
+ const mentioned = contextInfo.mentionedJid || [];
18
+ const quoted = contextInfo.participant;
19
+ const quotedStanza = contextInfo.stanzaId;
20
+ let targetUser = mentioned[0] || null;
21
+ if (!targetUser && quoted) {
22
+ targetUser = quoted;
23
+ }
24
+ if (!targetUser && quotedStanza && contextInfo.quotedMessage) {
25
+ const quotedParticipant = contextInfo.participant;
26
+ if (quotedParticipant) targetUser = quotedParticipant;
27
+ }
28
+
29
+ const argsText = (fullArgs || '').trim().toLowerCase();
30
+ const argParts = argsText.split(/\s+/).filter(p => p && !p.startsWith('@'));
31
+ const action = argParts[0] || '';
32
+
33
+ if (!action) {
34
+ const config = await getAntichart(chatId);
35
+ const currentMode = config?.enabled ? config.action : 'off';
36
+ const modeType = config?.blockedUsers?.length > 0 ? 'Targeted Mode' : 'Global Mode';
37
+ const blockedCount = config?.blockedUsers?.length || 0;
38
+
39
+ const usage = `*${botName} ANTI-CHART*\n\n` +
40
+ `Current Status: ${currentMode.toUpperCase()}\n` +
41
+ `Mode Type: ${modeType}\n` +
42
+ `Blocked Users: ${blockedCount}\n\n` +
43
+ `*Global Commands:*\n` +
44
+ `.antichart delete\n` +
45
+ `.antichart warn\n` +
46
+ `.antichart kick\n` +
47
+ `.antichart off\n\n` +
48
+ `*Target User Commands:*\n` +
49
+ `.antichart delete @user\n` +
50
+ `.antichart warn @user\n` +
51
+ `.antichart kick @user\n` +
52
+ `(or reply to their message)\n\n` +
53
+ `*Manage Blocked Users:*\n` +
54
+ `.antichart list\n` +
55
+ `.antichart unblock @user`;
56
+
57
+ await sock.sendMessage(chatId, { text: usage }, { quoted: fake });
58
+ return;
59
+ }
60
+
61
+ if (action === 'list') {
62
+ const config = await getAntichart(chatId);
63
+ if (!config || !config.blockedUsers || config.blockedUsers.length === 0) {
64
+ await sock.sendMessage(chatId, {
65
+ text: `*${botName}*\nNo users are currently blocked by Anti-Chart.`
66
+ }, { quoted: fake });
67
+ return;
68
+ }
69
+
70
+ let blockedList = `*${botName} BLOCKED USERS*\n\n`;
71
+ config.blockedUsers.forEach((user, index) => {
72
+ const username = user.split('@')[0];
73
+ blockedList += `${index + 1}. @${username}\n`;
74
+ });
75
+
76
+ await sock.sendMessage(chatId, {
77
+ text: blockedList,
78
+ mentions: config.blockedUsers
79
+ }, { quoted: fake });
80
+ return;
81
+ }
82
+
83
+ if (action === 'unblock') {
84
+ if (!targetUser) {
85
+ await sock.sendMessage(chatId, {
86
+ text: `*${botName}*\nPlease mention a user to unblock.\nUsage: .antichart unblock @user`
87
+ }, { quoted: fake });
88
+ return;
89
+ }
90
+
91
+ const config = await getAntichart(chatId);
92
+ if (!config || !config.blockedUsers || !config.blockedUsers.includes(targetUser)) {
93
+ await sock.sendMessage(chatId, {
94
+ text: `*${botName}*\n@${targetUser.split('@')[0]} is not blocked.`,
95
+ mentions: [targetUser]
96
+ }, { quoted: fake });
97
+ return;
98
+ }
99
+
100
+ config.blockedUsers = config.blockedUsers.filter(user => user !== targetUser);
101
+
102
+ if (config.blockedUsers.length === 0 && config.action === 'off') {
103
+ await removeAntichart(chatId);
104
+ await sock.sendMessage(chatId, {
105
+ text: `*${botName}*\n@${targetUser.split('@')[0]} unblocked.\nAnti-Chart disabled as no users remain blocked.`,
106
+ mentions: [targetUser]
107
+ }, { quoted: fake });
108
+ } else {
109
+ await setAntichart(chatId, config.enabled, config.action, config.blockedUsers);
110
+ await sock.sendMessage(chatId, {
111
+ text: `*${botName}*\n@${targetUser.split('@')[0]} has been unblocked from Anti-Chart.`,
112
+ mentions: [targetUser]
113
+ }, { quoted: fake });
114
+ }
115
+ return;
116
+ }
117
+
118
+ const validModes = ["off", "delete", "warn", "kick"];
119
+
120
+ if (!validModes.includes(action)) {
121
+ await sock.sendMessage(chatId, {
122
+ text: `*${botName}*\nInvalid mode. Use: delete, warn, kick, off, list, or unblock.`
123
+ }, { quoted: fake });
124
+ return;
125
+ }
126
+
127
+ if (action === 'off') {
128
+ await removeAntichart(chatId);
129
+ await sock.sendMessage(chatId, {
130
+ text: `*${botName}*\nAnti-Chart DISABLED\nAll protections removed.`
131
+ }, { quoted: fake });
132
+ } else {
133
+ if (targetUser) {
134
+ const config = await getAntichart(chatId) || {
135
+ enabled: true,
136
+ action: action,
137
+ blockedUsers: []
138
+ };
139
+
140
+ if (!config.blockedUsers) config.blockedUsers = [];
141
+
142
+ if (!config.blockedUsers.includes(targetUser)) {
143
+ config.blockedUsers.push(targetUser);
144
+ }
145
+
146
+ config.enabled = true;
147
+ config.action = action;
148
+
149
+ await setAntichart(chatId, config.enabled, config.action, config.blockedUsers);
150
+
151
+ const actionMessages = {
152
+ 'delete': 'All messages will be deleted',
153
+ 'warn': 'Messages deleted + user will be warned',
154
+ 'kick': 'Messages deleted + user will be kicked'
155
+ };
156
+
157
+ await sock.sendMessage(chatId, {
158
+ text: `*${botName} TARGETED MODE*\n\nUser: @${targetUser.split('@')[0]}\nAction: ${action.toUpperCase()}\nStatus: Blocked\n\n${actionMessages[action]}`,
159
+ mentions: [targetUser]
160
+ }, { quoted: fake });
161
+ } else {
162
+ await setAntichart(chatId, true, action, []);
163
+
164
+ const actionMessages = {
165
+ 'delete': 'All messages from non-admins will be deleted automatically',
166
+ 'warn': 'Messages deleted + non-admins will be warned',
167
+ 'kick': 'Messages deleted + non-admins will be kicked'
168
+ };
169
+
170
+ await sock.sendMessage(chatId, {
171
+ text: `*${botName} GLOBAL MODE*\n\nAction: ${action.toUpperCase()}\nStatus: Active for all non-admins\n\n${actionMessages[action]}\n\nNote: Admins are exempt from Anti-Chart.`
172
+ }, { quoted: fake });
173
+ }
174
+ }
175
+ } catch (error) {
176
+ console.error('Error in antichart command:', error.message, 'Line:', error.stack?.split('\n')[1]);
177
+ const botName = getBotName();
178
+ const fake = createFakeContact(message?.key?.participant);
179
+ await sock.sendMessage(chatId, { text: `*${botName}*\nError processing command` }, { quoted: fake });
180
+ }
181
+ }
182
+
183
+ async function handleChartDetection(sock, chatId, message, senderId) {
184
+ try {
185
+ const config = await getAntichart(chatId);
186
+ if (!config || !config.enabled || config.action === 'off') return;
187
+ if (!chatId.endsWith('@g.us')) return;
188
+
189
+ if (message.key.fromMe) return;
190
+
191
+ const { isSenderAdmin, isBotAdmin } = await isAdmin(sock, chatId, senderId);
192
+ if (!isBotAdmin) return;
193
+ if (db.isSudo(senderId)) return;
194
+
195
+ const isBlockedUser = config.blockedUsers && config.blockedUsers.includes(senderId);
196
+
197
+ let shouldAct = false;
198
+
199
+ if (config.blockedUsers && config.blockedUsers.length > 0) {
200
+ shouldAct = isBlockedUser;
201
+ } else {
202
+ shouldAct = !isSenderAdmin;
203
+ }
204
+
205
+ if (!shouldAct) return;
206
+
207
+ const msg = message.message;
208
+ if (!msg) return;
209
+
210
+ const hasSticker = msg.stickerMessage;
211
+ const hasImage = msg.imageMessage;
212
+ const hasVideo = msg.videoMessage;
213
+ const hasAudio = msg.audioMessage || msg.pttMessage;
214
+ const hasDocument = msg.documentMessage;
215
+ const hasText = msg.conversation || msg.extendedTextMessage?.text;
216
+ const hasContact = msg.contactMessage;
217
+ const hasLocation = msg.locationMessage;
218
+ const hasPoll = msg.pollCreationMessage;
219
+ const hasGif = msg.imageMessage?.gifPlayback;
220
+ const hasButtons = msg.buttonsMessage;
221
+ const hasTemplate = msg.templateMessage;
222
+ const hasList = msg.listMessage;
223
+ const hasReaction = msg.reactionMessage;
224
+
225
+ const hasAnyMessage = hasSticker || hasImage || hasVideo || hasAudio ||
226
+ hasDocument || hasText || hasContact || hasLocation ||
227
+ hasPoll || hasGif || hasButtons || hasTemplate ||
228
+ hasList || hasReaction;
229
+
230
+ if (!hasAnyMessage) return;
231
+
232
+ const botName = getBotName();
233
+ const kid = senderId;
234
+ const userTag = `@${kid.split("@")[0]}`;
235
+
236
+ try {
237
+ await sock.sendMessage(chatId, {
238
+ delete: {
239
+ remoteJid: chatId,
240
+ fromMe: false,
241
+ id: message.key.id,
242
+ participant: kid
243
+ }
244
+ });
245
+ } catch (e) {
246
+ console.error("[ANTI-CHART] Delete failed:", e.message);
247
+ return;
248
+ }
249
+
250
+ if (config.action === 'kick') {
251
+ try {
252
+ await sock.sendMessage(chatId, {
253
+ text: `*${botName}*\n\n${userTag} has been removed from the group.`,
254
+ mentions: [kid]
255
+ });
256
+ await sock.groupParticipantsUpdate(chatId, [kid], 'remove');
257
+ } catch (kickError) {
258
+ console.error("[ANTI-CHART] Kick failed:", kickError.message);
259
+ }
260
+
261
+ } else if (config.action === 'warn') {
262
+ try {
263
+ await sock.sendMessage(chatId, {
264
+ text: `*${botName}*\n\n${userTag}, messaging is prohibited in this group.`,
265
+ mentions: [kid]
266
+ });
267
+ } catch (warnError) {
268
+ console.error("[ANTI-CHART] Warning failed:", warnError.message);
269
+ }
270
+ }
271
+
272
+ } catch (error) {
273
+ console.error('Error in handleChartDetection:', error.message);
274
+ }
275
+ }
276
+
277
+ module.exports = {
278
+ antichartCommand,
279
+ handleChartDetection
280
+ };