diff --git a/.env.example b/.env.example index 577be0c..ef85e81 100644 --- a/.env.example +++ b/.env.example @@ -1 +1,2 @@ -HCAPTCHA_KEY=ES_ \ No newline at end of file +HCAPTCHA_KEY=ES_ +GITLAB_API_TOKEN= \ No newline at end of file diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts index b1d4d9b..d5a7357 100644 --- a/src/routes/+page.server.ts +++ b/src/routes/+page.server.ts @@ -1,38 +1,54 @@ import { building } from "$app/environment"; -import { DISCORD_USER_TOKEN } from "$env/static/private"; +import { DISCORD_USER_TOKEN, GITLAB_API_TOKEN } from "$env/static/private"; let memberCount = 0; -let roleMembers: { [key: string]: number } = { - "1214817156420862012": 50, +let starCount = 0; +let roleMembers = { + "1214817156420862012": 50, }; + async function setMemberCount() { - console.log("Fetching member count"); - const promises = [ - fetch("https://discord.com/api/v9/invites/suyu?with_counts=true&with_expiration=true"), - DISCORD_USER_TOKEN - ? fetch("https://discord.com/api/v9/guilds/1214371687114477618/roles/member-counts", { - headers: { - Authorization: DISCORD_USER_TOKEN, - }, - }) - : Promise.resolve({ json: () => roleMembers }), - ]; - const [res, roles] = await Promise.all(promises); - const jsonPromises = [res.json(), roles.json()]; - const [resJson, rolesJson] = await Promise.all(jsonPromises); - memberCount = resJson.approximate_member_count; - if (DISCORD_USER_TOKEN) roleMembers = rolesJson; - console.log("Member count:", memberCount); + console.log("Fetching member count"); + + const promises = [ + fetch("https://discord.com/api/v9/invites/suyu?with_counts=true&with_expiration=true"), + DISCORD_USER_TOKEN + ? fetch("https://discord.com/api/v9/guilds/1214371687114477618/roles/member-counts", { + headers: { + Authorization: DISCORD_USER_TOKEN, + }, + }) + : Promise.resolve({ json: () => roleMembers }), + GITLAB_API_TOKEN + ? fetch("https://gitlab.com/api/v4/projects/suyu-emu%2Fsuyu/", { + headers: { + Authorization: `Bearer ${GITLAB_API_TOKEN}`, + }, + }) + : Promise.resolve({ json: () => ({ star_count: 0 }) }), // Default to 0 if no token is provided + ]; + + const [res, roles, gitlabRes] = await Promise.all(promises); + const jsonPromises = [res.json(), roles.json(), gitlabRes.json()]; + const [resJson, rolesJson, gitlabResJson] = await Promise.all(jsonPromises); + + memberCount = resJson.approximate_member_count; + starCount = gitlabResJson.star_count; + if (DISCORD_USER_TOKEN) roleMembers = rolesJson; + + console.log("Member count:", memberCount); + console.log("Stars count:", starCount); } if (!building) { - await setMemberCount(); - setInterval(setMemberCount, 1000 * 60 * 10); + await setMemberCount(); + setInterval(setMemberCount, 1000 * 60 * 10); } export async function load(opts) { - return { - memberCount, - roleMembers, - }; + return { + memberCount, + starCount, + roleMembers, + }; } diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 81b2d1c..ffe09ee 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -8,6 +8,7 @@ export let data: PageData; $: memberCount = parseFloat(data.memberCount.toPrecision(2)); $: contributors = parseFloat(data.roleMembers["1214817156420862012"].toPrecision(2)); + $: starCount = data.starCount; let metadata = { url: "https://suyu.dev", title: "suyu - Open-source, non-profit Switch emulator", @@ -157,6 +158,12 @@