const path = require("path"), fs = require("fs"), WebSocket = require('ws'), EventEmitter = require("events").EventEmitter const events = new EventEmitter(); const constants = JSON.parse(fs.readFileSync(path.join(__dirname, "constants.json"))) var lastPong = 0 module.exports = { "lanyard": undefined, "socials": undefined, "connected": false, "lastLanyardUpdate": Date.now(), "blogConnected": false, "blogPosts": undefined, "events": events, "spins": 0, } function socketeer() { var lanyard = new WebSocket('https://api.violets-purgatory.dev') lanyard.on("error", (error) => { console.log(error) }) lanyard.on("close", () => { console.log("Connection Closed. Attempting Reconnect in 30 seconds.") module.exports.lanyard = constants.fallbackLanyard module.exports.connected = false setTimeout(() => { socketeer() }, 30000); }) function ping(dur) { lanyard.send(JSON.stringify({ op: 3 })) setTimeout(() => { ping(dur) if (Date.now() - lastPong > 120000) { lanyard.close() console.log("Max duration since last pong exceeded- Closing socket.") } }, dur); } lanyard.addEventListener("message", async (res) => { var data = JSON.parse(res.data) // console.log(data.op) if (data.op == 1) { console.log("Connected to Discord Websocket!") module.exports.connected = true ping(30000) lastPong = Date.now() events.emit("lanyardConnect") } else if (data.op == 3) { lastPong = Date.now() } else if (data.op == 0) { module.exports.lanyard = data.d module.exports.lastLanyardUpdate = Date.now() events.emit("lanyardUpdate") } else if (data.op == 4) { module.exports.spins = data.spins } }) } socketeer() function blogSocket() { var blog = new WebSocket('https://blog.violets-purgatory.dev') blog.on("error", (error) => { console.log(error) }) blog.on("close", () => { console.log("Connection Closed. Attempting Reconnect in 30 seconds.") module.exports.blogConnected = false setTimeout(() => { blogSocket() }, 30000); }) function ping(dur) { blog.send(JSON.stringify({ type: "ping" })) setTimeout(() => { ping(dur) if (Date.now() - lastPong > 120000) { blog.close() console.log("Max duration since last pong exceeded- Closing socket.") } }, dur); } blog.addEventListener("message", async (res) => { var data = JSON.parse(res.data) if (data.type == "init") { console.log("Connected to Blog Websocket!") module.exports.blogConnected = true ping(30000) lastPong = Date.now() events.emit("blogConnect") } else if (data.type == "ping") { lastPong = Date.now() } else if (data.type == "allPosts") { console.log("Recieved posts!") module.exports.blogPosts = data.data events.emit("blogUpdate") } else { console.log(data) } }) } blogSocket()