api.violets-purgatory.dev/index.js

277 lines
9.3 KiB
JavaScript
Raw Normal View History

2023-10-20 21:53:49 -05:00
const express = require('express'),
2023-11-16 19:29:22 -06:00
path = require('path'),
fs = require('fs'),
2023-11-30 21:56:34 -06:00
WebSocket = require('ws'),
2023-12-19 12:29:17 -06:00
xml2json = require('xml-js'),
commitCount = require('git-commit-count');
2023-10-20 21:53:49 -05:00
var app = express()
const PORT = process.env.PORT || 8080
2023-11-16 15:16:22 -06:00
const staticpath = path.join(__dirname, 'static')
const resourcePath = path.join(__dirname, "resources")
const mainpage = resourcePath + '/mainPage.html'
var lanyardData = undefined
var discData = null
2023-10-20 21:53:49 -05:00
2023-11-30 21:56:34 -06:00
var mastoData = {
"lastUpdate": 0,
"HTML": ""
}
2023-10-20 21:53:49 -05:00
app.use(express.static(staticpath))
2023-11-16 15:16:22 -06:00
app.listen(PORT, () => {
console.log("Violet's Purgatory is now listening on port: " + PORT)
2023-11-03 13:01:13 -05:00
})
2023-11-17 08:43:11 -06:00
function pageUpdate() {
2023-11-16 22:00:16 -06:00
var statuses = {
"online": {
"text": "Online",
"color": "rgb(100, 255, 100)"
},
"dnd": {
"text": "DND",
"color": "rgb(255, 100, 100)"
},
"idle": {
"text": "Idle",
"color": "rgb(255, 255, 75)"
},
"offline": {
"text": "Offline",
"color": "rgb(125, 125, 125)"
}
}
2023-11-16 15:16:22 -06:00
var html = fs.readFileSync(mainpage).toString()
2023-11-16 22:00:16 -06:00
2023-11-17 08:43:11 -06:00
var addedHTML = ""
2023-11-16 22:00:16 -06:00
if (lanyardData) {
var statusData = statuses[lanyardData.discord_status]
2023-11-16 15:16:22 -06:00
addedHTML += `<p style="color: ${statusData.color}">${statusData.text}</p>`
addedHTML += `<style>.pfp { border-color: ${statusData.color} !important }</style>`
}
2023-11-16 22:00:16 -06:00
2023-11-17 08:43:11 -06:00
html = html.replace("{LANYARD_STATUS}", addedHTML)
addedHTML = ""
2023-11-16 19:29:22 -06:00
if (lanyardData && lanyardData.activities.length > 0) {
if (lanyardData.activities[0].type == 4) {
addedHTML += `<hr><p><em><span style="color: lightgray">"${lanyardData.activities[0].state}"</span> - ${lanyardData.discord_user.display_name} ${new Date(Date.now()).getFullYear()}</em></p>`
}
}
html = html.replace("{LANYARD_QUOTE}", addedHTML)
addedHTML = ""
2023-11-16 19:29:22 -06:00
if (lanyardData) {
for (let index = 0; index < lanyardData.activities.length; index++) {
const activity = lanyardData.activities[index];
if (activity.type == 4) {
addedHTML += `<p><em><span style="color: lightgray">"${lanyardData.activities[0].state}"</span> - ${lanyardData.discord_user.display_name} ${new Date(Date.now()).getFullYear()}</em></p>`
}
}
}
html = html.replace("{LANYARD_SPOTIFY}", addedHTML)
addedHTML = ""
var debounce = false
if (lanyardData && lanyardData.activities.length > 0) {
for (let index = 0; index < lanyardData.activities.length; index++) {
const activity = lanyardData.activities[index];
if (!debounce && activity.type != 4) {
2023-11-30 22:49:14 -06:00
addedHTML += `<h2><hr>What I'm up to:</h2><div class="container-fluid row" style="margin: 0; padding: 0; display: flex;">`
debounce = true
}
function get_img() {
if ("assets" in activity) {
var image = undefined
if ("large_image" in activity.assets) {
image = activity.assets.large_image
} else if ("small_image" in activity.assets) {
image = activity.assets.small_image
}
if (image) {
if (image.includes("https/")) {
2023-11-30 20:18:56 -06:00
return decodeURIComponent('https://' + image.substr(image.indexOf('https/') + 6, image.length))
} else if (image.includes("spotify")) {
2023-11-30 20:18:56 -06:00
return decodeURIComponent('https://i.scdn.co/image/' + image.substr(image.indexOf('spotify:') + 8, image.length))
2023-11-20 18:50:02 -06:00
} else {
2023-11-30 20:18:56 -06:00
return decodeURIComponent(`https://cdn.discordapp.com/app-assets/${activity.application_id}/${image}.png`)
}
}
}
}
2023-11-16 19:29:22 -06:00
if (activity.type == 2) {
if (get_img()) {
addedHTML += `
2023-11-18 21:53:13 -06:00
<div class="chip activity col-md-6 testing">
2023-11-18 21:22:02 -06:00
<img src="${get_img()}" title="${activity.assets.large_text || activity.assets.small_text}">
<p>
Listening to <span style="color: limegreen;">${activity.name}</span>
2023-11-30 21:56:34 -06:00
<br> Song: ${activity.details}
<br> Album: ${activity.assets.large_text}
<br> Artist: ${activity.state}
</p>
</div>
`
} else {
addedHTML += `
2023-11-18 21:53:13 -06:00
<div class="chip activity col-md-6 testing">
<p style="width: 100%;">
Playing <span style="color: rgb(255, 100, 150);">${activity.name}</span>
<br> ${activity.state}
<br> ${activity.details}
</p>
</div>
`
}
} else if (activity.type == 0) {
if (get_img()) {
addedHTML += `
2023-11-18 21:53:13 -06:00
<div class="chip activity col-md-6 testing">
2023-11-18 21:22:02 -06:00
<img src="${get_img()}" title="${activity.assets.large_text || activity.assets.small_text}">
<p>
Playing <span style="color: rgb(255, 100, 150);">${activity.name}</span>
2023-11-18 21:16:59 -06:00
<br> ${activity.details || activity.assets.large_text}
2023-11-30 20:42:41 -06:00
<br> ${activity.state || activity.assets.small_text}
</p>
</div>
`
} else {
addedHTML += `
2023-11-18 21:53:13 -06:00
<div class="chip activity col-md-6 testing">
<p>
Playing <span style="color: rgb(255, 100, 150);">${activity.name}</span>
<br> ${activity.state}
<br> ${activity.details}
</p>
</div>
`
}
2023-11-16 19:29:22 -06:00
}
2023-11-16 15:16:22 -06:00
}
2023-11-16 19:29:22 -06:00
}
2023-11-17 08:43:11 -06:00
if (addedHTML) {
addedHTML += "</div>"
}
html = html.replace("{LANYARD_FULL}", addedHTML)
2023-11-17 08:43:11 -06:00
2023-11-18 21:36:53 -06:00
addedHTML = ""
var socialsHTML = fs.readFileSync(path.join(__dirname, 'static/socials/index.html')).toString()
2023-11-19 10:27:01 -06:00
addedHTML += socialsHTML.substring(socialsHTML.indexOf("<h1>"), socialsHTML.indexOf("</body>"))
2023-11-18 21:36:53 -06:00
html = html.replace("{SOCIALS}", addedHTML)
2023-11-30 21:56:34 -06:00
html = html.replace("{MASTODON_FEED}", mastoData.HTML)
2023-12-17 21:23:39 -06:00
var now = new Date()
currentMonth = now.getMonth() + 1
if ([11, 12, 1].includes(currentMonth)) { // The Below HTML is copy and pasted from that one site :>
html = html.replace("{SEASONAL_EFFECT}", `
<div class="snowflakes" aria-hidden="true">
<div class="snowflake">
<div class="inner"></div>
</div>
<div class="snowflake">
<div class="inner"></div>
</div>
<div class="snowflake">
<div class="inner"></div>
</div>
<div class="snowflake">
<div class="inner"></div>
</div>
<div class="snowflake">
<div class="inner"></div>
</div>
<div class="snowflake">
<div class="inner"></div>
</div>
<div class="snowflake">
<div class="inner"></div>
</div>
<div class="snowflake">
<div class="inner"></div>
</div>
<div class="snowflake">
<div class="inner"></div>
</div>
<div class="snowflake">
<div class="inner"></div>
</div>
<div class="snowflake">
<div class="inner"></div>
</div>
<div class="snowflake">
<div class="inner"></div>
</div>
</div>
<br>
<p>I love the winter :></p>
`)
} else {
html = html.replace("{SEASONAL_EFFECT}", "")
}
2023-12-19 12:51:41 -06:00
html = html.replace("{COMMITS}", commitCount('https://codeberg.org/Bingus_Violet/Violets-Purgatory.git'))
2023-12-19 12:29:17 -06:00
2023-11-17 08:43:11 -06:00
fs.writeFileSync(path.join(__dirname, 'static/index.html'), html)
}
2023-11-16 15:16:22 -06:00
// Lanyard Stuffs
var lanyard = new WebSocket('wss://api.lanyard.rest/socket')
function beat(dur) {
lanyard.send(JSON.stringify({
op: 3
}))
setTimeout(() => {
beat(dur)
}, dur);
}
2023-11-16 19:29:22 -06:00
lanyard.addEventListener("message", (res) => {
2023-11-16 15:16:22 -06:00
var data = JSON.parse(res.data)
if (data.op == 1) {
beat(data.d.heartbeat_interval)
lanyard.send(JSON.stringify({
op: 2,
d: {
subscribe_to_id: "534132311781015564"
}
}))
} else if (data.op == 0) {
lanyardData = data.d
2023-11-17 08:43:11 -06:00
pageUpdate()
2023-11-16 15:16:22 -06:00
}
2023-11-30 21:56:34 -06:00
})
2023-12-19 12:15:35 -06:00
app.use((req, res, next) => {
2023-12-19 12:21:37 -06:00
res.status(404).send(`
<link rel="stylesheet" href="/style.css">
2023-12-19 12:15:35 -06:00
<h1>...what?</h1>
<p>Uh oh... I think your lost? There's nothing here :P
2023-12-19 12:21:37 -06:00
<br>Maybe you were sent the wrong link? Try going to 'fs.violets-purgatory.dev' instead if you were expecting a file...</p>
`)
2023-12-19 12:15:35 -06:00
})