2024-02-18 08:21:08 -06:00
|
|
|
const path = require("path"),
|
2024-06-29 17:34:54 -05:00
|
|
|
fs = require("fs")
|
2024-02-18 08:21:08 -06:00
|
|
|
|
2024-05-20 10:20:19 -05:00
|
|
|
var constants = JSON.parse(fs.readFileSync(path.join(__dirname, 'constants.json')))
|
2024-02-18 08:21:08 -06:00
|
|
|
|
2024-05-20 10:20:19 -05:00
|
|
|
var activityImages = constants.activityImages
|
2024-02-18 08:01:58 -06:00
|
|
|
|
|
|
|
function get_img_url(activity, size = "large_image") {
|
|
|
|
if ("assets" in activity) {
|
|
|
|
var image = activity.assets[size]
|
|
|
|
|
|
|
|
if (image) {
|
|
|
|
if (image.includes("https/")) {
|
|
|
|
return decodeURIComponent('https://' + image.substr(image.indexOf('https/') + 6, image.length))
|
|
|
|
} else if (image.includes("spotify")) {
|
|
|
|
return decodeURIComponent('https://i.scdn.co/image/' + image.substr(image.indexOf('spotify:') + 8, image.length))
|
2024-03-24 16:54:09 -05:00
|
|
|
} else {
|
|
|
|
return decodeURIComponent('https://cdn.discordapp.com/app-assets/' + activity.application_id + "/" + image + ".png")
|
2024-02-18 08:01:58 -06:00
|
|
|
}
|
2024-03-24 16:55:00 -05:00
|
|
|
}
|
2024-02-18 08:01:58 -06:00
|
|
|
}
|
|
|
|
|
2024-03-23 12:37:22 -05:00
|
|
|
if (!image && size == "large_image") {
|
2024-02-18 08:01:58 -06:00
|
|
|
if (activity.name in activityImages) {
|
|
|
|
return decodeURIComponent(activityImages[activity.name])
|
|
|
|
}
|
|
|
|
}
|
2024-03-23 12:37:22 -05:00
|
|
|
return null
|
2024-02-18 08:01:58 -06:00
|
|
|
}
|
|
|
|
|
2024-06-02 18:31:08 -05:00
|
|
|
function makeCompat(string) {
|
|
|
|
return string.replaceAll("<", "<").replaceAll(">", ">")
|
|
|
|
}
|
|
|
|
|
2024-02-18 08:01:58 -06:00
|
|
|
function timeFormatter(seconds) {
|
2024-06-29 17:34:54 -05:00
|
|
|
seconds = Math.ceil(seconds / 1000)
|
2024-02-18 08:01:58 -06:00
|
|
|
var minutes = Math.floor(seconds / 60)
|
|
|
|
|
|
|
|
if (seconds % 60 < 10) {
|
|
|
|
return `${minutes}:0${seconds % 60}`
|
|
|
|
} else {
|
|
|
|
return `${minutes}:${seconds % 60}`
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function gameTimeFormatter(seconds) {
|
2024-06-29 17:34:54 -05:00
|
|
|
seconds = Math.ceil(seconds / 1000)
|
2024-02-18 08:01:58 -06:00
|
|
|
var minutes = Math.ceil(seconds / 60)
|
|
|
|
var hours = Math.floor(minutes / 60)
|
|
|
|
if (seconds <= 60) {
|
|
|
|
return 'about ' + seconds + ' seconds'
|
|
|
|
} else if (minutes < 60) {
|
|
|
|
return `${minutes} Minutes`
|
|
|
|
}
|
|
|
|
|
|
|
|
return `${hours} hours and ${minutes % 60} minutes`
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2024-05-30 21:42:30 -05:00
|
|
|
function onlyIfExists(string, check) {
|
|
|
|
if (check) {
|
|
|
|
return string
|
|
|
|
} else {
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-02-18 08:01:58 -06:00
|
|
|
module.exports = {
|
|
|
|
activitiesToHTML: (lanyardData, cachedImages) => {
|
|
|
|
var debounce = false
|
|
|
|
var addedHTML = ""
|
|
|
|
|
|
|
|
if (lanyardData && lanyardData.activities.length > 0) {
|
|
|
|
for (let index = 0; index < lanyardData.activities.length; index++) {
|
|
|
|
const activity = lanyardData.activities[index];
|
|
|
|
|
|
|
|
var found = false
|
|
|
|
for (let index = 0; index < lanyardData.activities.length; index++) {
|
|
|
|
const act = lanyardData.activities[index]
|
|
|
|
if (act.name == activity.name) {
|
|
|
|
if (Object.keys(act).length > Object.keys(activity).length) {
|
|
|
|
found = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (found) {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
function get_img(activity, size = "large_image") {
|
2024-06-01 13:45:12 -05:00
|
|
|
return "https://cache.violets-purgatory.dev/cached/" + get_img_url(activity, size)
|
2024-02-18 08:01:58 -06:00
|
|
|
}
|
|
|
|
|
2024-06-29 17:34:54 -05:00
|
|
|
function activityTime() {
|
2024-02-18 08:01:58 -06:00
|
|
|
if (activity.timestamps) {
|
2024-06-29 17:34:54 -05:00
|
|
|
if (activity.timestamps.start) {
|
|
|
|
if (activity.timestamps.end) {
|
|
|
|
var timeLeft = Math.round((activity.timestamps.end - Date.now()) / 1000)
|
|
|
|
var currentPercent = (Date.now() - activity.timestamps.start) / (activity.timestamps.end - activity.timestamps.start) * 100
|
|
|
|
return `
|
|
|
|
<br>
|
|
|
|
<span style="text-align: center;"><span class="lengthBar lengthBar${index}"><span></span></span><span class="durationBarFormatter" data-start="${activity.timestamps.start}" data-end="${activity.timestamps.end}">${timeFormatter((Date.now() - activity.timestamps.start))}/${timeFormatter((activity.timestamps.end - activity.timestamps.start))}</span></span>
|
|
|
|
<style>
|
|
|
|
.lengthBar${index} > span {
|
|
|
|
animation-name: songSlider${index};
|
|
|
|
animation-duration: ${timeLeft}s;
|
|
|
|
animation-timing-function: linear;
|
|
|
|
}
|
|
|
|
|
|
|
|
@keyframes songSlider${index} {
|
|
|
|
0% {
|
|
|
|
width: ${currentPercent}%;
|
|
|
|
}
|
|
|
|
100% {
|
|
|
|
width: 100%;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</style>
|
|
|
|
`
|
|
|
|
} else {
|
|
|
|
return `
|
|
|
|
<span class="timeEstimate" data-start="${activity.timestamps.start}">${gameTimeFormatter((Date.now() - activity.timestamps.start))}</span>
|
|
|
|
`
|
|
|
|
}
|
2024-06-29 18:36:27 -05:00
|
|
|
} else if (activity.timestamps.end) {
|
|
|
|
return `
|
|
|
|
<span class="endEstimate" data-end="${activity.timestamps.end}">${timeFormatter((activity.timestamps.end - Date.now()))}</span> left
|
|
|
|
`
|
2024-02-18 08:01:58 -06:00
|
|
|
}
|
|
|
|
}
|
2024-06-29 17:34:54 -05:00
|
|
|
}
|
2024-02-18 08:01:58 -06:00
|
|
|
|
2024-06-29 17:34:54 -05:00
|
|
|
if (activity.type != 4 && activity.assets) {
|
2024-02-18 08:01:58 -06:00
|
|
|
|
|
|
|
var time = activity.created_at
|
|
|
|
if (activity.timestamps) {
|
|
|
|
time = activity.timestamps.start
|
|
|
|
}
|
|
|
|
if (!activity.assets) {
|
2024-06-29 20:33:48 -05:00
|
|
|
activity.assets = { "large_text": "", "small_text": "" }
|
2024-02-18 08:01:58 -06:00
|
|
|
}
|
|
|
|
|
2024-06-29 20:33:48 -05:00
|
|
|
var text1 = onlyIfExists("<br><span style='font-size: 1.3rem;'>" + activity.song + "</span>", activity.song) || activity.details
|
|
|
|
var text2 = onlyIfExists("By: " + activity.artist, activity.artist) || activity.state
|
2024-06-29 17:34:54 -05:00
|
|
|
var text3 = onlyIfExists("On: " + activity.album, activity.album)
|
|
|
|
|
2024-02-18 08:01:58 -06:00
|
|
|
addedHTML += `
|
|
|
|
<div class="chip activity grid-child">
|
|
|
|
<img src="${get_img(activity)}" title="${activity.assets.large_text || activity.assets.small_text}">
|
2024-06-29 17:34:54 -05:00
|
|
|
<p style="text-align: left; font-size: 1.15rem;">
|
|
|
|
<span style="font-size: 1.6rem;">${activity.name}</span>
|
|
|
|
${onlyIfExists("<br>" + text1, text1)}
|
|
|
|
${onlyIfExists("<br>" + text2, text2)}
|
|
|
|
${onlyIfExists("<br>" + text3, text3)}
|
|
|
|
${onlyIfExists("<br>" + activityTime(), activityTime())}
|
2024-02-18 08:01:58 -06:00
|
|
|
</p>
|
|
|
|
</div>
|
|
|
|
`
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2024-06-05 22:04:30 -05:00
|
|
|
if (addedHTML.length > 10) {
|
|
|
|
addedHTML = `<h2><hr>What I'm up to:</h2><div class="activity-container">` + addedHTML
|
|
|
|
addedHTML += "</div>"
|
|
|
|
}
|
|
|
|
return addedHTML
|
2024-02-18 08:01:58 -06:00
|
|
|
}
|
|
|
|
}
|