Skip to content

Commit 2105fa7

Browse files
Lenochxdtheusaf
andauthored
feat(Wplace): add activity (#9845)
Signed-off-by: Lenoch <81lennoch@gmail.com> Co-authored-by: Daniel Lau <32113157+theusaf@users.noreply.github.com>
1 parent 84c01db commit 2105fa7

2 files changed

Lines changed: 92 additions & 0 deletions

File tree

websites/W/Wplace/metadata.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"$schema": "https://schemas.premid.app/metadata/1.13",
3+
"apiVersion": 1,
4+
"author": {
5+
"id": "390265556357611521",
6+
"name": "lenoch"
7+
},
8+
"service": "Wplace",
9+
"description": {
10+
"en": "Wplace is a collaborative, real-time pixel canvas layered over the world map, where anyone can paint and create art together."
11+
},
12+
"url": "wplace.live",
13+
"version": "1.0.0",
14+
"logo": "https://i.imgur.com/ZfNOTBm.png",
15+
"thumbnail": "https://i.imgur.com/3iaxuqv.png",
16+
"color": "#1C61E7",
17+
"category": "games",
18+
"tags": [
19+
"place",
20+
"redditplace",
21+
"game"
22+
]
23+
}

websites/W/Wplace/presence.ts

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
const presence = new Presence({
2+
clientId: '1401582122975891466',
3+
})
4+
const browsingTimestamp = Math.floor(Date.now() / 1000)
5+
6+
enum ActivityAssets {
7+
Logo = 'https://i.imgur.com/ZfNOTBm.png',
8+
}
9+
10+
let level: string = 'Unknown'
11+
let pixelsPainted: string = 'Unknown'
12+
13+
function updateGlobals() {
14+
const levelValue = document.querySelector('div.text-primary-content')?.textContent ?? 'Unknown'
15+
if (levelValue !== 'Unknown')
16+
level = levelValue
17+
18+
let pixelsValue = document.querySelector('div.flex.items-center.gap-1 span.text-primary.font-semibold:not(.text-base)')?.textContent ?? 'Unknown'
19+
if (pixelsValue.startsWith('('))
20+
pixelsValue = 'Unknown'
21+
if (pixelsValue !== 'Unknown')
22+
pixelsPainted = pixelsValue
23+
}
24+
25+
presence.on('UpdateData', async () => {
26+
updateGlobals()
27+
const presenceData: PresenceData = {
28+
largeImageKey: ActivityAssets.Logo,
29+
startTimestamp: browsingTimestamp,
30+
}
31+
32+
const coordinatesElement = document.querySelector('.whitespace-nowrap')
33+
const coordinates = coordinatesElement && coordinatesElement.textContent
34+
? coordinatesElement.textContent.replace('Pixel: ', '')
35+
: 'Unknown'
36+
const zone = document.querySelector('button.btn.btn-xs.flex')?.textContent ?? 'Unknown'
37+
const loggedIn = !document.querySelector('button.btn.btn-primary.shadow-xl')
38+
const isPainting = !!document.querySelector('div.absolute.bottom-0.left-0.z-50.w-full')
39+
40+
// Helper function to determine the state message
41+
const getState = (): string => {
42+
if (!loggedIn)
43+
return 'Logged out'
44+
if (pixelsPainted === 'Unknown')
45+
return level === 'Unknown' ? '' : `Level ${level}`
46+
return `${pixelsPainted} Pixels painted (level ${level})`
47+
}
48+
49+
// Set presence details and state based on available data
50+
if (coordinates === 'Unknown') {
51+
if (level === 'Unknown') {
52+
presenceData.details = !loggedIn ? 'Looking at the map' : 'Placing pixels'
53+
if (loggedIn)
54+
presenceData.state = getState()
55+
}
56+
else {
57+
presenceData.details = !isPainting ? 'Looking at the map' : 'Placing pixels'
58+
presenceData.state = getState()
59+
}
60+
}
61+
else {
62+
presenceData.details = zone === 'Unknown'
63+
? `Looking at pixel ${coordinates} (Unknown zone)`
64+
: `Looking at pixel ${coordinates} (${zone})`
65+
presenceData.state = getState()
66+
}
67+
68+
presence.setActivity(presenceData)
69+
})

0 commit comments

Comments
 (0)