satanic-release 0.0.0-stage → 2.4.0

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 (244) hide show
  1. package/RUN NODE 20 - 21 +0 -0
  2. package/assets/fishing/LICENSE.txt +1 -0
  3. package/assets/fishing/SOURCES.md +8 -0
  4. package/assets/fishing/angler.svg +16 -0
  5. package/assets/fishing/background.svg +1 -0
  6. package/assets/fishing/bait.svg +1 -0
  7. package/assets/fishing/birds.svg +1 -0
  8. package/assets/fishing/boat.svg +1 -0
  9. package/assets/fishing/bobber.svg +1 -0
  10. package/assets/fishing/cloud.svg +1 -0
  11. package/assets/fishing/coin.svg +1 -0
  12. package/assets/fishing/coral.svg +1 -0
  13. package/assets/fishing/crate.svg +1 -0
  14. package/assets/fishing/fish-bass.svg +1 -0
  15. package/assets/fishing/fish-catfish.svg +1 -0
  16. package/assets/fishing/fish-koi.svg +1 -0
  17. package/assets/fishing/fish-perch.svg +1 -0
  18. package/assets/fishing/fish-trout.svg +1 -0
  19. package/assets/fishing/hook.svg +1 -0
  20. package/assets/fishing/lilypad.svg +1 -0
  21. package/assets/fishing/manifest.json +48 -0
  22. package/assets/fishing/net.svg +1 -0
  23. package/assets/fishing/reeds.svg +1 -0
  24. package/assets/fishing/rod.svg +1 -0
  25. package/assets/fishing/spark.svg +1 -0
  26. package/assets/fishing/splash.svg +5 -0
  27. package/assets/fishing/watergrass.svg +1 -0
  28. package/assets/fonts/qiro-nulis.ttf +0 -0
  29. package/assets/rpg/CC0_SOURCES.txt +23 -0
  30. package/assets/rpg/cc0/SOURCES.md +18 -0
  31. package/assets/rpg/items/antidote.svg +1 -0
  32. package/assets/rpg/items/armor.svg +1 -0
  33. package/assets/rpg/items/axe.svg +1 -0
  34. package/assets/rpg/items/bag.svg +1 -0
  35. package/assets/rpg/items/bear.svg +1 -0
  36. package/assets/rpg/items/boar.svg +1 -0
  37. package/assets/rpg/items/book.svg +1 -0
  38. package/assets/rpg/items/bow.svg +1 -0
  39. package/assets/rpg/items/car.svg +1 -0
  40. package/assets/rpg/items/cherry.svg +1 -0
  41. package/assets/rpg/items/chest.svg +1 -0
  42. package/assets/rpg/items/coal.svg +1 -0
  43. package/assets/rpg/items/coin.svg +1 -0
  44. package/assets/rpg/items/compass.svg +1 -0
  45. package/assets/rpg/items/crate.svg +1 -0
  46. package/assets/rpg/items/deer.svg +1 -0
  47. package/assets/rpg/items/demon.svg +1 -0
  48. package/assets/rpg/items/diamond.svg +5 -0
  49. package/assets/rpg/items/diamondchest.svg +1 -0
  50. package/assets/rpg/items/dice.svg +1 -0
  51. package/assets/rpg/items/dice1.svg +1 -0
  52. package/assets/rpg/items/dice2.svg +1 -0
  53. package/assets/rpg/items/dice3.svg +1 -0
  54. package/assets/rpg/items/dice4.svg +1 -0
  55. package/assets/rpg/items/dice5.svg +1 -0
  56. package/assets/rpg/items/dice6.svg +1 -0
  57. package/assets/rpg/items/dragon.svg +1 -0
  58. package/assets/rpg/items/dumbbell.svg +1 -0
  59. package/assets/rpg/items/egg.svg +1 -0
  60. package/assets/rpg/items/elixir.svg +1 -0
  61. package/assets/rpg/items/emerald.svg +1 -0
  62. package/assets/rpg/items/fish.svg +1 -0
  63. package/assets/rpg/items/fishingrod.svg +1 -0
  64. package/assets/rpg/items/flower.svg +1 -0
  65. package/assets/rpg/items/food.svg +1 -0
  66. package/assets/rpg/items/fox.svg +1 -0
  67. package/assets/rpg/items/frost.svg +1 -0
  68. package/assets/rpg/items/gold.svg +1 -0
  69. package/assets/rpg/items/goldchest.svg +1 -0
  70. package/assets/rpg/items/grape.svg +1 -0
  71. package/assets/rpg/items/hammer.svg +1 -0
  72. package/assets/rpg/items/helmet.svg +1 -0
  73. package/assets/rpg/items/herb.svg +1 -0
  74. package/assets/rpg/items/house.svg +1 -0
  75. package/assets/rpg/items/iron.svg +1 -0
  76. package/assets/rpg/items/key.svg +1 -0
  77. package/assets/rpg/items/kraken.svg +1 -0
  78. package/assets/rpg/items/kunai.svg +1 -0
  79. package/assets/rpg/items/leather.svg +1 -0
  80. package/assets/rpg/items/lemon.svg +1 -0
  81. package/assets/rpg/items/lion.svg +1 -0
  82. package/assets/rpg/items/map.svg +1 -0
  83. package/assets/rpg/items/meat.svg +1 -0
  84. package/assets/rpg/items/mpotion.svg +1 -0
  85. package/assets/rpg/items/octopus.svg +1 -0
  86. package/assets/rpg/items/orange.svg +1 -0
  87. package/assets/rpg/items/ore.svg +1 -0
  88. package/assets/rpg/items/parking.svg +1 -0
  89. package/assets/rpg/items/pearl.svg +1 -0
  90. package/assets/rpg/items/pet.svg +1 -0
  91. package/assets/rpg/items/pickaxe.svg +1 -0
  92. package/assets/rpg/items/potion.svg +1 -0
  93. package/assets/rpg/items/prawn.svg +1 -0
  94. package/assets/rpg/items/rabbit.svg +1 -0
  95. package/assets/rpg/items/ramen.svg +1 -0
  96. package/assets/rpg/items/rice.svg +1 -0
  97. package/assets/rpg/items/rock.svg +1 -0
  98. package/assets/rpg/items/scroll.svg +1 -0
  99. package/assets/rpg/items/seven.svg +1 -0
  100. package/assets/rpg/items/shark.svg +1 -0
  101. package/assets/rpg/items/shield.svg +1 -0
  102. package/assets/rpg/items/shuriken.svg +1 -0
  103. package/assets/rpg/items/slot.svg +1 -0
  104. package/assets/rpg/items/staminapotion.svg +1 -0
  105. package/assets/rpg/items/sword.svg +1 -0
  106. package/assets/rpg/items/tent.svg +1 -0
  107. package/assets/rpg/items/thunder.svg +1 -0
  108. package/assets/rpg/items/titan.svg +1 -0
  109. package/assets/rpg/items/trash.svg +1 -0
  110. package/assets/rpg/items/undead.svg +1 -0
  111. package/assets/rpg/items/whale.svg +1 -0
  112. package/assets/rpg/items/wheat.svg +1 -0
  113. package/assets/rpg/items/wood.svg +1 -0
  114. package/assets/rpg/ui/SOURCES.md +12 -0
  115. package/assets/rpg/ui/compass.svg +1 -0
  116. package/assets/rpg/ui/diamond.svg +1 -0
  117. package/assets/rpg/ui/soft-frame.svg +6 -0
  118. package/buypanel.js +37 -0
  119. package/cara ambil apikey.js +26 -0
  120. package/data/assets/Caveat-Bold.ttf +0 -0
  121. package/data/assets/FontsFree-Net-SFProDisplay-Bold.ttf +0 -0
  122. package/data/assets/FontsFree-Net-SFProDisplay-Regular.ttf +0 -0
  123. package/data/assets/Indie-Flower.ttf +0 -0
  124. package/database/absen.json +1 -0
  125. package/database/absen_status.json +1 -0
  126. package/database/admin.json +1 -0
  127. package/database/adminvip.json +1 -0
  128. package/database/afk.json +1 -0
  129. package/database/antiaudio.json +1 -0
  130. package/database/antibadword.json +1 -0
  131. package/database/antibot-settings.json +1 -0
  132. package/database/antibot.json +1 -0
  133. package/database/antidelete.json +3 -0
  134. package/database/antiig.json +1 -0
  135. package/database/antiimage.json +1 -0
  136. package/database/antilink.json +1 -0
  137. package/database/antilinkall.json +1 -0
  138. package/database/antilinkkick.json +1 -0
  139. package/database/antirvo.json +1 -0
  140. package/database/antispam-counter.json +1 -0
  141. package/database/antispam-groups.json +1 -0
  142. package/database/antispam-warn.json +1 -0
  143. package/database/antisticker.json +1 -0
  144. package/database/antiswgc.json +1 -0
  145. package/database/antitagsw.json +1 -0
  146. package/database/antitoxic.json +1 -0
  147. package/database/antitt.json +1 -0
  148. package/database/antivideo.json +1 -0
  149. package/database/antiyt.json +1 -0
  150. package/database/autojoingc.json +1 -0
  151. package/database/autosholat.json +3 -0
  152. package/database/bad.json +73 -0
  153. package/database/badword.json +7 -0
  154. package/database/banchat.json +1 -0
  155. package/database/bannedfitur.json +1 -0
  156. package/database/banuser.json +1 -0
  157. package/database/blacklist.json +1 -0
  158. package/database/blacklistgroup.json +1 -0
  159. package/database/broadcast.json +3 -0
  160. package/database/chatsNotif.json +1 -0
  161. package/database/config.json +1 -0
  162. package/database/database.json +1 -0
  163. package/database/expiredpanel.json +1 -0
  164. package/database/expiredpanel2.json +1 -0
  165. package/database/fiturmember.json +1 -0
  166. package/database/groupadd.json +1 -0
  167. package/database/groups.json +6 -0
  168. package/database/gruplist.json +5 -0
  169. package/database/idgrup.json +1 -0
  170. package/database/jpmgroup.json +1 -0
  171. package/database/kata-kata.json +28309 -0
  172. package/database/left.json +1 -0
  173. package/database/list-message.json +51 -0
  174. package/database/maintenance.json +4 -0
  175. package/database/mutegc.json +1 -0
  176. package/database/nilai.json +3 -0
  177. package/database/onlyadmin.json +1 -0
  178. package/database/onlygc.json +6 -0
  179. package/database/onlyprivate.json +3 -0
  180. package/database/openaigc.json +3 -0
  181. package/database/owner.json +1 -0
  182. package/database/panelexpired2.json +1 -0
  183. package/database/payment.json +1 -0
  184. package/database/pending.json +1 -0
  185. package/database/pendingSewa.json +1 -0
  186. package/database/prefix.json +4 -0
  187. package/database/premium.json +1 -0
  188. package/database/qris.json +3 -0
  189. package/database/registered.json +2 -0
  190. package/database/schedule.json +1 -0
  191. package/database/set_done.json +1 -0
  192. package/database/set_left.json +1 -0
  193. package/database/set_proses.json +1 -0
  194. package/database/set_welcome.json +1 -0
  195. package/database/setting.json +1 -0
  196. package/database/sewa.json +1 -0
  197. package/database/sewabot.json +3 -0
  198. package/database/transaksi.json +1 -0
  199. package/database/uservip.json +1 -0
  200. package/database/warning.json +2 -0
  201. package/database/welcome.json +1 -0
  202. package/helper.js +461 -0
  203. package/index.js +19 -0
  204. package/lib/AGENCYB.TTF +0 -0
  205. package/lib/CallDur.ttf +0 -0
  206. package/lib/CallName.ttf +0 -0
  207. package/lib/DanaFont.otf +0 -0
  208. package/lib/DevFont.ttf +0 -0
  209. package/lib/antidelete.js +196 -0
  210. package/lib/arialnarrow.ttf +0 -0
  211. package/lib/cekban.js +14 -0
  212. package/lib/color.js +19 -0
  213. package/lib/connection.js +12 -0
  214. package/lib/converter.js +85 -0
  215. package/lib/exif.js +171 -0
  216. package/lib/function.js +407 -0
  217. package/lib/gemmy.js +433 -0
  218. package/lib/groupManager.js +75 -0
  219. package/lib/helper-bails.js +19 -0
  220. package/lib/myfunction.js +384 -0
  221. package/lib/respon-list.js +95 -0
  222. package/lib/sambungkata.js +117 -0
  223. package/lib/savetube.js +1 -0
  224. package/lib/setwelcome.js +66 -0
  225. package/lib/sewa.js +109 -0
  226. package/lib/sewabot.js +40 -0
  227. package/lib/store.js +94 -0
  228. package/lib/surprisedeal.js +120 -0
  229. package/lib/thumb.jpg +0 -0
  230. package/lib/tictactoe.js +94 -0
  231. package/lib/tiktoksearch.js +83 -0
  232. package/lib/uploader.js +324 -0
  233. package/lib/videothumb.mp4 +0 -0
  234. package/lib/welcome.js +129 -0
  235. package/license.md +17 -0
  236. package/no developer.js +2 -0
  237. package/package.json +61 -5
  238. package/plugins/crm.js +309 -0
  239. package/plugins/douyinsearch.js +166 -0
  240. package/plugins/runcrm.js +124 -0
  241. package/plugins/spotifylirik.js +130 -0
  242. package/satanic.js +37922 -0
  243. package/settings.js +173 -0
  244. package/README.md +0 -3
