Compare commits

...

4 commits

Author SHA1 Message Date
6e0204bc49 Add layout to donator check page
Some checks failed
/ build (push) Failing after 4m46s
2025-03-21 15:32:51 -06:00
0c98097abc Add correct Discord Guild ID 2025-03-21 15:25:31 -06:00
24fb8f2b7d Add debug details to Discord API errors 2025-03-21 15:24:29 -06:00
210118bf4d Error handling on donator check page 2025-03-21 14:19:27 -06:00
2 changed files with 17 additions and 4 deletions

View file

@ -73,5 +73,7 @@
"alreadyDonator": "You are already a donator!",
"discordNeeded": "You need to link your Discord account to access this page",
"discordRoleNeeded": "You need the Donator Discord role to access this page",
"addedDonator": "Added donator benefits to your account!"
"addedDonator": "Added donator benefits to your account!",
"errorDonatorCheck": "Something went wrong when checking your Discord donator status. Please try again later. {error}",
"discordRateLimit": "{message} Retry after {retry_after} seconds."
}

View file

@ -1,8 +1,10 @@
---
import * as m from 'paraglide/messages'
import { DISCORD_DONATOR_ID } from 'astro:env/server'
import { DISCORD_DONATOR_ID, DISCORD_GUILD_ID } from 'astro:env/server'
import prismaClient from 'utils/prisma-client'
import BaseLayout from 'layouts/base.astro'
const { session, user, roles } = Astro.locals
async function getMessage() {
@ -22,13 +24,20 @@ async function getMessage() {
return m.discordNeeded()
}
const memberInfoRes = await fetch(`https://discord.com/api/users/@me/guilds/535484312124915714/member`, {
const memberInfoRes = await fetch(`https://discord.com/api/users/@me/guilds/${DISCORD_GUILD_ID}/member`, {
headers: {
Authorization: `Bearer ${discordAcc.accessToken}`,
'Content-Type': 'application/x-www-form-urlencoded'
}
})
if (memberInfoRes.status == 429) {
const { message, retry_after }: { message: string; retry_after: number } = await memberInfoRes.json()
return m.discordRateLimit({ message, retry_after })
} else if (memberInfoRes.status != 200) {
return m.errorDonatorCheck({ error: await memberInfoRes.json() })
}
const memberInfo: { roles: string[] } = await memberInfoRes.json()
const isDiscordDonator = memberInfo.roles.includes(DISCORD_DONATOR_ID)
@ -43,4 +52,6 @@ async function getMessage() {
const message = await getMessage()
---
<div>{message}</div>
<BaseLayout>
<div class='justify-center py-4 flex w-full'>{message}</div>
</BaseLayout>