gj-boomlings-api 1.3.5 → 1.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/.nvmrc +0 -0
- package/README.md +1 -1
- package/functions/blockUser.js +7 -11
- package/functions/deleteAccountPost.js +3 -9
- package/functions/deleteComment.js +3 -9
- package/functions/dlLevel.js +5 -40
- package/functions/dlMessage.js +4 -9
- package/functions/getAccountPosts.js +4 -9
- package/functions/getBlockedList.js +56 -0
- package/functions/getCommentHistory.js +8 -11
- package/functions/getComments.js +6 -10
- package/functions/getCreatorScores.js +3 -5
- package/functions/getFriendsList.js +52 -0
- package/functions/getGauntlets.js +2 -7
- package/functions/getLevelByID.js +3 -8
- package/functions/getMapPacks.js +2 -8
- package/functions/getMessages.js +5 -10
- package/functions/getProfile.js +6 -15
- package/functions/getSongInfo.js +2 -6
- package/functions/getTop100.js +3 -5
- package/functions/getUserLevels.js +53 -11
- package/functions/reportLevel.js +3 -7
- package/functions/searchLevels.js +53 -11
- package/functions/searchUsers.js +3 -8
- package/functions/unblockUser.js +6 -11
- package/functions/updateLevelDesc.js +6 -10
- package/functions/uploadAccountPost.js +3 -8
- package/functions/uploadComment.js +4 -11
- package/functions/uploadMessage.js +4 -9
- package/index.js +6 -2
- package/misc/decodeLevel.js +29 -62
- package/misc/decodeLevelRes.js +135 -0
- package/misc/demonlist.js +6 -6
- package/misc/gjReq.js +25 -0
- package/package.json +1 -4
|
@@ -3,9 +3,9 @@ module.exports = {
|
|
|
3
3
|
async function(str, page = 1) {
|
|
4
4
|
if(!str || str == "") throw new Error("Please provide a username or player ID!");
|
|
5
5
|
|
|
6
|
-
const
|
|
7
|
-
const {
|
|
8
|
-
const {
|
|
6
|
+
const {gjReq} = require("../misc/gjReq.js");
|
|
7
|
+
const { secret } = require("../config.json");
|
|
8
|
+
const { decodeLevelRes } = require("../misc/decodeLevelRes.js");
|
|
9
9
|
const { searchUsers } = require("./searchUsers.js");
|
|
10
10
|
|
|
11
11
|
let user = await searchUsers(str);
|
|
@@ -17,17 +17,59 @@ module.exports = {
|
|
|
17
17
|
page: Number(page) - 1
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
let res = await
|
|
21
|
-
headers: headers
|
|
22
|
-
}).catch(e => {
|
|
23
|
-
throw new Error(e.response.data);
|
|
24
|
-
})
|
|
20
|
+
let res = await gjReq("getGJLevels21", data)
|
|
25
21
|
|
|
26
22
|
let levels = res.data.split("#")[0].split("|");
|
|
23
|
+
let creators = res.data.split("#")[1].split("|");
|
|
24
|
+
let songs = res.data.split("#")[2].split(":");
|
|
25
|
+
|
|
27
26
|
let result = [];
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
|
|
28
|
+
let encCreators = {};
|
|
29
|
+
let encSongs = {};
|
|
30
|
+
|
|
31
|
+
creators.forEach(c => {
|
|
32
|
+
let playerID = c.split(":")[0];
|
|
33
|
+
let username = c.split(":")[1];
|
|
34
|
+
encCreators[playerID] = username;
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
songs.forEach(s => {
|
|
38
|
+
let songId = s.split("~|~")[1];
|
|
39
|
+
let songName = s.split("~|~")[3];
|
|
40
|
+
let songArtistID = s.split("~|~")[5];
|
|
41
|
+
let songArtist = s.split("~|~")[7];
|
|
42
|
+
let size = s.split("~|~")[9];
|
|
43
|
+
let link = s.split("~|~")[13];
|
|
44
|
+
|
|
45
|
+
encSongs[songId] = {
|
|
46
|
+
"name": songName,
|
|
47
|
+
"id": Number(songId),
|
|
48
|
+
"artist": songArtist,
|
|
49
|
+
"artistId": Number(songArtistID),
|
|
50
|
+
"fileSize": `${size} MB`,
|
|
51
|
+
"link": decodeURIComponent(link)
|
|
52
|
+
};
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
for(const l of levels) {
|
|
56
|
+
let decLvl = decodeLevelRes(l);
|
|
57
|
+
const { getOfficialSongInfo } = require("./getOfficialSongInfo.js");
|
|
58
|
+
|
|
59
|
+
let lvl = decLvl.res;
|
|
60
|
+
let officialSongID = Number(decLvl.officialSong);
|
|
61
|
+
let songID = Number(decLvl.customSong);
|
|
62
|
+
let playerId = decLvl.playerID;
|
|
63
|
+
let song;
|
|
64
|
+
|
|
65
|
+
if(officialSongID == 0 && songID != 0 || officialSongID != 0 && songID != 0) song = encSongs[songID.toString()];
|
|
66
|
+
if(officialSongID != 0 && songID == 0) song = getOfficialSongInfo(officialSongID + 1);
|
|
67
|
+
if(officialSongID == 0 && songID == 0) song = getOfficialSongInfo(1);
|
|
68
|
+
|
|
69
|
+
lvl['creator'] = encCreators[playerId] != undefined ? encCreators[playerId] : "-";
|
|
70
|
+
lvl['song'] = song;
|
|
71
|
+
|
|
72
|
+
result.push(lvl);
|
|
31
73
|
}
|
|
32
74
|
|
|
33
75
|
return result;
|
package/functions/reportLevel.js
CHANGED
|
@@ -4,19 +4,15 @@ module.exports = {
|
|
|
4
4
|
if(!level || level == "") throw new Error("Please provide a level ID.");
|
|
5
5
|
if(isNaN(Number(level))) throw new Error("The level ID should be a number.");
|
|
6
6
|
|
|
7
|
-
const
|
|
8
|
-
const {headers, server} = require("../config.json");
|
|
7
|
+
const {gjReq} = require("../misc/gjReq.js");
|
|
9
8
|
|
|
10
9
|
const data = {
|
|
11
10
|
levelID: level.toString().trim(),
|
|
12
11
|
secret: "Wmfd2893gb7"
|
|
13
12
|
}
|
|
14
13
|
|
|
15
|
-
let res = await
|
|
16
|
-
|
|
17
|
-
}).catch(e => {
|
|
18
|
-
throw new Error(e.response.data)
|
|
19
|
-
})
|
|
14
|
+
let res = await gjReq("reportGJLevel", data);
|
|
15
|
+
|
|
20
16
|
return res.data;
|
|
21
17
|
}
|
|
22
18
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
module.exports = {
|
|
2
2
|
searchLevels:
|
|
3
3
|
async function(query, page = 1) {
|
|
4
|
-
const
|
|
5
|
-
const {
|
|
4
|
+
const {gjReq} = require("../misc/gjReq.js");
|
|
5
|
+
const { secret } = require("../config.json");
|
|
6
6
|
|
|
7
|
-
const {
|
|
7
|
+
const { decodeLevelRes } = require("../misc/decodeLevelRes.js");
|
|
8
8
|
|
|
9
9
|
const data = {
|
|
10
10
|
type: 0,
|
|
@@ -13,17 +13,59 @@ module.exports = {
|
|
|
13
13
|
secret: secret
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
let res = await
|
|
17
|
-
headers: headers
|
|
18
|
-
}).catch(e => {
|
|
19
|
-
throw new Error(e.response.data);
|
|
20
|
-
})
|
|
16
|
+
let res = await gjReq("getGJLevels21", data)
|
|
21
17
|
|
|
22
18
|
let levels = res.data.split("#")[0].split("|");
|
|
19
|
+
let creators = res.data.split("#")[1].split("|");
|
|
20
|
+
let songs = res.data.split("#")[2].split(":");
|
|
21
|
+
|
|
23
22
|
let result = [];
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
|
|
24
|
+
let encCreators = {};
|
|
25
|
+
let encSongs = {};
|
|
26
|
+
|
|
27
|
+
creators.forEach(c => {
|
|
28
|
+
let playerID = c.split(":")[0];
|
|
29
|
+
let username = c.split(":")[1];
|
|
30
|
+
encCreators[playerID] = username;
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
songs.forEach(s => {
|
|
34
|
+
let songId = s.split("~|~")[1];
|
|
35
|
+
let songName = s.split("~|~")[3];
|
|
36
|
+
let songArtistID = s.split("~|~")[5];
|
|
37
|
+
let songArtist = s.split("~|~")[7];
|
|
38
|
+
let size = s.split("~|~")[9];
|
|
39
|
+
let link = s.split("~|~")[13];
|
|
40
|
+
|
|
41
|
+
encSongs[songId] = {
|
|
42
|
+
"name": songName,
|
|
43
|
+
"id": Number(songId),
|
|
44
|
+
"artist": songArtist,
|
|
45
|
+
"artistId": Number(songArtistID),
|
|
46
|
+
"fileSize": `${size} MB`,
|
|
47
|
+
"link": decodeURIComponent(link)
|
|
48
|
+
};
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
for(const l of levels) {
|
|
52
|
+
let decLvl = decodeLevelRes(l);
|
|
53
|
+
const { getOfficialSongInfo } = require("./getOfficialSongInfo.js");
|
|
54
|
+
|
|
55
|
+
let lvl = decLvl.res;
|
|
56
|
+
let officialSongID = Number(decLvl.officialSong);
|
|
57
|
+
let songID = Number(decLvl.customSong);
|
|
58
|
+
let playerId = decLvl.playerID;
|
|
59
|
+
let song;
|
|
60
|
+
|
|
61
|
+
if(officialSongID == 0 && songID != 0 || officialSongID != 0 && songID != 0) song = encSongs[songID.toString()];
|
|
62
|
+
if(officialSongID != 0 && songID == 0) song = getOfficialSongInfo(officialSongID + 1);
|
|
63
|
+
if(officialSongID == 0 && songID == 0) song = getOfficialSongInfo(1);
|
|
64
|
+
|
|
65
|
+
lvl['creator'] = encCreators[playerId] != undefined ? encCreators[playerId] : "-";
|
|
66
|
+
lvl['song'] = song;
|
|
67
|
+
|
|
68
|
+
result.push(lvl);
|
|
27
69
|
}
|
|
28
70
|
|
|
29
71
|
return result;
|
package/functions/searchUsers.js
CHANGED
|
@@ -3,18 +3,13 @@ module.exports = {
|
|
|
3
3
|
async function(str) {
|
|
4
4
|
if(!str || str == '') throw new Error("Please provide a query!");
|
|
5
5
|
|
|
6
|
-
const
|
|
7
|
-
const { headers, server, secret } = require("../config.json");
|
|
6
|
+
const {gjReq} = require("../misc/gjReq.js");
|
|
8
7
|
const { decodeUserResult } = require("../misc/decodeUserResult.js");
|
|
9
8
|
|
|
10
|
-
let res = await
|
|
9
|
+
let res = await gjReq("getGJUsers20", {
|
|
11
10
|
str: str,
|
|
12
11
|
secret: "Wmfd2893gb7"
|
|
13
|
-
}
|
|
14
|
-
headers: headers
|
|
15
|
-
}).catch(e => {
|
|
16
|
-
throw new Error(e.response.data)
|
|
17
|
-
});
|
|
12
|
+
})
|
|
18
13
|
|
|
19
14
|
if(res.data == -1) throw new Error(`Couldn't find a "${str}" user.`)
|
|
20
15
|
|
package/functions/unblockUser.js
CHANGED
|
@@ -4,16 +4,16 @@ module.exports = {
|
|
|
4
4
|
if(!target || target == "") throw new Error("Please provide a target's player ID or username!");
|
|
5
5
|
if(!username || username == "") throw new Error("Please provide your player ID or username!");
|
|
6
6
|
if(!password || password == "") throw new Error("Please provide your password!");
|
|
7
|
-
|
|
8
|
-
const {
|
|
7
|
+
|
|
8
|
+
const {gjReq} = require("../misc/gjReq.js");
|
|
9
9
|
const { searchUsers } = require("./searchUsers.js");
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
let user = await searchUsers(username);
|
|
12
12
|
let targetObj = await searchUsers(target);
|
|
13
13
|
|
|
14
14
|
const {gjp} = require("../misc/gjp.js");
|
|
15
|
-
|
|
16
|
-
const
|
|
15
|
+
|
|
16
|
+
const data = {
|
|
17
17
|
gameVersion: 21,
|
|
18
18
|
binaryVersion: 35,
|
|
19
19
|
gdw: 0,
|
|
@@ -23,12 +23,7 @@ module.exports = {
|
|
|
23
23
|
gjp: gjp(password)
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
let res = await
|
|
27
|
-
headers: headers
|
|
28
|
-
}).catch(e => {
|
|
29
|
-
if(res.data.toString().toLowerCase() == "error code: 1020") throw new Error("1020 error: Request denied.");
|
|
30
|
-
throw new Error(e)
|
|
31
|
-
})
|
|
26
|
+
let res = await gjReq("unblockGJUser20", data)
|
|
32
27
|
|
|
33
28
|
return 1;
|
|
34
29
|
}
|
|
@@ -8,9 +8,9 @@ module.exports = {
|
|
|
8
8
|
if(!desc) desc = "(No description provided)";
|
|
9
9
|
if(!user || user == "") throw new Error("Please provide a user ID or name!");
|
|
10
10
|
if(!password || password == "") throw new Error("Please provide a password!");
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
const {
|
|
11
|
+
|
|
12
|
+
const {gjReq} = require("../misc/gjReq.js");
|
|
13
|
+
const { secret } = require("../config.json");
|
|
14
14
|
const { searchUsers } = require("./searchUsers.js");
|
|
15
15
|
|
|
16
16
|
let userObj = await searchUsers(user);
|
|
@@ -26,13 +26,9 @@ module.exports = {
|
|
|
26
26
|
secret: secret
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
let res = await
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if(e.response.data == -1) throw new Error("-1 Failed to update the description.")
|
|
33
|
-
throw new Error(e.response.data);
|
|
34
|
-
})
|
|
35
|
-
|
|
29
|
+
let res = await gjReq("updateGJDesc20", uLDdata);
|
|
30
|
+
if(res.data == -1) throw new Error("-1 Failed to update the description.");
|
|
31
|
+
|
|
36
32
|
return 1;
|
|
37
33
|
}
|
|
38
34
|
}
|
|
@@ -6,8 +6,7 @@ module.exports = {
|
|
|
6
6
|
if(!str || str == "") throw new Error("Please provide a user ID or name!");
|
|
7
7
|
if(!password || password == "") throw new Error("Please provide a password!");
|
|
8
8
|
|
|
9
|
-
const
|
|
10
|
-
const { headers, server } = require("../config.json");
|
|
9
|
+
const {gjReq} = require("../misc/gjReq.js");
|
|
11
10
|
const { searchUsers } = require("./searchUsers.js");
|
|
12
11
|
|
|
13
12
|
let user = await searchUsers(str);
|
|
@@ -28,12 +27,8 @@ module.exports = {
|
|
|
28
27
|
cType: 1
|
|
29
28
|
};
|
|
30
29
|
|
|
31
|
-
let res = await
|
|
32
|
-
|
|
33
|
-
}).catch(e => {
|
|
34
|
-
if(e.response.status == 500) throw new Error("500 Error: couldn't post!");
|
|
35
|
-
throw new Error(e.response.data);
|
|
36
|
-
})
|
|
30
|
+
let res = await gjReq("uploadGJAccComment20", uACdata);
|
|
31
|
+
if(res.status == 500) throw new Error("500 Error: couldn't post!");
|
|
37
32
|
|
|
38
33
|
return res.data;
|
|
39
34
|
}
|
|
@@ -9,8 +9,7 @@ module.exports = {
|
|
|
9
9
|
|
|
10
10
|
const { gjp } = require("../misc/gjp.js");
|
|
11
11
|
const { encB64 } = require("../misc/encB64.js");
|
|
12
|
-
const
|
|
13
|
-
const { headers, server } = require("../config.json");
|
|
12
|
+
const {gjReq} = require("../misc/gjReq.js");
|
|
14
13
|
const crypto = require('crypto')
|
|
15
14
|
const { searchUsers } = require("./searchUsers.js");
|
|
16
15
|
|
|
@@ -37,17 +36,11 @@ module.exports = {
|
|
|
37
36
|
secret: "Wmfd2893gb7"
|
|
38
37
|
}
|
|
39
38
|
|
|
40
|
-
let res = await
|
|
41
|
-
headers: headers
|
|
42
|
-
}).catch(e => {
|
|
43
|
-
let edata = e.response.data;
|
|
44
|
-
if(edata == -10) edata = "You're permanently banned from commenting by RobTop!";
|
|
45
|
-
if(edata.startsWith("temp_")) edata = `You're temporarily banned from commenting by RobTop or Elder Moderators!\nRemaining duration: ${edata.split("_")[1].split("_")[0]}\nReason: ${edata.split("_")[2]}`;
|
|
46
|
-
if(edata == '') edata = "Whoops, the servers have rejected your request!";
|
|
47
|
-
throw new Error(edata)
|
|
48
|
-
})
|
|
39
|
+
let res = await gjReq("uploadGJComment21", uCdata);
|
|
49
40
|
|
|
50
41
|
if(res.data == -1) throw new Error("Whoops, the servers have rejected your request!");
|
|
42
|
+
if(res.data == -10) throw new Error("You're permanently banned from commenting!");
|
|
43
|
+
if(res.data.startsWith("temp_")) throw new Error(`You're temporarily banned from commenting!\nRemaining duration: ${edata.split("_")[1]}\nReason: ${edata.split("_")[2]}`);
|
|
51
44
|
|
|
52
45
|
return res.data;
|
|
53
46
|
}
|
|
@@ -9,8 +9,8 @@ module.exports = {
|
|
|
9
9
|
|
|
10
10
|
const { gjp } = require("../misc/gjp.js");
|
|
11
11
|
const { encB64 } = require("../misc/encB64.js");
|
|
12
|
-
const
|
|
13
|
-
const {
|
|
12
|
+
const {gjReq} = require("../misc/gjReq.js");
|
|
13
|
+
const { secret } = require("../config.json");
|
|
14
14
|
const { searchUsers } = require("./searchUsers.js");
|
|
15
15
|
|
|
16
16
|
let receiverObj = await searchUsers(receiver);
|
|
@@ -19,7 +19,7 @@ module.exports = {
|
|
|
19
19
|
const XOR = require("../misc/xor.js");
|
|
20
20
|
const xor = new XOR();
|
|
21
21
|
|
|
22
|
-
const
|
|
22
|
+
const data = {
|
|
23
23
|
accountID: userObj.accountID,
|
|
24
24
|
toAccountID: receiverObj.accountID,
|
|
25
25
|
gjp: gjp(pass),
|
|
@@ -28,12 +28,7 @@ module.exports = {
|
|
|
28
28
|
secret: secret
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
let res = await
|
|
32
|
-
headers: headers
|
|
33
|
-
}).catch(e => {
|
|
34
|
-
throw new Error(e.response.data)
|
|
35
|
-
});
|
|
36
|
-
|
|
31
|
+
let res = await gjReq("uploadGJMessage20", data);
|
|
37
32
|
if(res.data == -1) throw new Error(-1);
|
|
38
33
|
|
|
39
34
|
return 1;
|
package/index.js
CHANGED
|
@@ -29,8 +29,10 @@ const { getMessages } = require("./functions/getMessages.js");
|
|
|
29
29
|
const { dlMessage } = require("./functions/dlMessage.js");
|
|
30
30
|
const { uploadMessage } = require("./functions/uploadMessage.js");
|
|
31
31
|
const { searchUsers } = require("./functions/searchUsers.js");
|
|
32
|
+
const { getFriendsList } = require("./functions/getFriendsList.js");
|
|
33
|
+
const { getBlockedList } = require("./functions/getBlockedList.js");
|
|
32
34
|
|
|
33
|
-
module.exports.dlLevel = dlLevel
|
|
35
|
+
module.exports.dlLevel = dlLevel;
|
|
34
36
|
module.exports.getSongInfo = getSongInfo;
|
|
35
37
|
module.exports.getOfficialSongInfo = getOfficialSongInfo;
|
|
36
38
|
module.exports.getDailyLevel = getDailyLevel;
|
|
@@ -57,4 +59,6 @@ module.exports.unblockUser = unblockUser;
|
|
|
57
59
|
module.exports.getMessages = getMessages;
|
|
58
60
|
module.exports.dlMessage = dlMessage;
|
|
59
61
|
module.exports.uploadMessage = uploadMessage;
|
|
60
|
-
module.exports.searchUsers = searchUsers;
|
|
62
|
+
module.exports.searchUsers = searchUsers;
|
|
63
|
+
module.exports.getFriendsList = getFriendsList;
|
|
64
|
+
module.exports.getBlockedList = getBlockedList;
|
package/misc/decodeLevel.js
CHANGED
|
@@ -108,15 +108,8 @@ module.exports = {
|
|
|
108
108
|
const { getOfficialSongInfo } = require("../functions/getOfficialSongInfo.js");
|
|
109
109
|
|
|
110
110
|
let song;
|
|
111
|
-
|
|
112
|
-
if(Number(officialSong)
|
|
113
|
-
song = getOfficialSongInfo(Number(officialSong) + 1);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
if(Number(officialSong) == 0 && Number(customSong) == 0) {
|
|
117
|
-
song = getOfficialSongInfo(1);
|
|
118
|
-
}
|
|
119
|
-
|
|
111
|
+
if(Number(officialSong) > 0) song = getOfficialSongInfo(Number(officialSong) + 1);
|
|
112
|
+
if(Number(officialSong) == 0 && Number(customSong) == 0) song = getOfficialSongInfo(1);
|
|
120
113
|
if(Number(customSong) > 0) {
|
|
121
114
|
let songName = level.split("~|~2~|~")[1].split("~|~3~|~")[0]
|
|
122
115
|
let songId = Number(level.split("#1~|~")[1].split("~|~2~|~")[0])
|
|
@@ -137,64 +130,38 @@ module.exports = {
|
|
|
137
130
|
song = songinfo;
|
|
138
131
|
}
|
|
139
132
|
|
|
140
|
-
let result;
|
|
141
133
|
const { demonlist } = require("./demonlist.js");
|
|
142
134
|
let dlist = await demonlist(name);
|
|
143
135
|
|
|
136
|
+
let result = {
|
|
137
|
+
id: Number(id),
|
|
138
|
+
name: name,
|
|
139
|
+
description: decB64(desc),
|
|
140
|
+
creator: author,
|
|
141
|
+
level_version: Number(version),
|
|
142
|
+
difficulty: difficultyDecoding[difficulty],
|
|
143
|
+
stars: Number(stars),
|
|
144
|
+
downloads: Number(downloads),
|
|
145
|
+
likes: Number(likes),
|
|
146
|
+
disliked: disliked,
|
|
147
|
+
length: lengthDecoding[length],
|
|
148
|
+
demon: demonBoolDecoding[demonBool],
|
|
149
|
+
featured: featured,
|
|
150
|
+
epic: demonBoolDecoding[epic],
|
|
151
|
+
objects: Number(objs),
|
|
152
|
+
stars_requested: Number(starsRequested),
|
|
153
|
+
game_version: decodeGameVersion[gameVersion],
|
|
154
|
+
copied: Number(copiedID),
|
|
155
|
+
large: Number(objs) > 40000 ? true : false,
|
|
156
|
+
two_p: demonBoolDecoding[twoPlayer],
|
|
157
|
+
coins: Number(coins),
|
|
158
|
+
verified_coins: verifiedCoins,
|
|
159
|
+
song: song
|
|
160
|
+
}
|
|
161
|
+
|
|
144
162
|
if(dlist != null) {
|
|
145
|
-
result =
|
|
146
|
-
id: Number(id),
|
|
147
|
-
name: name,
|
|
148
|
-
description: decB64(desc),
|
|
149
|
-
creator: author,
|
|
150
|
-
level_version: Number(version),
|
|
151
|
-
difficulty: difficultyDecoding[difficulty],
|
|
152
|
-
stars: Number(stars),
|
|
153
|
-
downloads: Number(downloads),
|
|
154
|
-
likes: Number(likes),
|
|
155
|
-
disliked: disliked,
|
|
156
|
-
length: lengthDecoding[length],
|
|
157
|
-
demon: demonBoolDecoding[demonBool],
|
|
158
|
-
featured: featured,
|
|
159
|
-
epic: demonBoolDecoding[epic],
|
|
160
|
-
objects: Number(objs),
|
|
161
|
-
stars_requested: Number(starsRequested),
|
|
162
|
-
game_version: decodeGameVersion[gameVersion],
|
|
163
|
-
copied: Number(copiedID),
|
|
164
|
-
large: Number(objs) > 40000 ? true : false,
|
|
165
|
-
two_p: demonBoolDecoding[twoPlayer],
|
|
166
|
-
coins: Number(coins),
|
|
167
|
-
verified_coins: verifiedCoins,
|
|
168
|
-
song: song,
|
|
169
|
-
pointercrate: dlist
|
|
170
|
-
}
|
|
171
|
-
} else {
|
|
172
|
-
result = {
|
|
173
|
-
id: Number(id),
|
|
174
|
-
name: name,
|
|
175
|
-
description: decB64(desc),
|
|
176
|
-
creator: author,
|
|
177
|
-
level_version: Number(version),
|
|
178
|
-
difficulty: difficultyDecoding[difficulty],
|
|
179
|
-
stars: Number(stars),
|
|
180
|
-
downloads: Number(downloads),
|
|
181
|
-
likes: Number(likes),
|
|
182
|
-
disliked: disliked,
|
|
183
|
-
length: lengthDecoding[length],
|
|
184
|
-
demon: demonBoolDecoding[demonBool],
|
|
185
|
-
featured: featured,
|
|
186
|
-
epic: demonBoolDecoding[epic],
|
|
187
|
-
objects: Number(objs),
|
|
188
|
-
stars_requested: Number(starsRequested),
|
|
189
|
-
game_version: decodeGameVersion[gameVersion],
|
|
190
|
-
copied: Number(copiedID),
|
|
191
|
-
large: Number(objs) > 40000 ? true : false,
|
|
192
|
-
two_p: demonBoolDecoding[twoPlayer],
|
|
193
|
-
coins: Number(coins),
|
|
194
|
-
verified_coins: verifiedCoins,
|
|
195
|
-
song: song
|
|
163
|
+
result['pointercrate'] = dlist;
|
|
196
164
|
}
|
|
197
|
-
}
|
|
198
165
|
|
|
199
166
|
return result;
|
|
200
167
|
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
decodeLevelRes:
|
|
3
|
+
function(level){
|
|
4
|
+
const {decB64} = require("./decB64.js");
|
|
5
|
+
|
|
6
|
+
let spl = level.split(':');
|
|
7
|
+
let levelInfo = [];
|
|
8
|
+
for(let i =0;i<spl.length;i++) {
|
|
9
|
+
if(i%2!=0) {
|
|
10
|
+
levelInfo.push(spl[i-1]+`:`+spl[i]);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
let id = levelInfo[0].split("1:")[1];
|
|
15
|
+
let name = levelInfo[1].split("2:")[1];
|
|
16
|
+
let version = levelInfo[2].split("5:")[1];
|
|
17
|
+
let playerID = levelInfo[3].split("6:")[1];
|
|
18
|
+
let difficulty = levelInfo[5].split("9:")[1];
|
|
19
|
+
let downloads = levelInfo[6].split("10:")[1];
|
|
20
|
+
let officialSong = levelInfo[7].split("12:")[1];
|
|
21
|
+
let gameVersion = levelInfo[8].split("13:")[1];
|
|
22
|
+
let likes = levelInfo[9].split("14:")[1];
|
|
23
|
+
let demonBool = levelInfo[10].split("17:")[1];
|
|
24
|
+
let stars = levelInfo[13].split("18:")[1];
|
|
25
|
+
let ftrd = levelInfo[14].split("19:")[1];
|
|
26
|
+
let epic = levelInfo[15].split("42:")[1];
|
|
27
|
+
let objs = levelInfo[16].split("45:")[1];
|
|
28
|
+
let desc = levelInfo[17].split("3:")[1];
|
|
29
|
+
let length = levelInfo[18].split("15:")[1];
|
|
30
|
+
let copiedID = levelInfo[19].split("30:")[1];
|
|
31
|
+
let twoPlayer = levelInfo[20].split("31:")[1];
|
|
32
|
+
let coins = levelInfo[21].split("37:")[1];
|
|
33
|
+
let verifiedCoins = levelInfo[22].split("38:")[1];
|
|
34
|
+
let starsRequested = levelInfo[23].split("39:")[1];
|
|
35
|
+
let customSong = levelInfo[26].split("35:")[1].split("#")[0];
|
|
36
|
+
|
|
37
|
+
let disliked = false;
|
|
38
|
+
if(likes.includes("-")) disliked = true;
|
|
39
|
+
|
|
40
|
+
if(desc.includes("/")) desc = desc.split("/")[0];
|
|
41
|
+
if(decB64(desc) == '') desc = "KE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkKQ=="
|
|
42
|
+
|
|
43
|
+
if(verifiedCoins == "0") verifiedCoins = false;
|
|
44
|
+
if(verifiedCoins == "1") verifiedCoins = true;
|
|
45
|
+
|
|
46
|
+
let demonBoolDecoding = {
|
|
47
|
+
'1': true,
|
|
48
|
+
'': false,
|
|
49
|
+
'0': false
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
let featuredDecoding = {
|
|
53
|
+
"0": false,
|
|
54
|
+
"1": true,
|
|
55
|
+
undefined: true
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
let featured = featuredDecoding[ftrd];
|
|
59
|
+
if(featured == undefined) featured = true;
|
|
60
|
+
|
|
61
|
+
let difficultyDecoding = {
|
|
62
|
+
"-10": "Auto",
|
|
63
|
+
"0": "Unrated",
|
|
64
|
+
"10": "Easy",
|
|
65
|
+
"20": "Normal",
|
|
66
|
+
"30": "Hard",
|
|
67
|
+
"40": "Harder",
|
|
68
|
+
"50": "Insane"
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if(demonBoolDecoding[demonBool] == true) {
|
|
72
|
+
difficultyDecoding = {
|
|
73
|
+
"10": "Easy Demon",
|
|
74
|
+
"20": "Medium Demon",
|
|
75
|
+
"30": "Hard Demon",
|
|
76
|
+
"40": "Insane Demon",
|
|
77
|
+
"50": "Extreme Demon"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const lengthDecoding = {
|
|
82
|
+
"0": "Tiny",
|
|
83
|
+
"1": "Short",
|
|
84
|
+
"2": "Medium",
|
|
85
|
+
"3": "Long",
|
|
86
|
+
"4": "XL"
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const decodeGameVersion = {
|
|
90
|
+
"1": "Pre-1.7",
|
|
91
|
+
"2": "Pre-1.7",
|
|
92
|
+
"3": "Pre-1.7",
|
|
93
|
+
"4": "Pre-1.7",
|
|
94
|
+
"5": "Pre-1.7",
|
|
95
|
+
"6": "Pre-1.7",
|
|
96
|
+
"7": "Pre-1.7",
|
|
97
|
+
"10": "1.7",
|
|
98
|
+
"18": "1.8",
|
|
99
|
+
"19": "1.9",
|
|
100
|
+
"20": "2.0",
|
|
101
|
+
"21": "2.1"
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
let result = {
|
|
105
|
+
id: Number(id),
|
|
106
|
+
name: name,
|
|
107
|
+
description: decB64(desc),
|
|
108
|
+
level_version: Number(version),
|
|
109
|
+
difficulty: difficultyDecoding[difficulty],
|
|
110
|
+
stars: Number(stars),
|
|
111
|
+
downloads: Number(downloads),
|
|
112
|
+
likes: Number(likes),
|
|
113
|
+
disliked: disliked,
|
|
114
|
+
length: lengthDecoding[length],
|
|
115
|
+
demon: demonBoolDecoding[demonBool],
|
|
116
|
+
featured: featured,
|
|
117
|
+
epic: demonBoolDecoding[epic],
|
|
118
|
+
objects: Number(objs),
|
|
119
|
+
stars_requested: Number(starsRequested),
|
|
120
|
+
game_version: decodeGameVersion[gameVersion],
|
|
121
|
+
copied: Number(copiedID),
|
|
122
|
+
large: Number(objs) > 40000 ? true : false,
|
|
123
|
+
two_p: demonBoolDecoding[twoPlayer],
|
|
124
|
+
coins: Number(coins),
|
|
125
|
+
verified_coins: verifiedCoins
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return {
|
|
129
|
+
res: result,
|
|
130
|
+
playerID: playerID,
|
|
131
|
+
officialSong: officialSong,
|
|
132
|
+
customSong: customSong
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
package/misc/demonlist.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
module.exports = {
|
|
2
2
|
demonlist:
|
|
3
3
|
async function(name) {
|
|
4
|
-
|
|
5
|
-
let
|
|
6
|
-
if(
|
|
4
|
+
let r = await fetch(`https://pointercrate.com/api/v2/demons/?name=${name}`);
|
|
5
|
+
let lvlObj = await r.json();
|
|
6
|
+
if(lvlObj == undefined) return null;
|
|
7
7
|
|
|
8
8
|
const res = {
|
|
9
|
-
"position":
|
|
10
|
-
"publisher":
|
|
11
|
-
"verifier":
|
|
9
|
+
"position": lvlObj[0].position,
|
|
10
|
+
"publisher": lvlObj[0].publisher.name,
|
|
11
|
+
"verifier": lvlObj[0].verifier.name,
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
return res;
|