80 lines
3.0 KiB
JavaScript
80 lines
3.0 KiB
JavaScript
const express = require("express")
|
|
const app = new express()
|
|
const { AutoClient } = require("discord-auto-rpc")
|
|
const client = new AutoClient({ transport: 'ipc' });
|
|
const { defaultActivity } = require("./lib/defaults");
|
|
const { teamsIndex } = require("./lib/teams")
|
|
const port = process.env.PORT || 60881
|
|
const { getState, updateState, sixHoursAgo, timestampStart } = require("./lib/utils");
|
|
const fs = require("node:fs");
|
|
|
|
app.get("/changeTeams/regular-participant/:teamSlug", (req, res) => {
|
|
if (req.params.teamSlug == "spectator") {
|
|
client.setActivity({
|
|
pid: process.pid,
|
|
activity: teamsIndex.regularEvents.spectator
|
|
})
|
|
updateState(teamsIndex.regularEvents.spectator)
|
|
res.json({
|
|
ok: true,
|
|
state: getState()
|
|
})
|
|
} else {
|
|
res.status(404).json({
|
|
ok: false,
|
|
error: "Team not found on index."
|
|
})
|
|
}
|
|
})
|
|
|
|
app.get("/getState", (req, res) => {
|
|
res.json(getState())
|
|
})
|
|
|
|
|
|
client.on('ready', async () => {
|
|
fs.stat('rpcState.json', (err, stat) => {
|
|
|
|
if (err == null) {
|
|
resetStartTimestamp = {
|
|
details: getState().details,
|
|
assets: getState().assets,
|
|
state: getState().state,
|
|
buttons: getState().buttons,
|
|
timestamps: {
|
|
start: timestampStart()
|
|
}
|
|
}
|
|
console.log('info: State file exists, preloading from previous state');
|
|
/** Check if timestamp.start from getState is longer than six hours to trigger reset. */
|
|
if (sixHoursAgo > getState().timestamps.start) {
|
|
console.log("info: timestamp.start from state file is less than 6 hours ago, preloading")
|
|
client.request("SET_ACTIVITY", { pid: process.pid, activity: getState() });
|
|
} else if (sixHoursAgo < getState().timestamps.start) {
|
|
console.log('info: timestamp.start from state file is longer than 6 hours, resetting...')
|
|
updateState(resetStartTimestamp)
|
|
}
|
|
} else {
|
|
client.request("SET_ACTIVITY", { pid: process.pid, activity: defaultActivity });
|
|
console.log("info: Using default activity for state due to file issues");
|
|
updateState(defaultActivity)
|
|
}
|
|
});
|
|
});
|
|
client.once('connected', async () => {
|
|
console.log("info: Connected to Discord local RPC server");
|
|
});
|
|
app.listen(port, () => {
|
|
console.log("info: REST API is up at http://localhost:"+port+", see README.md and docs directory")
|
|
console.log("info: for the API docs. Please do not make API calls yet until the API server successfully")
|
|
console.log("info: connects to Discord RPC to avoid issues..")
|
|
})
|
|
|
|
// Uses the unofficial MCC.Live OAuth client ID from Andrei Jiroh.
|
|
// Uses discord-auto-rpc behind the scenes to attempt to connect to RPC and wait until Discord is up.
|
|
client.endlessLogin({ clientId: "952456760948559932" });
|
|
|
|
module.exports = {
|
|
app,
|
|
client
|
|
} |