gj-boomlings-api 1.0.3 → 1.2.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/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  <div align="center">
2
2
  <a href="https://www.npmjs.com/package/gj-boomlings-api"><img src="https://shikoshib.github.io/font1.png" width="600"></a><hr>
3
3
  <a href="https://www.npmjs.com/package/gj-boomlings-api"><img src="https://img.shields.io/npm/v/gj-boomlings-api.svg?maxAge=3600" alt="npm version" /></a>
4
- <a href="https://www.npmjs.com/package/gj-boomlings-api"><img src="https://img.shields.io/npm/dt/gj-boomlings-api.svg?maxAge=3600" alt="npm downloads" /></a>
4
+ <a href="https://www.npmjs.com/package/gj-boomlings-api"><img src="https://img.shields.io/npm/dm/gj-boomlings-api.svg?maxAge=2592000" /></a>
5
5
  <a href="https://snyk.io/test/github/shikoshib/gj-boomlings-api"><img src="https://snyk.io/test/github/shikoshib/gj-boomlings-api/badge.svg" alt="Known Vulnerabilities" /></a>
6
6
  <a href="https://packagequality.com/#?package=gj-boomlings-api"><img src="https://packagequality.com/shield/gj-boomlings-api.svg"/></a>
7
7
  </div>
@@ -1,7 +1,7 @@
1
1
  module.exports = {
2
2
  blockUser:
3
3
  async function(target, username, password) {
4
- if(!target || target == "") throw new Error("Please provide a player ID or username!");
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
7
  const axios = require("axios");
@@ -0,0 +1,53 @@
1
+ module.exports = {
2
+ deleteComment:
3
+ async function(id, lvl, str, password) {
4
+ const {encURLSafeBase64} = require("./encURLSafeBase64.js");
5
+ if(!id || id == "") throw new Error("Please provide a comment ID!");
6
+ if(!lvl || lvl == "") throw new Error("Please provide a level ID!");
7
+ if(!str || str == "") throw new Error("Please provide a user ID or name!");
8
+ if(!password || password == "") throw new Error("Please provide a password!");
9
+
10
+ const axios = require("axios");
11
+ const { headers, server } = require("../config.json");
12
+
13
+ const data = {
14
+ gameVersion: 21,
15
+ binaryVersion: 35,
16
+ gdw: 0,
17
+ str: str,
18
+ secret: "Wmfd2893gb7"
19
+ };
20
+
21
+ let r = await axios.post(server + "getGJUsers20.php", data, {
22
+ headers: headers
23
+ }).catch(e => {
24
+ if(e.response.data == -1) throw new Error("-1 This user is not found.");
25
+ throw new Error(e.response.data);
26
+ })
27
+
28
+ let accId = r.data.split(":16:")[1].split(":3:")[0];
29
+ if(Number(accId) < 71 || accId.includes(":")) accId = r.data.split(":16:")[2].split(":3:")[0];
30
+
31
+ const XOR = require("../misc/xor.js");
32
+ const xor = new XOR();
33
+
34
+ let dACdata = {
35
+ gameVersion: 21,
36
+ binaryVersion: 35,
37
+ gdw: 0,
38
+ accountID: accId,
39
+ secret: "Wmfd2893gb7",
40
+ levelID: lvl,
41
+ gjp: xor.encrypt(password, 37526),
42
+ commentID: id,
43
+ };
44
+
45
+ let res = await axios.post(server + "deleteGJComment20.php", dACdata, {
46
+ headers: headers
47
+ }).catch(e => {
48
+ throw new Error(e.response.data);
49
+ })
50
+
51
+ return 1;
52
+ }
53
+ }
@@ -21,6 +21,9 @@ module.exports = {
21
21
 
22
22
  let res = await axios.post(server + 'downloadGJLevel22.php', data, {
23
23
  headers: headers
24
+ }).catch(e => {
25
+ if(e.response.data == -1) throw new Error("-1 This user is not found.");
26
+ throw new Error(e.response.data);
24
27
  })
25
28
 
26
29
  let spl = res.data.split(":");
@@ -125,35 +128,65 @@ module.exports = {
125
128
 
126
129
  const { getLevelByID } = require("./getLevelByID.js");
127
130
  let basicInfoAboutLevel = await getLevelByID(id);
128
-
129
- const result = {
130
- id: Number(id),
131
- name: name,
132
- description: description,
133
- creator: basicInfoAboutLevel.creator,
134
- level_version: Number(version),
135
- difficulty: difficultyDecoding[difficulty],
136
- stars: Number(stars),
137
- downloads: Number(downloads),
138
- likes: Number(likes),
139
- disliked: disliked,
140
- length: lengthDecoding[length],
141
- password: password.replace("1", ""),
142
- demon: demonBoolDecoding[demonBool],
143
- featured: featured,
144
- epic: demonBoolDecoding[epic],
145
- objects: Number(objects),
146
- uploaded: uploaded,
147
- updated: updated,
148
- stars_requested: Number(starsRequested),
149
- game_version: decodeGameVersion[gameVersion],
150
- ldm: demonBoolDecoding[ldm],
151
- copied: Number(copiedID),
152
- two_p: demonBoolDecoding[twoPlayer],
153
- coins: Number(coins),
154
- verified_coins: verifiedCoins,
155
- song: basicInfoAboutLevel.song,
156
- }
131
+ let result = {
132
+ id: Number(id),
133
+ name: name,
134
+ description: description,
135
+ creator: basicInfoAboutLevel.creator,
136
+ level_version: Number(version),
137
+ difficulty: difficultyDecoding[difficulty],
138
+ stars: Number(stars),
139
+ downloads: Number(downloads),
140
+ likes: Number(likes),
141
+ disliked: disliked,
142
+ length: lengthDecoding[length],
143
+ password: password.replace("1", ""),
144
+ demon: demonBoolDecoding[demonBool],
145
+ featured: featured,
146
+ epic: demonBoolDecoding[epic],
147
+ objects: Number(objects),
148
+ uploaded: uploaded,
149
+ updated: updated,
150
+ stars_requested: Number(starsRequested),
151
+ game_version: decodeGameVersion[gameVersion],
152
+ ldm: demonBoolDecoding[ldm],
153
+ copied: Number(copiedID),
154
+ two_p: demonBoolDecoding[twoPlayer],
155
+ coins: Number(coins),
156
+ verified_coins: verifiedCoins,
157
+ song: basicInfoAboutLevel.song,
158
+ }
159
+ if(basicInfoAboutLevel.pointercrate != undefined) {
160
+ result = {
161
+ id: Number(id),
162
+ name: name,
163
+ description: description,
164
+ creator: basicInfoAboutLevel.creator,
165
+ level_version: Number(version),
166
+ difficulty: difficultyDecoding[difficulty],
167
+ stars: Number(stars),
168
+ downloads: Number(downloads),
169
+ likes: Number(likes),
170
+ disliked: disliked,
171
+ length: lengthDecoding[length],
172
+ password: password.replace("1", ""),
173
+ demon: demonBoolDecoding[demonBool],
174
+ featured: featured,
175
+ epic: demonBoolDecoding[epic],
176
+ objects: Number(objects),
177
+ uploaded: uploaded,
178
+ updated: updated,
179
+ stars_requested: Number(starsRequested),
180
+ game_version: decodeGameVersion[gameVersion],
181
+ ldm: demonBoolDecoding[ldm],
182
+ copied: Number(copiedID),
183
+ two_p: demonBoolDecoding[twoPlayer],
184
+ coins: Number(coins),
185
+ verified_coins: verifiedCoins,
186
+ song: basicInfoAboutLevel.song,
187
+ pointercrate: basicInfoAboutLevel.pointercrate
188
+ }
189
+ }
157
190
 
158
191
  return result;
159
192
  }
@@ -3,7 +3,7 @@ module.exports = {
3
3
  function(string) {
4
4
  const bs = require("js-base64");
5
5
  if(!string || string == "") throw new Error("No string provided!")
6
- let str = bs.encode(string).replace(/\//g, '_').replace(/w+/g, '-');
6
+ let str = bs.encode(string).replace(/\//g, '_').replace(/\+/g, '-');
7
7
  return str;
8
8
  }
9
9
  }
@@ -24,6 +24,6 @@ module.exports = {
24
24
  throw new Error(e.response.data);
25
25
  })
26
26
 
27
- return decodeLevel(res.data);
27
+ return await decodeLevel(res.data);
28
28
  }
29
29
  }
@@ -15,6 +15,9 @@ module.exports = {
15
15
 
16
16
  let r = await axios.post(server + "getGJUsers20.php", data, {
17
17
  headers: headers
18
+ }).catch(e => {
19
+ if(e.response.data == -1) throw new Error("-1 This user is not found.");
20
+ throw new Error(e.response.data);
18
21
  })
19
22
 
20
23
  let id = r.data.split(":16:")[1].split(":3:")[0];
@@ -30,11 +33,10 @@ module.exports = {
30
33
 
31
34
  let res = await axios.post(server + "getGJUserInfo20.php", GJUI20data, {
32
35
  headers: headers
36
+ }).catch(e => {
37
+ if(e.response.data == -1) throw new Error("-1 This user is not found.");
38
+ throw new Error(e.response.data);
33
39
  })
34
-
35
- if(res.data == -1) throw new Error("-1 Not found.")
36
- if(res.data.toLowerCase() == "error code: 1020") throw new Error("1020 error: Request denied.");
37
- if(res.data.toLowerCase() == "error code: 1005") throw new Error("1005 error: Your IP address has been blocked from sending requests to a server. It's recommended to use locally (directly from a PC).")
38
40
 
39
41
  let spl = res.data.split(':');
40
42
  let userInfo = [];
@@ -113,6 +115,7 @@ module.exports = {
113
115
  twitter: twitterLnk,
114
116
  twitch: twitchLnk
115
117
  }
118
+
116
119
  return result;
117
120
  }
118
121
  }
@@ -0,0 +1,62 @@
1
+ module.exports = {
2
+ unblockUser:
3
+ async function(target, username, password) {
4
+ if(!target || target == "") throw new Error("Please provide a target's player ID or username!");
5
+ if(!username || username == "") throw new Error("Please provide your player ID or username!");
6
+ if(!password || password == "") throw new Error("Please provide your password!");
7
+ const axios = require("axios");
8
+ const {headers, server} = require("../config.json");
9
+
10
+ let resp = await axios.post(server + "getGJUsers20.php", {
11
+ gameVersion: 21,
12
+ binaryVersion: 35,
13
+ gdw: 0,
14
+ str: username,
15
+ secret: "Wmfd2893gb7"
16
+ }, {
17
+ headers: headers
18
+ }).catch(e => {
19
+ if(e.response.data == -1) throw new Error(`Couldn't find a "${username}" user.`)
20
+ throw new Error(e.response.data)
21
+ })
22
+
23
+ let accID = resp.data.split(":16:")[1].split(":3:")[0];
24
+
25
+ const userData = {
26
+ gameVersion: 21,
27
+ binaryVersion: 35,
28
+ gdw: 0,
29
+ str: target,
30
+ secret: "Wmfd2893gb7"
31
+ }
32
+
33
+ let r = await axios.post(server + "getGJUsers20.php", userData, {
34
+ headers: headers
35
+ }).catch(e => {
36
+ if(e.response.data == -1) throw new Error(`Couldn't find a "${username}" user.`)
37
+ throw new Error(e.response.data)
38
+ })
39
+ let targetId = r.data.split(":16:")[1].split(":3:")[0];
40
+
41
+ const {gjp} = require("../misc/gjp.js");
42
+
43
+ const blockData = {
44
+ gameVersion: 21,
45
+ binaryVersion: 35,
46
+ gdw: 0,
47
+ secret: "Wmfd2893gb7",
48
+ targetAccountID: targetId,
49
+ accountID: accID,
50
+ gjp: gjp(password)
51
+ }
52
+
53
+ let res = await axios.post(server + "unblockGJUser20.php", blockData, {
54
+ headers: headers
55
+ }).catch(e => {
56
+ if(res.data.toString().toLowerCase() == "error code: 1020") throw new Error("1020 error: Request denied.");
57
+ throw new Error(e)
58
+ })
59
+
60
+ return 1;
61
+ }
62
+ }
@@ -60,8 +60,6 @@ module.exports = {
60
60
  if(edata == '') edata = "Whoops, the servers have rejected your request!"
61
61
  throw new Error(edata)
62
62
  })
63
-
64
- if(res.data.toLowerCase() == "error code: 1020") throw new Error("1020 error: Request denied.");
65
63
 
66
64
  return 1;
67
65
  }
