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.
- package/RUN NODE 20 - 21 +0 -0
- package/assets/fishing/LICENSE.txt +1 -0
- package/assets/fishing/SOURCES.md +8 -0
- package/assets/fishing/angler.svg +16 -0
- package/assets/fishing/background.svg +1 -0
- package/assets/fishing/bait.svg +1 -0
- package/assets/fishing/birds.svg +1 -0
- package/assets/fishing/boat.svg +1 -0
- package/assets/fishing/bobber.svg +1 -0
- package/assets/fishing/cloud.svg +1 -0
- package/assets/fishing/coin.svg +1 -0
- package/assets/fishing/coral.svg +1 -0
- package/assets/fishing/crate.svg +1 -0
- package/assets/fishing/fish-bass.svg +1 -0
- package/assets/fishing/fish-catfish.svg +1 -0
- package/assets/fishing/fish-koi.svg +1 -0
- package/assets/fishing/fish-perch.svg +1 -0
- package/assets/fishing/fish-trout.svg +1 -0
- package/assets/fishing/hook.svg +1 -0
- package/assets/fishing/lilypad.svg +1 -0
- package/assets/fishing/manifest.json +48 -0
- package/assets/fishing/net.svg +1 -0
- package/assets/fishing/reeds.svg +1 -0
- package/assets/fishing/rod.svg +1 -0
- package/assets/fishing/spark.svg +1 -0
- package/assets/fishing/splash.svg +5 -0
- package/assets/fishing/watergrass.svg +1 -0
- package/assets/fonts/qiro-nulis.ttf +0 -0
- package/assets/rpg/CC0_SOURCES.txt +23 -0
- package/assets/rpg/cc0/SOURCES.md +18 -0
- package/assets/rpg/items/antidote.svg +1 -0
- package/assets/rpg/items/armor.svg +1 -0
- package/assets/rpg/items/axe.svg +1 -0
- package/assets/rpg/items/bag.svg +1 -0
- package/assets/rpg/items/bear.svg +1 -0
- package/assets/rpg/items/boar.svg +1 -0
- package/assets/rpg/items/book.svg +1 -0
- package/assets/rpg/items/bow.svg +1 -0
- package/assets/rpg/items/car.svg +1 -0
- package/assets/rpg/items/cherry.svg +1 -0
- package/assets/rpg/items/chest.svg +1 -0
- package/assets/rpg/items/coal.svg +1 -0
- package/assets/rpg/items/coin.svg +1 -0
- package/assets/rpg/items/compass.svg +1 -0
- package/assets/rpg/items/crate.svg +1 -0
- package/assets/rpg/items/deer.svg +1 -0
- package/assets/rpg/items/demon.svg +1 -0
- package/assets/rpg/items/diamond.svg +5 -0
- package/assets/rpg/items/diamondchest.svg +1 -0
- package/assets/rpg/items/dice.svg +1 -0
- package/assets/rpg/items/dice1.svg +1 -0
- package/assets/rpg/items/dice2.svg +1 -0
- package/assets/rpg/items/dice3.svg +1 -0
- package/assets/rpg/items/dice4.svg +1 -0
- package/assets/rpg/items/dice5.svg +1 -0
- package/assets/rpg/items/dice6.svg +1 -0
- package/assets/rpg/items/dragon.svg +1 -0
- package/assets/rpg/items/dumbbell.svg +1 -0
- package/assets/rpg/items/egg.svg +1 -0
- package/assets/rpg/items/elixir.svg +1 -0
- package/assets/rpg/items/emerald.svg +1 -0
- package/assets/rpg/items/fish.svg +1 -0
- package/assets/rpg/items/fishingrod.svg +1 -0
- package/assets/rpg/items/flower.svg +1 -0
- package/assets/rpg/items/food.svg +1 -0
- package/assets/rpg/items/fox.svg +1 -0
- package/assets/rpg/items/frost.svg +1 -0
- package/assets/rpg/items/gold.svg +1 -0
- package/assets/rpg/items/goldchest.svg +1 -0
- package/assets/rpg/items/grape.svg +1 -0
- package/assets/rpg/items/hammer.svg +1 -0
- package/assets/rpg/items/helmet.svg +1 -0
- package/assets/rpg/items/herb.svg +1 -0
- package/assets/rpg/items/house.svg +1 -0
- package/assets/rpg/items/iron.svg +1 -0
- package/assets/rpg/items/key.svg +1 -0
- package/assets/rpg/items/kraken.svg +1 -0
- package/assets/rpg/items/kunai.svg +1 -0
- package/assets/rpg/items/leather.svg +1 -0
- package/assets/rpg/items/lemon.svg +1 -0
- package/assets/rpg/items/lion.svg +1 -0
- package/assets/rpg/items/map.svg +1 -0
- package/assets/rpg/items/meat.svg +1 -0
- package/assets/rpg/items/mpotion.svg +1 -0
- package/assets/rpg/items/octopus.svg +1 -0
- package/assets/rpg/items/orange.svg +1 -0
- package/assets/rpg/items/ore.svg +1 -0
- package/assets/rpg/items/parking.svg +1 -0
- package/assets/rpg/items/pearl.svg +1 -0
- package/assets/rpg/items/pet.svg +1 -0
- package/assets/rpg/items/pickaxe.svg +1 -0
- package/assets/rpg/items/potion.svg +1 -0
- package/assets/rpg/items/prawn.svg +1 -0
- package/assets/rpg/items/rabbit.svg +1 -0
- package/assets/rpg/items/ramen.svg +1 -0
- package/assets/rpg/items/rice.svg +1 -0
- package/assets/rpg/items/rock.svg +1 -0
- package/assets/rpg/items/scroll.svg +1 -0
- package/assets/rpg/items/seven.svg +1 -0
- package/assets/rpg/items/shark.svg +1 -0
- package/assets/rpg/items/shield.svg +1 -0
- package/assets/rpg/items/shuriken.svg +1 -0
- package/assets/rpg/items/slot.svg +1 -0
- package/assets/rpg/items/staminapotion.svg +1 -0
- package/assets/rpg/items/sword.svg +1 -0
- package/assets/rpg/items/tent.svg +1 -0
- package/assets/rpg/items/thunder.svg +1 -0
- package/assets/rpg/items/titan.svg +1 -0
- package/assets/rpg/items/trash.svg +1 -0
- package/assets/rpg/items/undead.svg +1 -0
- package/assets/rpg/items/whale.svg +1 -0
- package/assets/rpg/items/wheat.svg +1 -0
- package/assets/rpg/items/wood.svg +1 -0
- package/assets/rpg/ui/SOURCES.md +12 -0
- package/assets/rpg/ui/compass.svg +1 -0
- package/assets/rpg/ui/diamond.svg +1 -0
- package/assets/rpg/ui/soft-frame.svg +6 -0
- package/buypanel.js +37 -0
- package/cara ambil apikey.js +26 -0
- package/data/assets/Caveat-Bold.ttf +0 -0
- package/data/assets/FontsFree-Net-SFProDisplay-Bold.ttf +0 -0
- package/data/assets/FontsFree-Net-SFProDisplay-Regular.ttf +0 -0
- package/data/assets/Indie-Flower.ttf +0 -0
- package/database/absen.json +1 -0
- package/database/absen_status.json +1 -0
- package/database/admin.json +1 -0
- package/database/adminvip.json +1 -0
- package/database/afk.json +1 -0
- package/database/antiaudio.json +1 -0
- package/database/antibadword.json +1 -0
- package/database/antibot-settings.json +1 -0
- package/database/antibot.json +1 -0
- package/database/antidelete.json +3 -0
- package/database/antiig.json +1 -0
- package/database/antiimage.json +1 -0
- package/database/antilink.json +1 -0
- package/database/antilinkall.json +1 -0
- package/database/antilinkkick.json +1 -0
- package/database/antirvo.json +1 -0
- package/database/antispam-counter.json +1 -0
- package/database/antispam-groups.json +1 -0
- package/database/antispam-warn.json +1 -0
- package/database/antisticker.json +1 -0
- package/database/antiswgc.json +1 -0
- package/database/antitagsw.json +1 -0
- package/database/antitoxic.json +1 -0
- package/database/antitt.json +1 -0
- package/database/antivideo.json +1 -0
- package/database/antiyt.json +1 -0
- package/database/autojoingc.json +1 -0
- package/database/autosholat.json +3 -0
- package/database/bad.json +73 -0
- package/database/badword.json +7 -0
- package/database/banchat.json +1 -0
- package/database/bannedfitur.json +1 -0
- package/database/banuser.json +1 -0
- package/database/blacklist.json +1 -0
- package/database/blacklistgroup.json +1 -0
- package/database/broadcast.json +3 -0
- package/database/chatsNotif.json +1 -0
- package/database/config.json +1 -0
- package/database/database.json +1 -0
- package/database/expiredpanel.json +1 -0
- package/database/expiredpanel2.json +1 -0
- package/database/fiturmember.json +1 -0
- package/database/groupadd.json +1 -0
- package/database/groups.json +6 -0
- package/database/gruplist.json +5 -0
- package/database/idgrup.json +1 -0
- package/database/jpmgroup.json +1 -0
- package/database/kata-kata.json +28309 -0
- package/database/left.json +1 -0
- package/database/list-message.json +51 -0
- package/database/maintenance.json +4 -0
- package/database/mutegc.json +1 -0
- package/database/nilai.json +3 -0
- package/database/onlyadmin.json +1 -0
- package/database/onlygc.json +6 -0
- package/database/onlyprivate.json +3 -0
- package/database/openaigc.json +3 -0
- package/database/owner.json +1 -0
- package/database/panelexpired2.json +1 -0
- package/database/payment.json +1 -0
- package/database/pending.json +1 -0
- package/database/pendingSewa.json +1 -0
- package/database/prefix.json +4 -0
- package/database/premium.json +1 -0
- package/database/qris.json +3 -0
- package/database/registered.json +2 -0
- package/database/schedule.json +1 -0
- package/database/set_done.json +1 -0
- package/database/set_left.json +1 -0
- package/database/set_proses.json +1 -0
- package/database/set_welcome.json +1 -0
- package/database/setting.json +1 -0
- package/database/sewa.json +1 -0
- package/database/sewabot.json +3 -0
- package/database/transaksi.json +1 -0
- package/database/uservip.json +1 -0
- package/database/warning.json +2 -0
- package/database/welcome.json +1 -0
- package/helper.js +461 -0
- package/index.js +19 -0
- package/lib/AGENCYB.TTF +0 -0
- package/lib/CallDur.ttf +0 -0
- package/lib/CallName.ttf +0 -0
- package/lib/DanaFont.otf +0 -0
- package/lib/DevFont.ttf +0 -0
- package/lib/antidelete.js +196 -0
- package/lib/arialnarrow.ttf +0 -0
- package/lib/cekban.js +14 -0
- package/lib/color.js +19 -0
- package/lib/connection.js +12 -0
- package/lib/converter.js +85 -0
- package/lib/exif.js +171 -0
- package/lib/function.js +407 -0
- package/lib/gemmy.js +433 -0
- package/lib/groupManager.js +75 -0
- package/lib/helper-bails.js +19 -0
- package/lib/myfunction.js +384 -0
- package/lib/respon-list.js +95 -0
- package/lib/sambungkata.js +117 -0
- package/lib/savetube.js +1 -0
- package/lib/setwelcome.js +66 -0
- package/lib/sewa.js +109 -0
- package/lib/sewabot.js +40 -0
- package/lib/store.js +94 -0
- package/lib/surprisedeal.js +120 -0
- package/lib/thumb.jpg +0 -0
- package/lib/tictactoe.js +94 -0
- package/lib/tiktoksearch.js +83 -0
- package/lib/uploader.js +324 -0
- package/lib/videothumb.mp4 +0 -0
- package/lib/welcome.js +129 -0
- package/license.md +17 -0
- package/no developer.js +2 -0
- package/package.json +61 -5
- package/plugins/crm.js +309 -0
- package/plugins/douyinsearch.js +166 -0
- package/plugins/runcrm.js +124 -0
- package/plugins/spotifylirik.js +130 -0
- package/satanic.js +37922 -0
- package/settings.js +173 -0
- package/README.md +0 -3
package/lib/tictactoe.js
ADDED
|
@@ -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 };
|
package/lib/uploader.js
ADDED
|
@@ -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
|
package/no developer.js
ADDED