322 lines
8.4 KiB
JavaScript
322 lines
8.4 KiB
JavaScript
const express = require("express")
|
|
const router = express.Router()
|
|
const { requireAuth } = require("./../middleware/authmiddleware")
|
|
const games = require("./../model/games.js")
|
|
const catalog = require("./../model/item.js")
|
|
const { grabAuth } = require("./../middleware/grabauth.js")
|
|
const rcc = require("./../model/rcc.js")
|
|
const rcc2018 = require("./../model/rcc2018.js")
|
|
const rcc2020 = require("./../model/rcc2020.js")
|
|
const rcctalk = require("./../rcctalk")
|
|
const rcctalk2018 = require("./../rcctalk2018")
|
|
const bodyParser = require("body-parser")
|
|
router.use(bodyParser.json())
|
|
|
|
router.post("/scroll", async (req, res) => {
|
|
const resultsPerPage = 10
|
|
let cursor = req.body.cursor >= 0 ? req.body.cursor : 0
|
|
let type = req.body.type ? req.body.type : "Popular"
|
|
let allowed = [
|
|
"idofgame",
|
|
"version",
|
|
"nameofgame",
|
|
"numberofplayers",
|
|
"visits",
|
|
"useridofowner",
|
|
]
|
|
try {
|
|
if (type === "Popular") {
|
|
const response = await games
|
|
.find()
|
|
.sort({ numberofplayers: "descending", idofgame: 1 })
|
|
.skip(0 + parseFloat(cursor) * resultsPerPage)
|
|
.limit(10)
|
|
.lean()
|
|
.select(allowed)
|
|
.populate("owner", "username")
|
|
return res.json(response)
|
|
}
|
|
if (type === "OurRecommendations") {
|
|
const featured = await games
|
|
.find({ featured: true })
|
|
.skip(0 + parseFloat(cursor) * resultsPerPage)
|
|
.limit(10)
|
|
.lean()
|
|
.select(allowed)
|
|
.populate("owner", "username")
|
|
return res.json(featured)
|
|
}
|
|
if (type === "Visits") {
|
|
const mostvisitedresponse = await games
|
|
.find()
|
|
.sort({ visits: "descending", idofgame: 1 })
|
|
.skip(0 + parseFloat(cursor) * resultsPerPage)
|
|
.limit(10)
|
|
.lean()
|
|
.select(allowed)
|
|
.populate("owner", "username")
|
|
return res.json(mostvisitedresponse)
|
|
}
|
|
if (type === "NewestArrivals") {
|
|
const newest = await games
|
|
.find()
|
|
.sort({ idofgame: "descending" })
|
|
.skip(0 + parseFloat(cursor) * resultsPerPage)
|
|
.limit(10)
|
|
.lean()
|
|
.select(allowed)
|
|
.populate("owner", "username")
|
|
return res.json(newest)
|
|
}
|
|
return res.json({ status: "error", error: "wtf" })
|
|
} catch (error) {
|
|
console.log(error)
|
|
return res.json({ status: "error", error: "wtf" })
|
|
}
|
|
})
|
|
|
|
router.post("/firstpaint", async (req, res) => {
|
|
const resultsPerPage = 10
|
|
let cursor = 0
|
|
let allowed = [
|
|
"idofgame",
|
|
"version",
|
|
"nameofgame",
|
|
"numberofplayers",
|
|
"visits",
|
|
"useridofowner",
|
|
]
|
|
try {
|
|
const response = await games
|
|
.find()
|
|
.sort({ numberofplayers: "descending", idofgame: 1 })
|
|
.skip(0 + parseFloat(cursor) * resultsPerPage)
|
|
.limit(10)
|
|
.lean()
|
|
.select(allowed)
|
|
.populate("owner", "username")
|
|
const featured = await games
|
|
.find({ featured: true })
|
|
.skip(0 + parseFloat(cursor) * resultsPerPage)
|
|
.limit(10)
|
|
.lean()
|
|
.select(allowed)
|
|
.populate("owner", "username")
|
|
const mostvisitedresponse = await games
|
|
.find()
|
|
.sort({ visits: "descending", idofgame: 1 })
|
|
.skip(0 + parseFloat(cursor) * resultsPerPage)
|
|
.limit(10)
|
|
.lean()
|
|
.select(allowed)
|
|
.populate("owner", "username")
|
|
const newest = await games
|
|
.find()
|
|
.sort({ idofgame: "descending" })
|
|
.skip(0 + parseFloat(cursor) * resultsPerPage)
|
|
.limit(10)
|
|
.lean()
|
|
.select(allowed)
|
|
.populate("owner", "username")
|
|
return res.json({
|
|
Popular: { array: response },
|
|
OurRecommendations: { array: featured },
|
|
Visits: { array: mostvisitedresponse },
|
|
NewestArrivals: { array: newest },
|
|
})
|
|
} catch (error) {
|
|
console.log(error)
|
|
return res.json({ status: "error", error: "wtf" })
|
|
}
|
|
})
|
|
|
|
router.post("/shutdown", requireAuth, async (req, res) => {
|
|
const { gameid } = req.body
|
|
if (isNaN(parseFloat(gameid)) === true) {
|
|
return res.json({ status: "error", error: "Not found" })
|
|
}
|
|
|
|
const gamedoc = await games.findOne({ idofgame: gameid }).lean()
|
|
|
|
//console.log(response)
|
|
|
|
if (!gamedoc) {
|
|
return res.json({ status: "error", error: "Not found" })
|
|
}
|
|
if (
|
|
gamedoc.useridofowner != req.userdocument.userid &&
|
|
req.userdocument.admin === false
|
|
) {
|
|
// make sure we only let game owners and admins shut down the game
|
|
return res.json({ status: "error", error: "Not Authorized" })
|
|
}
|
|
|
|
if (gamedoc.version === "2018" || gamedoc.version === "2020") {
|
|
let instance = await rcc2018
|
|
.findOne({ PlaceId: gamedoc.idofgame })
|
|
.lean()
|
|
if (!instance) {
|
|
instance = await rcc2020
|
|
.findOne({ PlaceId: gamedoc.idofgame })
|
|
.lean()
|
|
if (!instance) {
|
|
return res.json({ status: "error", error: "Game not open." })
|
|
}
|
|
}
|
|
|
|
await rcc2018.deleteOne({ PlaceId: gamedoc.idofgame })
|
|
await rcc2020.deleteOne({ PlaceId: gamedoc.idofgame })
|
|
rcctalk2018.CloseJob("game" + gamedoc.idofgame)
|
|
}
|
|
if (gamedoc.version === "2016") {
|
|
const instance = await rcc.findOne({ PlaceId: gamedoc.idofgame }).lean()
|
|
if (!instance) {
|
|
return res.json({ status: "error", error: "Game not open." })
|
|
}
|
|
|
|
await rcc.deleteOne({ PlaceId: gamedoc.idofgame })
|
|
|
|
rcctalk.CloseJob("game" + gamedoc.idofgame)
|
|
}
|
|
|
|
return res.json({ status: "success", message: "Done!" })
|
|
})
|
|
|
|
router.post("/evictplayer", requireAuth, async (req, res) => {
|
|
const { gameid, userid } = req.body
|
|
if (isNaN(parseFloat(userid)) === true) {
|
|
return res.json({ status: "error", error: "Not found" })
|
|
}
|
|
|
|
const gamedoc = await games.findOne({ idofgame: gameid }).lean()
|
|
|
|
//console.log(response)
|
|
|
|
if (!gamedoc) {
|
|
return res.json({ status: "error", error: "Not found" })
|
|
}
|
|
if (
|
|
gamedoc.useridofowner != req.userdocument.userid &&
|
|
req.userdocument.admin === false
|
|
) {
|
|
// make sure we only let game owners and admins shut down the game
|
|
return res.json({ status: "error", error: "Not Authorized" })
|
|
}
|
|
|
|
if (gamedoc.version === "2018" || gamedoc.version === "2020") {
|
|
let instance = await rcc2018
|
|
.findOne({ PlaceId: gamedoc.idofgame })
|
|
.lean()
|
|
if (!instance) {
|
|
instance = await rcc2020
|
|
.findOne({ PlaceId: gamedoc.idofgame })
|
|
.lean()
|
|
if (!instance) {
|
|
return res.json({ status: "error", error: "Game not open." })
|
|
}
|
|
}
|
|
|
|
rcctalk2018.Execute("game" + gamedoc.idofgame, {
|
|
Mode: "EvictPlayer",
|
|
Settings: { PlayerId: userid },
|
|
})
|
|
}
|
|
if (gamedoc.version === "2016") {
|
|
const instance = await rcc.findOne({ PlaceId: gamedoc.idofgame }).lean()
|
|
if (!instance) {
|
|
return res.json({ status: "error", error: "Game not open." })
|
|
}
|
|
let kickscript = `for v, player in pairs(game:GetService("Players"):GetChildren()) do
|
|
print(player.UserId)
|
|
local tokick = ${userid}
|
|
if player.UserId == tokick then
|
|
player:Kick()
|
|
end
|
|
end`
|
|
rcctalk.Execute("game" + gamedoc.idofgame, kickscript)
|
|
}
|
|
|
|
return res.json({ status: "success", message: "Done!" })
|
|
})
|
|
|
|
router.get("/gameinfo/:id", async (req, res) => {
|
|
var id = req.params.id
|
|
if (isNaN(parseFloat(id)) === true) {
|
|
return res.json({ status: "error", error: "Not found" })
|
|
}
|
|
|
|
const response = await games
|
|
.findOne({ idofgame: id })
|
|
.lean()
|
|
.select([
|
|
"idofgame",
|
|
"version",
|
|
"nameofgame",
|
|
"numberofplayers",
|
|
"visits",
|
|
"useridofowner",
|
|
"players",
|
|
"descrption",
|
|
])
|
|
.populate("owner", "username")
|
|
//console.log(response)
|
|
//console.log(response)
|
|
|
|
if (!response) {
|
|
return res.json({ status: "error", error: "Not found" })
|
|
}
|
|
const date = new Date(response._id.getTimestamp())
|
|
response.creationdate =
|
|
date.getMonth() + 1 + "/" + date.getDate() + "/" + date.getFullYear()
|
|
|
|
return res.json({ error: false, gameinfo: response })
|
|
})
|
|
|
|
router.get("/gameinfo/:id/store", async (req, res) => {
|
|
var id = req.params.id
|
|
if (isNaN(parseFloat(id)) === true) {
|
|
return res.json({ status: "error", error: "Not found" })
|
|
}
|
|
|
|
const response = await catalog.find({ associatedgameid: id }).lean()
|
|
//console.log(response)
|
|
|
|
if (!response) {
|
|
return res.json({ status: "error", error: "Not found" })
|
|
}
|
|
|
|
return res.json({ status: "success", gameinfo: response })
|
|
})
|
|
|
|
router.post("/search", async (req, res) => {
|
|
const resultsPerPage = 100
|
|
let cursor = req.body.cursor >= 0 ? req.body.cursor : 0
|
|
|
|
function escapeRegex(text) {
|
|
return text?.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&")
|
|
}
|
|
const regex = new RegExp(escapeRegex(req.body.searchquery), "gi")
|
|
|
|
//const pages = await User.countDocuments({username: regex})/resultsPerPage
|
|
|
|
const response = await games
|
|
.find({ nameofgame: regex })
|
|
.limit(resultsPerPage)
|
|
.skip(0 + parseFloat(cursor) * resultsPerPage)
|
|
.lean()
|
|
.select([
|
|
"idofgame",
|
|
"version",
|
|
"nameofgame",
|
|
"numberofplayers",
|
|
"visits",
|
|
"useridofowner",
|
|
"players",
|
|
"descrption",
|
|
])
|
|
|
|
return res.json(response)
|
|
})
|
|
|
|
module.exports = router
|