package/index.js CHANGED
@@ -25,6 +25,8 @@ const { updateLevelDesc } = require("./functions/updateLevelDesc.js");
25
25
  const { deleteAccountPost } = require("./functions/deleteAccountPost.js");
26
26
  const { getUserLevels } = require("./functions/getUserLevels.js");
27
27
  const { searchLevels } = require("./functions/searchLevels.js");
28
+ const { deleteComment } = require("./functions/deleteComment.js");
29
+ const { unblockUser } = require("./functions/unblockUser.js");
28
30
 
29
31
  module.exports.dlLevel = dlLevel;
30
32
  module.exports.getSongInfo = getSongInfo;
@@ -33,7 +35,7 @@ module.exports.decURLSafeBase64 = decURLSafeBase64;
33
35
  module.exports.encURLSafeBase64 = encURLSafeBase64;
34
36
  module.exports.getDailyLevel = getDailyLevel;
35
37
  module.exports.getWeeklyDemon = getWeeklyDemon;
36
- module.exports.getProfile = getProfile; // to fix
38
+ module.exports.getProfile = getProfile;
37
39
  module.exports.reportLevel = reportLevel;
38
40
  module.exports.getComments = getComments;
39
41
  module.exports.getCommentHistory = getCommentHistory;
@@ -49,4 +51,6 @@ module.exports.getCreatorScores = getCreatorScores;
49
51
  module.exports.updateLevelDesc = updateLevelDesc;
