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