Skip to content

Commit

Permalink
Add files via upload
Browse files Browse the repository at this point in the history
  • Loading branch information
shikoshib committed Dec 29, 2023
1 parent 056389a commit 0b9a96e
Show file tree
Hide file tree
Showing 7 changed files with 667 additions and 8 deletions.
160 changes: 159 additions & 1 deletion functions/dlLevel.js
Original file line number Diff line number Diff line change
@@ -1 +1,159 @@
module.exports={dlLevel:async function(level){const zlib=require("zlib");if(!level)throw new Error("Please provide a level ID.");if(isNaN(level))throw new Error("The level parameter should be a number.");const{gjReq}=require("../gjReq");const data={levelID:level.toString().trim(),secret:"Wmfd2893gb7"};let res=await gjReq("downloadGJLevel22",data);if(res.data==-1)return{};const XOR=require("../xor");let xor=new XOR;let s=res.data.split("#")[0].split(":");let id=Number(s[1]);let name=s[3];let description=Buffer.from(s[5],"base64url").toString();let levelString=s[7];let version=Number(s[9]);let playerID=Number(s[11]);let difficulty=s[15];let downloads=Number(s[17]);let officialSongID=Number(s[19]);let gameVersion=Number(s[21]);let likes=Number(s[23]);let isDemon=s[25];let stars=Number(s[31]);let isFeatured=s[33];let isEpic=s[35];let objStats=Number(s[37]);let length=Number(s[39]);let copiedID=Number(s[41]);let is2P=s[43];let uploaded=s[45];let updated=s[47];let NGSongID=Number(s[49]);let coins=Number(s[53]);let coinsVerified=s[55];let starReq=Number(s[57]);let isLDM=s[63];let password=xor.decrypt(s[67].split("#")[0],26364);if(password.length==7)password=password.replace("1","");let diffObj={"-10":"Auto",0:"N/A",10:"Easy",20:"Normal",30:"Hard",40:"Harder",50:"Insane"};if(Boolean(Number(isDemon))){diffObj={10:"Easy Demon",20:"Medium Demon",30:"Hard Demon",40:"Insane Demon",50:"Extreme Demon"}}const lengthObj={0:"Tiny",1:"Short",2:"Medium",3:"Long",4:"XL",5:"Platformer"};const versionObj={10:"1.7",18:"1.8",19:"1.9",20:"2.0",21:"2.1",22:"2.2"};const buffer=await new Promise((resolve,reject)=>{zlib.unzip(Buffer.from(levelString,"base64"),(err,buffer)=>{if(err){reject(err)}else{resolve(buffer)}})});const rawData=buffer.toString();const objs=rawData.split(";");objs.shift();let song;const{getOfficialSongInfo}=require("./getOfficialSongInfo");const{getSongInfo}=require("./getSongInfo");if(officialSongID&&!NGSongID){song=getOfficialSongInfo(officialSongID+1)}else if(NGSongID&&!officialSongID){let findSong=await getSongInfo(NGSongID);song=findSong}else if(!officialSongID&&!NGSongID){song=getOfficialSongInfo(1)}let result={id:id,name:name,description:!description?"(No description provided)":description,levelVersion:version,playerID:playerID,difficulty:diffObj[difficulty],stars:stars,downloads:downloads,likes:likes,disliked:likes<0?true:false,length:lengthObj[length],password:password,demon:Boolean(Number(isDemon)),featured:Boolean(Number(isFeatured)),epic:Boolean(Number(isEpic)),objects:objs.length-1,uploaded:uploaded,updated:updated,starsRequested:starReq,gameVersion:versionObj[gameVersion]?versionObj[gameVersion]:"Pre-1.7",ldm:Boolean(Number(isLDM)),copiedFrom:copiedID,large:objStats>4e4?true:false,twoPlayer:Boolean(Number(is2P)),coins:coins,verifiedCoins:Boolean(Number(coinsVerified)),song:song};if(s[69]&&s[68]!="41"){let songsIDArray=[];let sfxIDArray=[];for(let songID of s[69].split(",")){if(songID==NGSongID)continue;songsIDArray.push(Number(songID))}for(let sfx of s[71].split("#")[0].split(",")){sfxIDArray.push(Number(sfx))}result.additionalSongs=songsIDArray;result.sfx=sfxIDArray}return result}};
module.exports = {
dlLevel: async function (level) {
const zlib = require("zlib");
if (!level) throw new Error("Please provide a level ID.");
if (isNaN(level)) throw new Error("The level parameter should be a number.");

const { gjReq } = require("../gjReq");

const data = {
levelID: level.toString().trim(),
secret: "Wmfd2893gb7"
}

let res = await gjReq("downloadGJLevel22", data);
if (res.data == -1) return {};
const XOR = require("../xor");
let xor = new XOR;

let s = res.data.split("#")[0].split(":");

let id = Number(s[1]);
let name = s[3];
let description = Buffer.from(s[5], "base64url").toString();
let levelString = s[7];
let version = Number(s[9]);
let playerID = Number(s[11]);
let difficulty = s[15];
let downloads = Number(s[17]);
let officialSongID = Number(s[19]);
let gameVersion = Number(s[21]);
let likes = Number(s[23]);
let isDemon = s[25];
let stars = Number(s[31]);
let isFeatured = s[33];
let isEpic = s[35];
let objStats = Number(s[37]);
let length = Number(s[39]);
let copiedID = Number(s[41]);
let is2P = s[43];
let uploaded = s[45];
let updated = s[47];
let NGSongID = Number(s[49]);
let coins = Number(s[53]);
let coinsVerified = s[55];
let starReq = Number(s[57]);
let isLDM = s[63];
let password = xor.decrypt(s[67].split("#")[0], 26364);
if (password.length == 7) password = password.replace("1", "");

let diffObj = {
"-10": "Auto",
0: "N/A",
10: "Easy",
20: "Normal",
30: "Hard",
40: "Harder",
50: "Insane"
}

if (Boolean(Number(isDemon))) {
diffObj = {
10: "Easy Demon",
20: "Medium Demon",
30: "Hard Demon",
40: "Insane Demon",
50: "Extreme Demon"
}
}

const lengthObj = {
0: "Tiny",
1: "Short",
2: "Medium",
3: "Long",
4: "XL",
5: "Platformer"
}

const versionObj = {
10: "1.7",
18: "1.8",
19: "1.9",
20: "2.0",
21: "2.1",
22: "2.2"
}

const buffer = await new Promise((resolve, reject) => {
zlib.unzip(Buffer.from(levelString, "base64"), (err, buffer) => {
if (err) {
reject(err);
} else {
resolve(buffer);
}
});
})
const rawData = buffer.toString();
const objs = rawData.split(";");
objs.shift();

let song;
const { getOfficialSongInfo } = require("./getOfficialSongInfo");
const { getSongInfo } = require("./getSongInfo");
if (officialSongID && !NGSongID) {
song = getOfficialSongInfo(officialSongID + 1);
} else if (NGSongID && !officialSongID) {
let findSong = await getSongInfo(NGSongID);
song = findSong;
}else if(!officialSongID&&!NGSongID){
song = getOfficialSongInfo(1);
}

let result = {
id: id,
name: name,
description: !description ? "(No description provided)" : description,
levelVersion: version,
playerID: playerID,
difficulty: diffObj[difficulty],
stars: stars,
downloads: downloads,
likes: likes,
disliked: likes < 0 ? true : false,
length: lengthObj[length],
password: password,
demon: Boolean(Number(isDemon)),
featured: Boolean(Number(isFeatured)),
epic: Boolean(Number(isEpic)),
objects: objs.length - 1,
uploaded: uploaded,
updated: updated,
starsRequested: starReq,
gameVersion: versionObj[gameVersion] ? versionObj[gameVersion] : "Pre-1.7",
ldm: Boolean(Number(isLDM)),
copiedFrom: copiedID,
large: objStats > 4e4 ? true : false,
twoPlayer: Boolean(Number(is2P)),
coins: coins,
verifiedCoins: Boolean(Number(coinsVerified)),
song: song
}

if (s[69] && s[68] != "41") {
let songsIDArray = [];
let sfxIDArray = [];
for (let songID of s[69].split(",")) {
if (songID == NGSongID) continue;
songsIDArray.push(Number(songID));
}
for (let sfx of s[71].split("#")[0].split(",")) {
sfxIDArray.push(Number(sfx));
}
result.additionalSongs = songsIDArray;
result.sfx = sfxIDArray;
}

return result;
}
}
160 changes: 159 additions & 1 deletion functions/getProfile.js
Original file line number Diff line number Diff line change
@@ -1 +1,159 @@
module.exports={getProfile:async function(name,mode="auto"){const{gjReq}=require("../gjReq");const{rgbToHEX}=require("../misc/rgbToHEX");const colors=require("../misc/colors.json");if(!name)throw new Error("Please provide an account name, player ID or account ID!");if(!["name","accountid","playerid","auto"].includes(mode))throw new Error('Please provide a valid search mode! It\'s either "name", "accountid", "playerid", or "auto"');function decodeUser(array){let accName=array[1];let playerID=Number(array[3]);let secretCoins=Number(array[5]);let userCoins=Number(array[7]);let c1=array[9];let c2=array[11];let stars=Number(array[15]);let moons=Number(array[17]);let diamonds=Number(array[19]);let demons=Number(array[21]);let cp=Number(array[23]);let msg=array[25];let friendReqs=array[27];let commentHistory=array[29];let yt=array[31];let cube=Number(array[33]);let ship=Number(array[35]);let ball=Number(array[37]);let ufo=Number(array[39]);let wave=Number(array[41]);let robot=Number(array[43]);let spider=Number(array[47]);let swing=Number(array[51]);let jetpack=Number(array[53]);let glow=Boolean(Number(array[45]));let explosion=Number(array[49]);let rank=Number(array[55]);let accID=Number(array[57]);let twitter=array[61];let twitch=array[63];let mod=array[65];let msgObj={0:"all",1:"friends",2:"none"};let friendReqsObj={0:"all",1:"none"};let modObj={0:"none",1:"mod",2:"elder"};return{username:accName,playerID:playerID,accountID:accID,rank:rank,stars:stars,diamonds:diamonds,secretCoins:secretCoins,userCoins:userCoins,demons:demons,moons:moons,creatorPoints:cp,c1:rgbToHEX(colors[c1]),c2:rgbToHEX(colors[c2]),cubeID:cube,shipID:ship,ballID:ball,ufoID:ufo,waveID:wave,robotID:robot,spiderID:spider,swingID:swing,jetpackID:jetpack,explosionID:explosion,glow:glow,messages:msgObj[msg],friendRequests:friendReqsObj[friendReqs],commentHistory:msgObj[commentHistory],mod:modObj[mod],youtube:yt,twitter:twitter,twitch:twitch}}async function accIDSearch(){let res=await gjReq("getGJUserInfo20",{targetAccountID:name,secret:"Wmfd2893gb7"});if(res.data==-1)return{};let accArray=res.data.split(":");return decodeUser(accArray)}async function nonAccIDSearch(){let search=await gjReq("getGJUsers20",{str:name,secret:"Wmfd2893gb7"});if(search.data==-1)return{};let targetAccID=search.data.split(":")[21];let res=await gjReq("getGJUserInfo20",{targetAccountID:targetAccID,secret:"Wmfd2893gb7"});let accArray=res.data.split(":");return decodeUser(accArray)}let result;if(mode=="accountid"){const user=await new Promise(resolve=>{accIDSearch().then(u=>resolve(u))});return user}if(mode=="name"||mode=="playerid"){const user=await new Promise(resolve=>{nonAccIDSearch().then(u=>resolve(u))});return user}if(isNaN(name)){const user=await new Promise(resolve=>{nonAccIDSearch().then(u=>resolve(u))});return user}else{let user;const accIDUser=await new Promise(resolve=>{accIDSearch().then(u=>resolve(u))});if(!Object.keys(user).length){const nonAccIDUser=await new Promise(resolve=>{nonAccIDSearch().then(u=>resolve(u))});user=nonAccIDUser}else{user=accIDUser}return user}}};
module.exports = {
getProfile: async function (name, mode = "auto") {
const { gjReq } = require("../gjReq");
const { rgbToHEX } = require("../misc/rgbToHEX");
const colors = require("../misc/colors.json");
if (!name) throw new Error("Please provide an account name, player ID or account ID!")
if (!["name", "accountid", "playerid", "auto"].includes(mode)) throw new Error("Please provide a valid search mode! It's either \"name\", \"accountid\", \"playerid\", or \"auto\"")

function decodeUser(array) {
let accName = array[1];
let playerID = Number(array[3]);
let secretCoins = Number(array[5]);
let userCoins = Number(array[7]);
let c1 = array[9];
let c2 = array[11];
let stars = Number(array[15]);
let moons = Number(array[17]);
let diamonds = Number(array[19]);
let demons = Number(array[21]);
let cp = Number(array[23]);
let msg = array[25];
let friendReqs = array[27];
let commentHistory = array[29];
let yt = array[31];
let cube = Number(array[33]);
let ship = Number(array[35]);
let ball = Number(array[37]);
let ufo = Number(array[39]);
let wave = Number(array[41]);
let robot = Number(array[43]);
let spider = Number(array[47]);
let swing = Number(array[51]);
let jetpack = Number(array[53]);
let glow = Boolean(Number(array[45]));
let explosion = Number(array[49]);
let rank = Number(array[55]);
let accID = Number(array[57]);
let twitter = array[61];
let twitch = array[63];
let mod = array[65];

let msgObj = {
0: "all",
1: "friends",
2: "none"
}

let friendReqsObj = {
0: "all",
1: "none"
}

let modObj = {
0: "none",
1: "mod",
2: "elder"
}

return {
username: accName,
playerID: playerID,
accountID: accID,
rank: rank,
stars: stars,
diamonds: diamonds,
secretCoins: secretCoins,
userCoins: userCoins,
demons: demons,
moons: moons,
creatorPoints: cp,
c1: rgbToHEX(colors[c1]),
c2: rgbToHEX(colors[c2]),
cubeID: cube,
shipID: ship,
ballID: ball,
ufoID: ufo,
waveID: wave,
robotID: robot,
spiderID: spider,
swingID: swing,
jetpackID: jetpack,
explosionID: explosion,
glow: glow,
messages: msgObj[msg],
friendRequests: friendReqsObj[friendReqs],
commentHistory: msgObj[commentHistory],
mod: modObj[mod],
youtube: yt,
twitter: twitter,
twitch: twitch
}
}

async function accIDSearch() {
let res = await gjReq("getGJUserInfo20", {
targetAccountID: name,
secret: "Wmfd2893gb7"
});
if (res.data == -1) return {};
let accArray = res.data.split(":");

return decodeUser(accArray);
}

async function nonAccIDSearch() {
let search = await gjReq("getGJUsers20", {
str: name,
secret: "Wmfd2893gb7"
});
if (search.data == -1) return {};
let targetAccID = search.data.split(":")[21];

let res = await gjReq("getGJUserInfo20", {
targetAccountID: targetAccID,
secret: "Wmfd2893gb7"
});
let accArray = res.data.split(":");

return decodeUser(accArray);
}

let result;

if (mode == "accountid") {
const user = await new Promise((resolve) => {
accIDSearch().then(u => resolve(u));
})
return user;
}

if (mode == "name" || mode == "playerid") {
const user = await new Promise((resolve) => {
nonAccIDSearch().then(u => resolve(u));
})
return user;
}

if (isNaN(name)) {
const user = await new Promise((resolve) => {
nonAccIDSearch().then(u => resolve(u));
})
return user;
} else {
let user;
const accIDUser = await new Promise((resolve) => {
accIDSearch().then(u => resolve(u));
})
if (!Object.keys(user).length) {
const nonAccIDUser = await new Promise((resolve) => {
nonAccIDSearch().then(u => resolve(u));
})
user = nonAccIDUser;
} else {
user = accIDUser;
}
return user;
}
}
}

0 comments on commit 0b9a96e

Please sign in to comment.