50
52
  module.exports.deleteAccountPost = deleteAccountPost;
51
53
  module.exports.getUserLevels = getUserLevels;
52
- module.exports.searchLevels = searchLevels;
54
+ module.exports.searchLevels = searchLevels;
55
+ module.exports.deleteComment = deleteComment;
56
+ module.exports.unblockUser = unblockUser;
@@ -1,6 +1,6 @@
1
1
  module.exports = {
2
2
  decodeLevel:
3
- function(level){
3
+ async function(level){
4
4
  const bs = require("js-base64");
5
5
 
6
6
  let spl = level.split(':');
@@ -134,30 +134,62 @@ module.exports = {
134
134
  song = songinfo;
135
135
  }
136
136
 
137
- const result = {
138
- id: Number(id),
139
- name: name,
140
- description: bs.decode(desc), //.replace(/-/g, "+").replace(/_/g, "/")
141
- creator: author,
142
- level_version: Number(version),
143
- difficulty: difficultyDecoding[difficulty],
144
- stars: Number(stars),
145
- downloads: Number(downloads),
146
- likes: Number(likes),
147
- disliked: disliked,
148
- length: lengthDecoding[length],
149
- demon: demonBoolDecoding[demonBool],
150
- featured: featured,
151
- epic: demonBoolDecoding[epic],
152
- objects: Number(objs),
153
- stars_requested: Number(starsRequested),
154
- game_version: decodeGameVersion[gameVersion],
155
- copied: Number(copiedID),
156
- two_p: demonBoolDecoding[twoPlayer],
157
- coins: Number(coins),
158
- verified_coins: verifiedCoins,
159
- song: song,
137
+ let result;
138
+ const { demonlist } = require("./demonlist.js");
139
+ let dlist = await demonlist(name);
140
+
141
+ if(dlist != null) {
142
+ result = {
143
+ id: Number(id),
144
+ name: name,
145
+ description: bs.decode(desc),
146
+ creator: author,
147
+ level_version: Number(version),
148
+ difficulty: difficultyDecoding[difficulty],
149
+ stars: Number(stars),
150
+ downloads: Number(downloads),
151
+ likes: Number(likes),
152
+ disliked: disliked,
153
+ length: lengthDecoding[length],
154
+ demon: demonBoolDecoding[demonBool],
155
+ featured: featured,
156
+ epic: demonBoolDecoding[epic],
157
+ objects: Number(objs),
158
+ stars_requested: Number(starsRequested),
159
+ game_version: decodeGameVersion[gameVersion],
160
+ copied: Number(copiedID),
161
+ two_p: demonBoolDecoding[twoPlayer],
162
+ coins: Number(coins),
163
+ verified_coins: verifiedCoins,
164
+ song: song,
165
+ pointercrate: dlist
166
+ }
167
+ } else {
168
+ result = {
169
+ id: Number(id),
170
+ name: name,
171
+ description: bs.decode(desc),
172
+ creator: author,
173
+ level_version: Number(version),
174
+ difficulty: difficultyDecoding[difficulty],
175
+ stars: Number(stars),
176
+ downloads: Number(downloads),
177
+ likes: Number(likes),
178
+ disliked: disliked,
179
+ length: lengthDecoding[length],
180
+ demon: demonBoolDecoding[demonBool],
181
+ featured: featured,
182
+ epic: demonBoolDecoding[epic],
183
+ objects: Number(objs),
184
+ stars_requested: Number(starsRequested),
185
+ game_version: decodeGameVersion[gameVersion],
186
+ copied: Number(copiedID),
187
+ two_p: demonBoolDecoding[twoPlayer],
188
+ coins: Number(coins),
189
+ verified_coins: verifiedCoins,
190
+ song: song
160
191
  }
192
+ }
161
193
 
162
194
  return result;
163
195
  }
@@ -0,0 +1,16 @@
1
+ module.exports = {
2
+ demonlist:
3
+ async function(name) {
4
+ const axios = require("axios");
5
+ let r = await axios.get(`https://pointercrate.com/api/v2/demons/?name=${name}`);
6
+ if(r.data == "[]") return null;
7
+
8
+ const res = {
9
+ "position": r.data[0].position,
10
+ "publisher": r.data[0].publisher.name,
11
+ "verifier": r.data[0].verifier.name,
12
+ }
13
+
14
+ return res;
15
+ }
16
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gj-boomlings-api",
3
- "version": "1.0.3",
3
+ "version": "1.2.0",
4
4
  "description": "A Node.js module that allows you to fetch boomlings.com easily",
5
5
  "main": "index.js",
6
6
  "scripts": {