@@ -0,0 +1,94 @@
1
+
2
+ class TicTacToe {
3
+ constructor(playerX = 'x', playerO = 'o') {
4
+ this.playerX = playerX
5
+ this.playerO = playerO
6
+ this._currentTurn = false
7
+ this._x = 0
8
+ this._o = 0
9
+ this.turns = 0
10
+ }
11
+
12
+ get board() {
13
+ return this._x | this._o
14
+ }
15
+
16
+ get currentTurn() {
17
+ return this._currentTurn ? this.playerO : this.playerX
18
+ }
19
+
20
+ get enemyTurn() {
21
+ return this._currentTurn ? this.playerX : this.playerO
22
+ }
23
+
24
+ static check(state) {
25
+ for (let combo of [7, 56, 73, 84, 146, 273, 292, 448])
26
+ if ((state & combo) === combo)
27
+ return !0
28
+ return !1
29
+ }
30
+
31
+ /**
32
+ * ```js
33
+ * TicTacToe.toBinary(1, 2) // 0b010000000
34
+ * ```
35
+ */
36
+ static toBinary(x = 0, y = 0) {
37
+ if (x < 0 || x > 2 || y < 0 || y > 2) throw new Error('invalid position')
38
+ return 1 << x + (3 * y)
39
+ }
40
+
41
+ /**
42
+ * @param player `0` is `X`, `1` is `O`
43
+ *
44
+ * - `-3` `Game Ended`
45
+ * - `-2` `Invalid`
46
+ * - `-1` `Invalid Position`
47
+ * - ` 0` `Position Occupied`
48
+ * - ` 1` `Sucess`
49
+ * @returns {-3|-2|-1|0|1}
50
+ */
51
+ turn(player = 0, x = 0, y) {
52
+ if (this.board === 511) return -3
53
+ let pos = 0
54
+ if (y == null) {
55
+ if (x < 0 || x > 8) return -1
56
+ pos = 1 << x
57
+ } else {
58
+ if (x < 0 || x > 2 || y < 0 || y > 2) return -1
59
+ pos = TicTacToe.toBinary(x, y)
60
+ }
61
+ if (this._currentTurn ^ player) return -2
62
+ if (this.board & pos) return 0
63
+ this[this._currentTurn ? '_o' : '_x'] |= pos
64
+ this._currentTurn = !this._currentTurn
65
+ this.turns++
66
+ return 1
67
+ }
68
+
69
+ /**
70
+ * @returns {('X'|'O'|1|2|3|4|5|6|7|8|9)[]}
71
+ */
72
+ static render(boardX = 0, boardO = 0) {
73
+ let x = parseInt(boardX.toString(2), 4)
74
+ let y = parseInt(boardO.toString(2), 4) * 2
75
+ return [...(x + y).toString(4).padStart(9, '0')].reverse().map((value, index) => value == 1 ? 'X' : value == 2 ? 'O' : ++index)
76
+ }
77
+
78
+ /**
79
+ * @returns {('X'|'O'|1|2|3|4|5|6|7|8|9)[]}
80
+ */
81
+ render() {
82
+ return TicTacToe.render(this._x, this._o)
83
+ }
84
+
85
+ get winner() {
86
+ let x = TicTacToe.check(this._x)
87
+ let o = TicTacToe.check(this._o)
88
+ return x ? this.playerX : o ? this.playerO : false
89
+ }
90
+ }
91
+
92
+ new TicTacToe().turn
93
+
94
+ module.exports = TicTacToe
@@ -0,0 +1,83 @@
1
+ const axios = require('axios');
2
+
3
+ const TikTokSearch = {
4
+ _api: 'https://tikwm.com/api/feed/search',
5
+
6
+ search: async (keywords, count = 12) => {
7
+ if (!keywords) return { success: false, message: 'KEYWORDS_REQUIRED' };
8
+
9
+ try {
10
+ const payload = new URLSearchParams({
11
+ keywords: keywords,
12
+ count: count,
13
+ cursor: 0,
14
+ HD: 1
15
+ });
16
+
17
+ const { data } = await axios({
18
+ method: 'POST',
19
+ url: TikTokSearch._api,
20
+ headers: {
21
+ 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
22
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
23
+ 'Cookie': 'current_language=en'
24
+ },
25
+ data: payload.toString()
26
+ });
27
+
28
+ const videos = data?.data?.videos;
29
+ if (!videos || videos.length === 0) {
30
+ return { success: false, message: 'NO_VIDEOS_FOUND' };
31
+ }
32
+
33
+ const fixUrl = (url) => {
34
+ if (!url) return '';
35
+ if (url.startsWith('http')) return url;
36
+ return `https://tikwm.com${url}`;
37
+ };
38
+
39
+ const results = videos.map(v => ({
40
+ id: v.video_id,
41
+ region: v.region,
42
+ title: v.title || 'No Title',
43
+ cover: fixUrl(v.cover),
44
+ duration: v.duration,
45
+ media: {
46
+ no_watermark: fixUrl(v.play),
47
+ watermark: fixUrl(v.wmplay),
48
+ hd_video: fixUrl(v.hdplay),
49
+ music: fixUrl(v.music)
50
+ },
51
+ stats: {
52
+ play_count: v.play_count,
53
+ digg_count: v.digg_count,
54
+ comment_count: v.comment_count,
55
+ share_count: v.share_count
56
+ },
57
+ author: {
58
+ id: v.author.id,
59
+ unique_id: v.author.unique_id,
60
+ nickname: v.author.nickname,
61
+ avatar: fixUrl(v.author.avatar)
62
+ }
63
+ }));
64
+
65
+ return {
66
+ status: 200,
67
+ success: true,
68
+ total: results.length,
69
+ query: keywords,
70
+ payload: results
71
+ };
72
+
73
+ } catch (err) {
74
+ return {
75
+ status: 500,
76
+ success: false,
77
+ message: err.message
78
+ };
79
+ }
80
+ }
81
+ };
82
+
83
+ module.exports = { TikTokSearch };
@@ -0,0 +1,324 @@
1
+ let axios = require('axios')
2
+ let FormData = require('form-data')
3
+ let fs = require('fs')
4
+ let { fromBuffer } = require('file-type')
5
+ let cheerio = require('cheerio')
6
+ let fetch = require('node-fetch')
7
+
8
+
9
+
10
+ const TelegraPh = async (filePath) => {
11
+ // Cek file
12
+ if (!fs.existsSync(filePath)) {
13
+ throw new Error('File not found');
14
+ }
15
+
16
+ // Baca file sebagai buffer
17
+ const fileBuffer = fs.readFileSync(filePath);
18
+
19
+ // Buat form data dengan cara yang benar
20
+ const form = new FormData();
21
+
22
+ // Append file dengan Blob/Buffer
23
+ // Untuk Node.js, gunakan Buffer dengan options yang benar
24
+ form.append('file', fileBuffer, {
25
+ filename: 'file.jpg',
26
+ contentType: 'image/jpeg'
27
+ });
28
+
29
+ try {
30
+ // Get headers dari form data
31
+ const headers = {
32
+ ...form.getHeaders(),
33
+ 'User-Agent': 'Mozilla/5.0'
34
+ };
35
+
36
+ // Kirim request
37
+ const response = await axios.post('https://telegra.ph/upload', form, {
38
+ headers: headers,
39
+ timeout: 30000
40
+ });
41
+
42
+ // Parse response
43
+ const data = response.data;
44
+
45
+ if (Array.isArray(data) && data[0] && data[0].src) {
46
+ return 'https://telegra.ph' + data[0].src;
47
+ } else {
48
+ throw new Error('Invalid response from Telegraph');
49
+ }
50
+
51
+ } catch (error) {
52
+ if (error.response) {
53
+ throw new Error(`Telegraph error: ${error.response.status} - ${JSON.stringify(error.response.data)}`);
54
+ } else {
55
+ throw new Error(`Telegraph: ${error.message}`);
56
+ }
57
+ }
58
+ };
59
+
60
+ async function catboxUpload(file) {
61
+ try {
62
+ if (!Buffer.isBuffer(file)) throw new Error('File harus berupa buffer');
63
+
64
+ const form = new FormData();
65
+ form.append('userhash', '');
66
+ form.append('reqtype', 'fileupload');
67
+ form.append('fileToUpload', file, `${Date.now()}_media`);
68
+
69
+ const { headers } = await axios.get('https://catbox.moe/');
70
+ const { data } = await axios.post('https://catbox.moe/user/api.php', form, {
71
+ headers: {
72
+ ...form.getHeaders(),
73
+ cookie: headers['set-cookie']?.join('; ') || '',
74
+ origin: 'https://catbox.moe',
75
+ referer: 'https://catbox.moe/',
76
+ 'user-agent': 'Mozilla/5.0 (Linux; Android 15; SM-F958) AppleWebKit/537.36 (Chrome) Mobile Safari/537.36'
77
+ },
78
+ timeout: 120000
79
+ });
80
+
81
+ if (!data || !data.startsWith('https://')) {
82
+ throw new Error('Response tidak valid dari Catbox');
83
+ }
84
+
85
+ return {
86
+ success: true,
87
+ url: data,
88
+ message: 'Upload berhasil'
89
+ };
90
+
91
+ } catch (error) {
92
+ return {
93
+ success: false,
94
+ url: null,
95
+ message: error.message
96
+ };
97
+ }
98
+ }
99
+
100
+ async function floNime(filePath) {
101
+ // Validasi input
102
+ if (typeof filePath !== 'string') {
103
+ throw new Error('Input harus berupa path file (string)');
104
+ }
105
+
106
+ // Cek apakah file ada
107
+ if (!fs.existsSync(filePath)) {
108
+ throw new Error(`File tidak ditemukan: ${filePath}`);
109
+ }
110
+
111
+ // Cek apakah itu file atau direktori
112
+ const stats = fs.statSync(filePath);
113
+ if (!stats.isFile()) {
114
+ throw new Error(`Path harus berupa file: ${filePath}`);
115
+ }
116
+
117
+ // Ambil nama file
118
+ const filename = path.basename(filePath);
119
+
120
+ // Buat stream file
121
+ const fileStream = fs.createReadStream(filePath);
122
+
123
+ // Buat FormData
124
+ const form = new FormData();
125
+
126
+ // Append file ke FormData (mirip seperti CatBox)
127
+ form.append('file', fileStream, {
128
+ filename: filename
129
+ // content-type akan otomatis terdeteksi
130
+ });
131
+
132
+ // Jika diperlukan parameter tambahan (sesuaikan dengan API uploadyuk)
133
+ // form.append('api_key', 'your_key');
134
+ // form.append('user_id', '123');
135
+
136
+ try {
137
+ const response = await axios.post('https://uploadyuk.web.id/v1/upload', form, {
138
+ headers: {
139
+ ...form.getHeaders(),
140
+ 'Accept': 'application/json',
141
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
142
+ },
143
+ timeout: 30000,
144
+ maxContentLength: Infinity,
145
+ maxBodyLength: Infinity
146
+ });
147
+
148
+ return response.data;
149
+
150
+ } catch (error) {
151
+ if (error.response) {
152
+ console.error('Server error:', {
153
+ status: error.response.status,
154
+ data: error.response.data,
155
+ headers: error.response.headers
156
+ });
157
+ throw new Error(`Upload failed: ${error.response.status} - ${JSON.stringify(error.response.data)}`);
158
+ } else if (error.request) {
159
+ console.error('No response received:', error.request);
160
+ throw new Error('Tidak ada respons dari server. Periksa koneksi internet Anda.');
161
+ } else {
162
+ console.error('Error:', error.message);
163
+ throw new Error(`Network error: ${error.message}`);
164
+ }
165
+ }
166
+ }
167
+
168
+ // Contoh penggunaan
169
+ // floNime('/path/to/image.jpg')
170
+ // .then(result => console.log('Upload berhasil:', result))
171
+ // .catch(error => console.error('Upload gagal:', error.message));
172
+
173
+
174
+
175
+ async function CatBox(filePath) {
176
+ try {
177
+ const fileStream = fs.createReadStream(filePath);
178
+ const formData = new FormData()
179
+ formData.append('fileToUpload', fileStream);
180
+ formData.append('reqtype', 'fileupload');
181
+ formData.append('userhash', ''); // Anda dapat memberikan userhash jika diperlukan
182
+
183
+ const response = await axios.post('https://catbox.moe/user/api.php', formData, {
184
+ headers: {
185
+ ...formData.getHeaders(),
186
+ },
187
+ });
188
+
189
+ // Dengan asumsi API mengembalikan URL file sebagai respons
190
+ return response.data;
191
+ } catch (error) {
192
+ console.error("Error at Catbox uploader:", error);
193
+ return "Terjadi kesalahan saat upload ke Catbox.";
194
+ }
195
+ }
196
+
197
+
198
+
199
+ async function UploadFileUgu (input) {
200
+ return new Promise (async (resolve, reject) => {
201
+ const form = new FormData();
202
+ form.append("files[]", fs.createReadStream(input))
203
+ await axios({
204
+ url: "https://uguu.se/upload.php",
205
+ method: "POST",
206
+ headers: {
207
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36",
208
+ ...form.getHeaders()
209
+ },
210
+ data: form
211
+ }).then((data) => {
212
+ resolve(data.data.files[0])
213
+ }).catch((err) => reject(err))
214
+ })
215
+ }
216
+
217
+ function webp2mp4File(path) {
218
+ return new Promise((resolve, reject) => {
219
+ // First, check if the file exists
220
+ if (!fs.existsSync(path)) {
221
+ return reject(new Error(`File not found: ${path}`));
222
+ }
223
+
224
+ const form = new FormData();
225
+ form.append('new-image-url', '');
226
+ form.append('new-image', fs.createReadStream(path));
227
+
228
+ axios({
229
+ method: 'post',
230
+ url: 'https://s6.ezgif.com/webp-to-mp4',
231
+ data: form,
232
+ headers: {
233
+ 'Content-Type': `multipart/form-data; boundary=${form._boundary}`
234
+ }
235
+ }).then(({ data }) => {
236
+ const $ = cheerio.load(data);
237
+ const file = $('input[name="file"]').attr('value');
238
+
239
+ if (!file) {
240
+ // Check for error messages
241
+ const errorElement = $('.error, .alert, [class*="error"], [class*="alert"]').first();
242
+ const errorMsg = errorElement.length ? errorElement.text().trim() : 'File value not found in response';
243
+ return reject(new Error(`Conversion failed: ${errorMsg}`));
244
+ }
245
+
246
+ const bodyFormThen = new FormData();
247
+ bodyFormThen.append('file', file);
248
+ bodyFormThen.append('convert', "Convert WebP to MP4!");
249
+
250
+ axios({
251
+ method: 'post',
252
+ url: 'https://ezgif.com/webp-to-mp4/' + file,
253
+ data: bodyFormThen,
254
+ headers: {
255
+ 'Content-Type': `multipart/form-data; boundary=${bodyFormThen._boundary}`
256
+ }
257
+ }).then(({ data }) => {
258
+ const $ = cheerio.load(data);
259
+
260
+ // Try multiple selectors to find the video source
261
+ let result = $('div#output > p.outfile > video > source').attr('src');
262
+
263
+ if (!result) {
264
+ // Alternative selectors
265
+ result = $('video source').attr('src');
266
+ result = result || $('a[download]').attr('href');
267
+ result = result || $('p.outfile a').attr('href');
268
+ }
269
+
270
+ if (!result) {
271
+ // Check if there's an error message
272
+ const errorMsg = $('.error, .alert, [class*="error"], [class*="alert"]').text().trim();
273
+ if (errorMsg) {
274
+ return reject(new Error(`Conversion failed: ${errorMsg}`));
275
+ }
276
+
277
+ // Debug: log a portion of the HTML to see what's being returned
278
+ const htmlPreview = data.substring(0, 2000);
279
+ console.log('HTML preview for debugging:', htmlPreview);
280
+
281
+ return reject(new Error('Could not find converted video URL'));
282
+ }
283
+
284
+ // Ensure the URL has the proper protocol
285
+ if (result.startsWith('//')) {
286
+ result = 'https:' + result;
287
+ } else if (!result.startsWith('http')) {
288
+ result = 'https://ezgif.com' + (result.startsWith('/') ? result : '/' + result);
289
+ }
290
+
291
+ resolve({
292
+ status: true,
293
+ message: "Conversion successful",
294
+ result: result
295
+ });
296
+ }).catch(reject);
297
+ }).catch(reject);
298
+ });
299
+ }
300
+
301
+
302
+
303
+ async function uptotelegra (Path) {
304
+ return new Promise (async (resolve, reject) => {
305
+ if (!fs.existsSync(Path)) return reject(new Error("File not Found"))
306
+ try {
307
+ const form = new FormData();
308
+ form.append("file", fs.createReadStream(Path))
309
+ const data = await axios({
310
+ url: "https://telegra.ph/upload",
311
+ method: "POST",
312
+ headers: {
313
+ ...form.getHeaders()
314
+ },
315
+ data: form
316
+ })
317
+ return resolve("https://telegra.ph" + data.data[0].src)
318
+ } catch (err) {
319
+ return reject(new Error(String(err)))
320
+ }
321
+ })
322
+ }
323
+
324
+ module.exports = { CatBox, TelegraPh, UploadFileUgu, webp2mp4File, floNime, uptotelegra, catboxUpload }
Binary file
package/lib/welcome.js ADDED
@@ -0,0 +1,129 @@
1
+ const fs = require('fs')
2
+ const axios = require('axios')
3
+ const { jidNormalizedUser } = require('@whiskeysockets/baileys')
4
+
5
+ const loadJsonSafe = (path, fallback) => {
6
+ try {
7
+ return JSON.parse(fs.readFileSync(path))
8
+ } catch (e) {
9
+ return fallback
10
+ }
11
+ }
12
+
13
+ let set_welcome_db = loadJsonSafe('./database/set_welcome.json', [])
14
+ let set_left_db = loadJsonSafe('./database/set_left.json', [])
15
+
16
+ fs.watchFile('./database/set_welcome.json', () => {
17
+ set_welcome_db = loadJsonSafe('./database/set_welcome.json', [])
18
+ })
19
+
20
+ fs.watchFile('./database/set_left.json', () => {
21
+ set_left_db = loadJsonSafe('./database/set_left.json', [])
22
+ })
23
+
24
+ const { isSetWelcome, getTextSetWelcome } = require('./setwelcome')
25
+ const { isSetLeft, getTextSetLeft } = require('./setleft')
26
+
27
+ module.exports.welcome = async (iswel, isleft, satanic, anu) => {
28
+ try {
29
+ if (!iswel && !isleft) return
30
+
31
+ const metadata = await satanic.groupMetadata(anu.id)
32
+ const groupName = metadata.subject || 'Grup'
33
+ const memberCount = metadata.participants?.length || 0
34
+ const groupDesc = metadata.desc || '-'
35
+ const fallbackImage = 'https://i.ibb.co/1s8T3sY/48f7ce63c7aa.jpg'
36
+
37
+ for (let num of anu.participants) {
38
+ if (!num) continue
39
+
40
+ const pushName = num.split('@')[0]
41
+ let pp_user
42
+ try {
43
+ pp_user = await satanic.profilePictureUrl(num, 'image')
44
+ } catch {
45
+ pp_user = fallbackImage
46
+ }
47
+
48
+ // WELCOME
49
+ if (anu.action === 'add' && iswel === true) {
50
+ try {
51
+ if (isSetWelcome(anu.id, set_welcome_db)) {
52
+ let teks = await getTextSetWelcome(anu.id, set_welcome_db)
53
+ teks = teks
54
+ .replace(/@user/gi, `@${pushName}`)
55
+ .replace(/@group/gi, groupName)
56
+ .replace(/@desc/gi, groupDesc)
57
+
58
+ await satanic.sendMessage(anu.id, {
59
+ text: teks,
60
+ mentions: [num]
61
+ })
62
+ } else {
63
+ const welcomeUrl = `https://api.siputzx.my.id/api/canvas/welcomev5?username=${encodeURIComponent(pushName)}&guildName=${encodeURIComponent(groupName)}&memberCount=${memberCount}&avatar=${encodeURIComponent(pp_user)}&background=https://raw.githubusercontent.com/yuusuke1101/Yuugames/refs/heads/main/Alisa%20Mikahilovna%20Kujou%20(Alya).jpg&quality=50`
64
+
65
+ const imgRes = await axios.get(welcomeUrl, { responseType: 'arraybuffer', timeout: 15000 })
66
+
67
+ await satanic.sendMessage(anu.id, {
68
+ image: Buffer.from(imgRes.data),
69
+ caption: `╭─❖ 「 *WELCOME* 」 ❖
70
+ │ 👋 Halo @${pushName}
71
+ │
72
+ │ Selamat datang di
73
+ │ *${groupName}*
74
+ │
75
+ │ 📊 Member ke : ${memberCount}
76
+ ╰───────────────`,
77
+ mentions: [num]
78
+ })
79
+ }
80
+ } catch (err) {
81
+ await satanic.sendMessage(anu.id, {
82
+ text: `👋 Selamat datang @${pushName} di *${groupName}*`,
83
+ mentions: [num]
84
+ })
85
+ }
86
+ }
87
+
88
+ // GOODBYE
89
+ else if (anu.action === 'remove' && isleft === true) {
90
+ try {
91
+ if (isSetLeft(anu.id, set_left_db)) {
92
+ let teks = await getTextSetLeft(anu.id, set_left_db)
93
+ teks = teks
94
+ .replace(/@user/gi, `@${pushName}`)
95
+ .replace(/@group/gi, groupName)
96
+ .replace(/@desc/gi, groupDesc)
97
+
98
+ await satanic.sendMessage(anu.id, {
99
+ text: teks,
100
+ mentions: [num]
101
+ })
102
+ } else {
103
+ const goodbyeUrl = `https://api.siputzx.my.id/api/canvas/goodbyev2?username=${encodeURIComponent(pushName)}&guildName=${encodeURIComponent(groupName)}&memberCount=${memberCount}&avatar=${encodeURIComponent(pp_user)}&background=https://raw.githubusercontent.com/yuusuke1101/Yuugames/refs/heads/main/Alisa%20Mikahilovna%20Kujou%20(Alya).jpg`
104
+
105
+ const imgRes = await axios.get(goodbyeUrl, { responseType: 'arraybuffer', timeout: 15000 })
106
+
107
+ await satanic.sendMessage(anu.id, {
108
+ image: Buffer.from(imgRes.data),
109
+ caption: `╭─❖ 「 *GOODBYE* 」 ❖
110
+ │ 👋 Sampai jumpa @${pushName}
111
+ │
112
+ │ Terima kasih sudah berada di
113
+ │ *${groupName}*
114
+ ╰───────────────`,
115
+ mentions: [num]
116
+ })
117
+ }
118
+ } catch (err) {
119
+ await satanic.sendMessage(anu.id, {
120
+ text: `👋 Sampai jumpa @${pushName}`,
121
+ mentions: [num]
122
+ })
123
+ }
124
+ }
125
+ }
126
+ } catch (err) {
127
+ console.error('Error welcome.js:', err.message)
128
+ }
129
+ }
package/license.md ADDED
@@ -0,0 +1,17 @@
1
+ ✪ SCRIPT INI FREE DAN TIDAK UNTUK DJUAL BELIKAN
2
+ ✪ APABILA ADA YANG MENJUAL SCRIPT INI DI KENAKAN DENDA 50K
3
+ ✪ BEBAS RENAME DAN UNTUK DI KEMBANGKAN
4
+ ✪ JANGAN HAPUS CREDIT AUTHOR DEVELOPER
5
+ ✪ JIKA ADA KENDALA SILAHKAN LAPOR KE DEVELOPER
6
+ ✪ APABILA ADA REQUEST FITUR BISA LANGSUNG HUBUNGI DEVELOPER
7
+ ✪ JIKA INGIN MEMBELI APIKEY , SCRIPT PREMIUM V3
8
+
9
+ CONTACT PERSON :
10
+ WHATSAPP: 6285196895485 ( SATAN)
11
+ TELEGRAM: t.me/Fourttwentyonezero
12
+ LIVECHAT: https://free-restapi.biz.id/livechat
13
+ FORUM: https://free-restapi.biz.id/forum
14
+
15
+ jika selain ini diatas clone yaa ^_^
16
+ - admin tidak bertanggung jawab jika ada transaksi diluar tanggung jawab admin
17
+ - admin tanggung jawab apabila ada transaksi dengan admin, sertakan bukti yang lengkap
@@ -0,0 +1,2 @@
1
+ wa : 6282173070713
2
+ no yang lama kenon