86 lines
No EOL
3.3 KiB
JavaScript
86 lines
No EOL
3.3 KiB
JavaScript
const fs = require('fs')
|
|
|
|
module.exports = async (app, req, res, api, getLevels) => {
|
|
|
|
if (req.offline) return res.send("-1")
|
|
let username = getLevels || req.params.id
|
|
let accountMode = !req.query.hasOwnProperty("player") && Number(req.params.id)
|
|
let foundID = app.userCache(req.id, username)
|
|
let skipRequest = accountMode || foundID
|
|
let searchResult;
|
|
|
|
// if you're searching by account id, an intentional error is caused to skip the first request to the gd servers. see i pulled a sneaky on ya. (fuck callbacks man)
|
|
req.gdRequest(skipRequest ? "" : 'getGJUsers20', skipRequest ? {} : { str: username, page: 0 }, function (err1, res1, b1) {
|
|
|
|
if (foundID) searchResult = foundID[0]
|
|
else if (accountMode || err1 || b1 == '-1' || b1.startsWith("<") || !b1) searchResult = req.params.id
|
|
else if (!req.isGDPS) searchResult = app.parseResponse(b1.split("|")[0])[16]
|
|
else { // GDPS's return multiple users, GD no longer does this
|
|
let userResults = b1.split("|").map(x => app.parseResponse(x))
|
|
searchResult = userResults.find(x => x[1].toLowerCase() == username.toLowerCase() || x[2] == username) || ""
|
|
if (searchResult) searchResult = searchResult[16]
|
|
}
|
|
|
|
if (getLevels) {
|
|
req.params.text = foundID ? foundID[1] : app.parseResponse(b1)[2]
|
|
return app.run.search(app, req, res)
|
|
}
|
|
|
|
req.gdRequest('getGJUserInfo20', { targetAccountID: searchResult }, function (err2, res2, body) {
|
|
|
|
let account = app.parseResponse(body || "")
|
|
let dumbGDPSError = req.isGDPS && (!account[16] || account[1].toLowerCase() == "undefined")
|
|
|
|
if (err2 || body == '-1' || !body || dumbGDPSError) {
|
|
if (!api) return res.redirect('/search/' + req.params.id)
|
|
else return res.send("-1")
|
|
}
|
|
|
|
if (!foundID) app.userCache(req.id, account[16], account[2], account[1])
|
|
|
|
let userData = {
|
|
username: account[1] || "[MISSINGNO.]",
|
|
playerID: account[2],
|
|
accountID: account[16],
|
|
rank: +account[30],
|
|
stars: +account[3],
|
|
diamonds: +account[46],
|
|
coins: +account[13],
|
|
userCoins: +account[17],
|
|
demons: +account[4],
|
|
cp: +account[8],
|
|
friendRequests: account[19] == "0",
|
|
messages: account[18] == "0" ? "all" : account[18] == "1" ? "friends" : "off",
|
|
commentHistory: account[50] == "0" ? "all" : account[50] == "1" ? "friends" : "off",
|
|
moderator: +account[49],
|
|
youtube: account[20] || null,
|
|
twitter: account[44] || null,
|
|
twitch: account[45] || null,
|
|
icon: +account[21],
|
|
ship: +account[22],
|
|
ball: +account[23],
|
|
ufo: +account[24],
|
|
wave: +account[25],
|
|
robot: +account[26],
|
|
spider: +account[43],
|
|
col1: +account[10],
|
|
col2: +account[11],
|
|
deathEffect: +account[48] || 1,
|
|
glow: account[28] == "1",
|
|
}
|
|
|
|
if (api) return res.send(userData)
|
|
|
|
else fs.readFile('./html/profile.html', 'utf8', function(err, data) {
|
|
let html = data;
|
|
let variables = Object.keys(userData)
|
|
variables.forEach(x => {
|
|
let regex = new RegExp(`\\[\\[${x.toUpperCase()}\\]\\]`, "g")
|
|
html = html.replace(regex, app.clean(userData[x]))
|
|
})
|
|
return res.send(html)
|
|
})
|
|
|
|
})
|
|
})
|
|
} |