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,144 @@
1
+ const { getOwnerConfig, setOwnerConfig } = require('../../Database/settingsStore');
2
+ const db = require('../../Database/database');
3
+ const { createFakeContact, getBotName, getOwnerName: getOwnerNameFromConfig, setOwnerName: setOwnerNameToConfig } = require('../../davelib/fakeContact');
4
+ const { setOwnerName: setBotConfigOwnerName } = require('../../davelib/botConfig');
5
+
6
+ const DEFAULT_OWNER_NAME = 'Not set';
7
+
8
+ async function isAuthorized(sock, message) {
9
+ try {
10
+ const senderId = message.key.participant || message.key.remoteJid;
11
+ if (message.key.fromMe) return true;
12
+ return db.isSudo(senderId);
13
+ } catch {
14
+ return message.key.fromMe;
15
+ }
16
+ }
17
+
18
+ function getOwnerName() {
19
+ try {
20
+ return getOwnerNameFromConfig() || DEFAULT_OWNER_NAME;
21
+ } catch (error) {
22
+ console.error('Error getting owner name:', error.message, 'Line:', error.stack?.split('\n')[1]);
23
+ return DEFAULT_OWNER_NAME;
24
+ }
25
+ }
26
+
27
+ function setOwnerName(newOwnerName) {
28
+ try {
29
+ if (!newOwnerName?.trim() || newOwnerName.trim().length > 20) return false;
30
+ setBotConfigOwnerName(newOwnerName.trim());
31
+ return true;
32
+ } catch (error) {
33
+ console.error('Error setting owner name:', error.message, 'Line:', error.stack?.split('\n')[1]);
34
+ return false;
35
+ }
36
+ }
37
+
38
+ function resetOwnerName() {
39
+ try {
40
+ setBotConfigOwnerName(DEFAULT_OWNER_NAME);
41
+ return true;
42
+ } catch (error) {
43
+ console.error('Error resetting owner name:', error.message, 'Line:', error.stack?.split('\n')[1]);
44
+ return false;
45
+ }
46
+ }
47
+
48
+ function validateOwnerName(name) {
49
+ if (!name?.trim()) return { isValid: false, message: 'Owner name cannot be empty' };
50
+
51
+ const trimmed = name.trim();
52
+ if (trimmed.length > 20) return { isValid: false, message: 'Owner name must be 1-20 characters long' };
53
+
54
+ const invalidChars = /[<>@#\$%\^\*\\\/]/;
55
+ if (invalidChars.test(trimmed)) return { isValid: false, message: 'Owner name contains invalid characters' };
56
+
57
+ return { isValid: true, message: 'Valid owner name' };
58
+ }
59
+
60
+ async function handleSetOwnerCommand(sock, chatId, message) {
61
+ try {
62
+ const senderId = message.key.participant || message.key.remoteJid;
63
+ const fake = createFakeContact(senderId);
64
+ const botName = getBotName();
65
+
66
+ if (!await isAuthorized(sock, message)) {
67
+ const authMsgs = [
68
+ `*${botName}*\nOwner only.`,
69
+ `*${botName}*\nPrivileges required.`,
70
+ `*${botName}*\nBoss only.`
71
+ ];
72
+ await sock.sendMessage(chatId, {
73
+ text: authMsgs[Math.floor(Math.random() * authMsgs.length)]
74
+ }, { quoted: fake });
75
+ return;
76
+ }
77
+
78
+ const text = message.message?.conversation || message.message?.extendedTextMessage?.text || '';
79
+ const args = text.trim().split(' ').slice(1).join(' ');
80
+
81
+ if (!args) {
82
+ const currentOwner = getOwnerName();
83
+ await sock.sendMessage(chatId, {
84
+ text: `╭─❖ *OWNER SETTINGS* ❖─╮\n` +
85
+ `│ Current : ${currentOwner}\n` +
86
+ `╰───────────────────────╯\n\n` +
87
+ `✦ .setowner <name>\n` +
88
+ `✦ .setowner reset`
89
+ }, { quoted: fake });
90
+ return;
91
+ }
92
+
93
+ let responseText = '';
94
+
95
+ if (args.toLowerCase() === 'reset') {
96
+ resetOwnerName();
97
+ const resetMsgs = [
98
+ `*${botName}*\n✓ Owner name reset.`,
99
+ `*${botName}*\n✓ Reset to default.`,
100
+ `*${botName}*\n✓ Owner name cleared.`
101
+ ];
102
+ responseText = resetMsgs[Math.floor(Math.random() * resetMsgs.length)];
103
+ } else {
104
+ const validation = validateOwnerName(args);
105
+ if (!validation.isValid) {
106
+ const errorMsgs = [
107
+ `*${botName}*\n✗ ${validation.message}`,
108
+ `*${botName}*\n✗ Invalid: ${validation.message.toLowerCase()}`,
109
+ `*${botName}*\n✗ ${validation.message}`
110
+ ];
111
+ responseText = errorMsgs[Math.floor(Math.random() * errorMsgs.length)];
112
+ } else {
113
+ setOwnerName(args);
114
+ const successMsgs = [
115
+ `*${botName}*\n✓ Owner: ${args}`,
116
+ `*${botName}*\n✓ Set to: ${args}`,
117
+ `*${botName}*\n✓ Now ${args}`
118
+ ];
119
+ responseText = successMsgs[Math.floor(Math.random() * successMsgs.length)];
120
+ }
121
+ }
122
+
123
+ await sock.sendMessage(chatId, { text: responseText }, { quoted: fake });
124
+ } catch (error) {
125
+ console.error('Error in setowner command:', error.message, 'Line:', error.stack?.split('\n')[1]);
126
+
127
+ const errorMsgs = [
128
+ `*${botName}*\n✗ Something went wrong.`,
129
+ `*${botName}*\n✗ Command failed.`,
130
+ `*${botName}*\n✗ Try again.`
131
+ ];
132
+ await sock.sendMessage(chatId, {
133
+ text: errorMsgs[Math.floor(Math.random() * errorMsgs.length)]
134
+ }, { quoted: fake });
135
+ }
136
+ }
137
+
138
+ module.exports = {
139
+ getOwnerName,
140
+ setOwnerName,
141
+ resetOwnerName,
142
+ validateOwnerName,
143
+ handleSetOwnerCommand
144
+ };
@@ -0,0 +1,131 @@
1
+ const { getOwnerConfig, setOwnerConfig } = require('../../Database/settingsStore');
2
+ const db = require('../../Database/database');
3
+ const { createFakeContact, getBotName } = require('../../davelib/fakeContact');
4
+
5
+ const DEFAULT_PREFIX = '.';
6
+ const NO_PREFIX = 'none';
7
+
8
+ async function isAuthorized(sock, message) {
9
+ try {
10
+ const senderId = message.key.participant || message.key.remoteJid;
11
+ if (message.key.fromMe) return true;
12
+ return db.isSudo(senderId);
13
+ } catch {
14
+ return message.key.fromMe;
15
+ }
16
+ }
17
+
18
+ function getPrefix() {
19
+ try {
20
+ const prefix = getOwnerConfig('prefix');
21
+ if (prefix === NO_PREFIX || prefix === '') return '';
22
+ return prefix || DEFAULT_PREFIX;
23
+ } catch (error) {
24
+ console.error('Error getting prefix:', error.message, 'Line:', error.stack?.split('\n')[1]);
25
+ return DEFAULT_PREFIX;
26
+ }
27
+ }
28
+
29
+ function getRawPrefix() {
30
+ try {
31
+ return getOwnerConfig('prefix') || DEFAULT_PREFIX;
32
+ } catch (error) {
33
+ console.error('Error getting raw prefix:', error.message, 'Line:', error.stack?.split('\n')[1]);
34
+ return DEFAULT_PREFIX;
35
+ }
36
+ }
37
+
38
+ function setPrefix(newPrefix) {
39
+ try {
40
+ setOwnerConfig('prefix', newPrefix);
41
+ return true;
42
+ } catch (error) {
43
+ console.error('Error setting prefix:', error.message, 'Line:', error.stack?.split('\n')[1]);
44
+ return false;
45
+ }
46
+ }
47
+
48
+ async function handleSetPrefixCommand(sock, chatId, message) {
49
+ try {
50
+ const senderId = message.key.participant || message.key.remoteJid;
51
+ const fake = createFakeContact(senderId);
52
+ const botName = getBotName();
53
+
54
+ if (!await isAuthorized(sock, message)) {
55
+ const authMsgs = [
56
+ `*${botName}*\nOnly the boss can do that!`,
57
+ `*${botName}*\nOwner privileges required.`,
58
+ `*${botName}*\nThis one's for the owner only.`
59
+ ];
60
+ await sock.sendMessage(chatId, {
61
+ text: authMsgs[Math.floor(Math.random() * authMsgs.length)]
62
+ }, { quoted: fake });
63
+ return;
64
+ }
65
+
66
+ const text = message.message?.conversation || message.message?.extendedTextMessage?.text || '';
67
+ const args = text.trim().split(' ');
68
+ const newPrefix = args[1];
69
+
70
+ if (!newPrefix) {
71
+ const currentPrefix = getRawPrefix();
72
+ const displayPrefix = currentPrefix === NO_PREFIX ? 'No prefix' : currentPrefix;
73
+
74
+ await sock.sendMessage(chatId, {
75
+ text: `╭─❖ *PREFIX SETTINGS* ❖─╮\n` +
76
+ `│ Current : ${displayPrefix}\n` +
77
+ `╰───────────────────────╯\n\n` +
78
+ `✦ .setprefix <symbol>\n` +
79
+ `✦ .setprefix none\n` +
80
+ `✦ .setprefix reset`
81
+ }, { quoted: fake });
82
+ return;
83
+ }
84
+
85
+ let responseText = '';
86
+
87
+ if (newPrefix.toLowerCase() === 'none') {
88
+ setPrefix(NO_PREFIX);
89
+ const msgs = [
90
+ `*${botName}*\n✓ Prefix removed. Bot is now prefixless.`,
91
+ `*${botName}*\n✓ No more prefix! Use commands without one.`,
92
+ `*${botName}*\n✓ Prefix disabled.`
93
+ ];
94
+ responseText = msgs[Math.floor(Math.random() * msgs.length)];
95
+ } else if (newPrefix.toLowerCase() === 'reset') {
96
+ setPrefix(DEFAULT_PREFIX);
97
+ const msgs = [
98
+ `*${botName}*\n✓ Reset to default: ${DEFAULT_PREFIX}`,
99
+ `*${botName}*\n✓ Back to ${DEFAULT_PREFIX}`,
100
+ `*${botName}*\n✓ Default restored: ${DEFAULT_PREFIX}`
101
+ ];
102
+ responseText = msgs[Math.floor(Math.random() * msgs.length)];
103
+ } else if (newPrefix.length > 5) {
104
+ const msgs = [
105
+ `*${botName}*\n✗ Max 5 characters!`,
106
+ `*${botName}*\n✗ Too long! Keep it under 5.`,
107
+ `*${botName}*\n✗ Prefix must be 1-5 chars.`
108
+ ];
109
+ responseText = msgs[Math.floor(Math.random() * msgs.length)];
110
+ } else {
111
+ setPrefix(newPrefix);
112
+ const msgs = [
113
+ `*${botName}*\n✓ Prefix is now: ${newPrefix}`,
114
+ `*${botName}*\n✓ Changed to: ${newPrefix}`,
115
+ `*${botName}*\n✓ Using: ${newPrefix}`
116
+ ];
117
+ responseText = msgs[Math.floor(Math.random() * msgs.length)];
118
+ }
119
+
120
+ await sock.sendMessage(chatId, { text: responseText }, { quoted: fake });
121
+ } catch (error) {
122
+ console.error('Error in setprefix command:', error.message, 'Line:', error.stack?.split('\n')[1]);
123
+ }
124
+ }
125
+
126
+ module.exports = {
127
+ getPrefix,
128
+ getRawPrefix,
129
+ setPrefix,
130
+ handleSetPrefixCommand
131
+ };
@@ -0,0 +1,98 @@
1
+ const { getOwnerConfig, getGroupConfig } = require('../../Database/settingsStore');
2
+ const db = require('../../Database/database');
3
+ const { createFakeContact, getBotName } = require('../../davelib/fakeContact');
4
+
5
+ async function isAuthorized(sock, message) {
6
+ try {
7
+ const senderId = message.key.participant || message.key.remoteJid;
8
+ if (message.key.fromMe) return true;
9
+ return db.isSudo(senderId);
10
+ } catch {
11
+ return message.key.fromMe;
12
+ }
13
+ }
14
+
15
+ async function settingsCommand(sock, chatId, message) {
16
+ try {
17
+ const senderId = message.key.participant || message.key.remoteJid;
18
+ const fake = createFakeContact(senderId);
19
+ const botName = getBotName();
20
+
21
+ if (!await isAuthorized(sock, message)) {
22
+ await sock.sendMessage(chatId, { text: `*${botName}*\nOwner only command!` }, { quoted: fake });
23
+ return;
24
+ }
25
+
26
+ const isGroup = chatId.endsWith('@g.us');
27
+
28
+ // Get all configurations
29
+ const autoStatus = getOwnerConfig('autostatus') || { enabled: false };
30
+ const autoread = getOwnerConfig('autoread') || { mode: 'off' };
31
+ const autotyping = getOwnerConfig('autotyping') || { enabled: false };
32
+ const autorecording = getOwnerConfig('autorecording') || { enabled: false };
33
+ const pmblocker = getOwnerConfig('pmblocker') || { enabled: false };
34
+ const anticall = getOwnerConfig('anticall') || { enabled: false };
35
+ const antiedit = getOwnerConfig('antiedit') || { enabled: false };
36
+ const antidelete = getOwnerConfig('antidelete') || { enabled: false };
37
+ const autoReaction = getOwnerConfig('autoReaction') || { enabled: false };
38
+ const prefix = getOwnerConfig('prefix') || '.';
39
+
40
+ // Helper function to format status
41
+ const formatStatus = (enabled, extra = '') => {
42
+ return enabled ? `✓ ON ${extra}` : `✗ OFF`;
43
+ };
44
+
45
+ // Build message
46
+ let messageText = `┌─ ${botName} SETTINGS ─┐\n\n`;
47
+
48
+ messageText += `├─ BASIC ────────────┤\n`;
49
+ messageText += `│ Prefix : ${prefix === 'none' ? 'None' : `"${prefix}"`}\n`;
50
+ messageText += `│ Auto Status : ${formatStatus(autoStatus.enabled)}\n`;
51
+ messageText += `│ Autoread : ${autoread.mode !== 'off' ? autoread.mode.toUpperCase() : 'OFF'}\n`;
52
+ messageText += `│ Autotyping : ${formatStatus(autotyping.enabled)}\n`;
53
+ messageText += `│ Autorecording : ${formatStatus(autorecording.enabled)}\n\n`;
54
+
55
+ messageText += `├─ PRIVACY ───────────┤\n`;
56
+ messageText += `│ PM Blocker : ${formatStatus(pmblocker.enabled)}\n`;
57
+ messageText += `│ Anticall : ${anticall.enabled ? `✓ ON (${anticall.mode || 'block'})` : '✗ OFF'}\n`;
58
+ messageText += `│ Antiedit : ${formatStatus(antiedit.enabled)}\n`;
59
+ messageText += `│ Antidelete : ${antidelete.enabled ? `✓ ON (${antidelete.mode || 'private'})` : '✗ OFF'}\n`;
60
+ messageText += `│ Auto Reaction : ${formatStatus(autoReaction.enabled)}\n`;
61
+
62
+ if (isGroup) {
63
+ messageText += `\n├─ GROUP ────────────┤\n`;
64
+
65
+ const antilink = getGroupConfig(chatId, 'antilink') || { enabled: false };
66
+ const antibadword = getGroupConfig(chatId, 'antibadword') || { enabled: false };
67
+ const welcome = getGroupConfig(chatId, 'welcome') || { enabled: false };
68
+ const goodbye = getGroupConfig(chatId, 'goodbye') || { enabled: false };
69
+ const chatbot = getGroupConfig(chatId, 'chatbot') || false;
70
+ const antitag = getGroupConfig(chatId, 'antitag') || { enabled: false };
71
+ const antimention = getGroupConfig(chatId, 'antimention') || { enabled: false };
72
+ const antichart = getGroupConfig(chatId, 'antichart') || { enabled: false };
73
+ const antikick = getGroupConfig(chatId, 'antikick') || { enabled: false };
74
+ const groupAntiedit = getGroupConfig(chatId, 'antiedit') || { enabled: false };
75
+ const groupAntidelete = getGroupConfig(chatId, 'antidelete') || { enabled: false };
76
+
77
+ messageText += `│ Antilink : ${antilink.enabled ? `✓ ON (${antilink.action || 'delete'})` : '✗ OFF'}\n`;
78
+ messageText += `│ Antibadword : ${antibadword.enabled ? `✓ ON (${antibadword.action || 'delete'})` : '✗ OFF'}\n`;
79
+ messageText += `│ Welcome : ${formatStatus(welcome.enabled)}\n`;
80
+ messageText += `│ Goodbye : ${formatStatus(goodbye.enabled)}\n`;
81
+ messageText += `│ Chatbot : ${chatbot ? '✓ ON' : '✗ OFF'}\n`;
82
+ messageText += `│ Antitag : ${formatStatus(antitag.enabled)}\n`;
83
+ messageText += `│ Antimention : ${formatStatus(antimention.enabled)}\n`;
84
+ messageText += `│ Antichart : ${antichart.enabled ? `✓ ON (${antichart.action || 'delete'})` : '✗ OFF'}\n`;
85
+ messageText += `│ Antikick : ${formatStatus(antikick.enabled)}\n`;
86
+ messageText += `│ Antiedit : ${formatStatus(groupAntiedit.enabled)}\n`;
87
+ messageText += `│ Antidelete : ${formatStatus(groupAntidelete.enabled)}\n`;
88
+ }
89
+
90
+ messageText += `\n└────────────────────┘`;
91
+
92
+ await sock.sendMessage(chatId, { text: messageText }, { quoted: fake });
93
+ } catch (error) {
94
+ console.error('Error in settings command:', error.message, 'Line:', error.stack?.split('\n')[1]);
95
+ }
96
+ }
97
+
98
+ module.exports = settingsCommand;
@@ -0,0 +1,94 @@
1
+ const { getOwnerConfig, setOwnerConfig, parseToggleCommand } = require('../../Database/settingsStore');
2
+ const db = require('../../Database/database');
3
+ const { createFakeContact, getBotName } = require('../../davelib/fakeContact');
4
+
5
+ async function isAuthorized(sock, message) {
6
+ try {
7
+ const senderId = message.key.participant || message.key.remoteJid;
8
+ if (message.key.fromMe) return true;
9
+ return db.isSudo(senderId);
10
+ } catch {
11
+ return message.key.fromMe;
12
+ }
13
+ }
14
+
15
+ function isStartupWelcomeOn() {
16
+ try {
17
+ const config = getOwnerConfig('startupWelcome');
18
+ return config !== false;
19
+ } catch (error) {
20
+ console.error('Error getting startup welcome:', error.message, 'Line:', error.stack?.split('\n')[1]);
21
+ return true;
22
+ }
23
+ }
24
+
25
+ function setStartupWelcome(enabled) {
26
+ try {
27
+ setOwnerConfig('startupWelcome', enabled);
28
+ return true;
29
+ } catch (error) {
30
+ console.error('Error setting startup welcome:', error.message, 'Line:', error.stack?.split('\n')[1]);
31
+ return false;
32
+ }
33
+ }
34
+
35
+ async function startupWelcomeCommand(sock, chatId, message) {
36
+ const senderId = message.key.participant || message.key.remoteJid;
37
+ const fake = createFakeContact(senderId);
38
+ const botName = getBotName();
39
+
40
+ try {
41
+ if (!await isAuthorized(sock, message)) {
42
+ await sock.sendMessage(chatId, {
43
+ text: `*${botName}*\nOwner only command!`
44
+ }, { quoted: fake });
45
+ return;
46
+ }
47
+
48
+ const text = message.message?.conversation || message.message?.extendedTextMessage?.text || '';
49
+ const args = text.trim().split(' ').slice(1);
50
+ const action = args[0]?.toLowerCase();
51
+
52
+ const currentStatus = isStartupWelcomeOn();
53
+
54
+ if (!action) {
55
+ await sock.sendMessage(chatId, {
56
+ text: `*${botName} STARTUP WELCOME*\n\n` +
57
+ `Current Status: ${currentStatus ? 'ON' : 'OFF'}\n\n` +
58
+ `*Commands:*\n` +
59
+ `.startupwelcome on - Enable startup message\n` +
60
+ `.startupwelcome off - Disable startup message`
61
+ }, { quoted: fake });
62
+ return;
63
+ }
64
+
65
+ const toggle = parseToggleCommand(action);
66
+
67
+ if (toggle === 'on') {
68
+ setStartupWelcome(true);
69
+ await sock.sendMessage(chatId, {
70
+ text: `*${botName}*\nStartup welcome message enabled!`
71
+ }, { quoted: fake });
72
+ } else if (toggle === 'off') {
73
+ setStartupWelcome(false);
74
+ await sock.sendMessage(chatId, {
75
+ text: `*${botName}*\nStartup welcome message disabled!`
76
+ }, { quoted: fake });
77
+ } else {
78
+ await sock.sendMessage(chatId, {
79
+ text: `*${botName}*\nInvalid option! Use: on/off`
80
+ }, { quoted: fake });
81
+ }
82
+ } catch (error) {
83
+ console.error('Startup welcome command error:', error.message, 'Line:', error.stack?.split('\n')[1]);
84
+ await sock.sendMessage(chatId, {
85
+ text: `*${botName}*\nCommand failed!`
86
+ }, { quoted: fake });
87
+ }
88
+ }
89
+
90
+ module.exports = {
91
+ startupWelcomeCommand,
92
+ isStartupWelcomeOn,
93
+ setStartupWelcome
94
+ };
@@ -0,0 +1,138 @@
1
+ const settings = require('../../daveset');
2
+ const { isSudo, addSudo, removeSudo, getSudoList } = require('../../davelib/index');
3
+ const { createFakeContact, getBotName } = require('../../davelib/fakeContact');
4
+
5
+ function extractMentionedJid(message) {
6
+ try {
7
+ const mentioned = message.message?.extendedTextMessage?.contextInfo?.mentionedJid || [];
8
+ if (mentioned.length > 0) return mentioned[0];
9
+
10
+ const text = message.message?.conversation || message.message?.extendedTextMessage?.text || '';
11
+ const match = text.match(/\b(\d{7,15})\b/);
12
+ if (match) return `${match[1]}@s.whatsapp.net`;
13
+
14
+ return null;
15
+ } catch (err) {
16
+ console.error('extractMentionedJid error:', err.message, 'Line:', err.stack?.split('\n')[1]);
17
+ return null;
18
+ }
19
+ }
20
+
21
+ async function sudoCommand(sock, chatId, message) {
22
+ const senderId = message.key.participant || message.key.remoteJid;
23
+ const fake = createFakeContact(senderId);
24
+ const botName = getBotName();
25
+
26
+ try {
27
+ const ownerJid = `${settings.ownerNumber}@s.whatsapp.net`;
28
+ const isOwner = message.key.fromMe || senderId === ownerJid;
29
+
30
+ const rawText = message.message?.conversation || message.message?.extendedTextMessage?.text || '';
31
+ const args = rawText.trim().split(/\s+/).slice(1);
32
+ const sub = (args[0] || '').toLowerCase();
33
+
34
+ if (!sub || !['add', 'del', 'remove', 'list'].includes(sub)) {
35
+ const helpText = `┌─ *${botName} SUDO* ─┐\n` +
36
+ `│\n` +
37
+ `│ Usage:\n` +
38
+ `│ • .sudo add @user\n` +
39
+ `│ • .sudo del @user\n` +
40
+ `│ • .sudo list\n` +
41
+ `│\n` +
42
+ `└──────────────────┘`;
43
+ await sock.sendMessage(chatId, { text: helpText }, { quoted: fake });
44
+ return;
45
+ }
46
+
47
+ if (sub === 'list') {
48
+ const list = getSudoList();
49
+ if (!list || list.length === 0) {
50
+ await sock.sendMessage(chatId, {
51
+ text: `┌─ *${botName}* ─┐\n│\n│ No sudo users set.\n│\n└─────────────┘`
52
+ }, { quoted: fake });
53
+ return;
54
+ }
55
+
56
+ const formatted = list.map((jid, i) => `│ ${i + 1}. @${jid.split('@')[0]}`).join('\n');
57
+ const listText = `┌─ *${botName} SUDO LIST* ─┐\n` +
58
+ `│\n` +
59
+ `${formatted}\n` +
60
+ `│\n` +
61
+ `└──────────────────────┘`;
62
+
63
+ await sock.sendMessage(chatId, {
64
+ text: listText,
65
+ mentions: list
66
+ }, { quoted: fake });
67
+ return;
68
+ }
69
+
70
+ if (!isOwner) {
71
+ await sock.sendMessage(chatId, {
72
+ text: `┌─ *${botName}* ─┐\n│\n│ Owner only command!\n│\n└─────────────┘`
73
+ }, { quoted: fake });
74
+ return;
75
+ }
76
+
77
+ const targetJid = extractMentionedJid(message);
78
+ if (!targetJid) {
79
+ await sock.sendMessage(chatId, {
80
+ text: `┌─ *${botName}* ─┐\n│\n│ Mention a user or provide phone number!\n│\n└─────────────┘`
81
+ }, { quoted: fake });
82
+ return;
83
+ }
84
+
85
+ if (sub === 'add') {
86
+ if (isSudo(targetJid)) {
87
+ await sock.sendMessage(chatId, {
88
+ text: `┌─ *${botName}* ─┐\n` +
89
+ `│\n` +
90
+ `│ @${targetJid.split('@')[0]} is already sudo!\n` +
91
+ `│\n` +
92
+ `└─────────────┘`,
93
+ mentions: [targetJid]
94
+ }, { quoted: fake });
95
+ return;
96
+ }
97
+
98
+ addSudo(targetJid);
99
+ await sock.sendMessage(chatId, {
100
+ text: `┌─ *${botName}* ─┐\n` +
101
+ `│\n` +
102
+ `│ ✓ @${targetJid.split('@')[0]} added as sudo!\n` +
103
+ `│\n` +
104
+ `└─────────────┘`,
105
+ mentions: [targetJid]
106
+ }, { quoted: fake });
107
+ } else if (sub === 'del' || sub === 'remove') {
108
+ if (!isSudo(targetJid)) {
109
+ await sock.sendMessage(chatId, {
110
+ text: `┌─ *${botName}* ─┐\n` +
111
+ `│\n` +
112
+ `│ @${targetJid.split('@')[0]} is not sudo!\n` +
113
+ `│\n` +
114
+ `└─────────────┘`,
115
+ mentions: [targetJid]
116
+ }, { quoted: fake });
117
+ return;
118
+ }
119
+
120
+ removeSudo(targetJid);
121
+ await sock.sendMessage(chatId, {
122
+ text: `┌─ *${botName}* ─┐\n` +
123
+ `│\n` +
124
+ `│ ✗ @${targetJid.split('@')[0]} removed from sudo!\n` +
125
+ `│\n` +
126
+ `└─────────────┘`,
127
+ mentions: [targetJid]
128
+ }, { quoted: fake });
129
+ }
130
+ } catch (error) {
131
+ console.error('Sudo command error:', error.message, 'Line:', error.stack?.split('\n')[1]);
132
+ await sock.sendMessage(chatId, {
133
+ text: `┌─ *${botName}* ─┐\n│\n│ Sudo command failed!\n│\n└─────────────┘`
134
+ }, { quoted: fake });
135
+ }
136
+ }
137
+
138
+ module.exports = { sudoCommand };