The weeb for the next gen discord boat - Wamellow wamellow.com
bot discord
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix passport types

Luna 0de6fe17 f6fd1455

+44 -24
+2 -2
app/leaderboard/[guildId]/layout.tsx
··· 78 78 79 79 const guildExists = guild && "id" in guild; 80 80 81 - const backgroundRgb = design && "backgroundColor" in design && design?.backgroundColor 82 - ? decimalToRgb(design?.backgroundColor || 0) 81 + const backgroundRgb = design && "backgroundColor" in design && design.backgroundColor 82 + ? decimalToRgb(design.backgroundColor || 0) 83 83 : undefined; 84 84 85 85 const cookieStore = cookies();
+2 -2
app/passport/[guildId]/api.ts
··· 1 - import { ApiV1GuildsModulesPassportGetResponse } from "@/typings"; 1 + import { ApiError, ApiV1GuildsModulesPassportGetResponse } from "@/typings"; 2 2 3 - export async function getPassport(guildId: string): Promise<ApiV1GuildsModulesPassportGetResponse> { 3 + export async function getPassport(guildId: string): Promise<ApiV1GuildsModulesPassportGetResponse | ApiError | undefined> { 4 4 const res = await fetch(`${process.env.NEXT_PUBLIC_API}/guilds/${guildId}/passport-verification`, { 5 5 headers: { Authorization: process.env.API_SECRET as string }, 6 6 next: { revalidate: 60 }
+40 -20
app/passport/[guildId]/page.tsx
··· 12 12 import { getGuild } from "@/lib/api"; 13 13 import paintPic from "@/public/paint.webp"; 14 14 import decimalToRgb from "@/utils/decimalToRgb"; 15 + import { intl } from "@/utils/numbers"; 15 16 import { getCanonicalUrl } from "@/utils/urls"; 16 17 17 18 import { getPassport } from "./api"; 18 19 import Verify from "./verify.component"; 19 20 20 - interface PassportProps { params: { guildId: string }, searchParams: { page: string, type: string } } 21 + interface Props { 22 + params: { guildId: string }; 23 + searchParams: { page: string, type: string }; 24 + } 21 25 22 26 export const generateMetadata = async ({ 23 27 params 24 - }: PassportProps): Promise<Metadata> => { 28 + }: Props): Promise<Metadata> => { 25 29 const guild = await getGuild(params.guildId); 30 + const name = guild && "name" in guild ? guild.name : "Unknown"; 26 31 27 - const title = `Verify in ${guild?.name}`; 28 - const description = `Easily verify yourself in ${guild?.name} with a simple and safe captcha in the web to gain access all channels.`; 32 + const title = `Verify in ${name}`; 33 + const description = `Easily verify yourself in ${name} with a simple and safe captcha in the web to gain access all channels.`; 29 34 const url = getCanonicalUrl("passport", params.guildId); 30 35 31 36 return { ··· 39 44 description, 40 45 url, 41 46 type: "website", 42 - images: guild?.icon ? `https://cdn.discordapp.com/icons/${guild.id}/${guild.icon}.webp?size=256` : "/discord.png" 47 + images: guild && "icon" in guild && guild.icon ? `https://cdn.discordapp.com/icons/${guild.id}/${guild.icon}.webp?size=256` : "/discord.png" 43 48 }, 44 49 twitter: { 45 50 card: "summary", ··· 49 54 }; 50 55 }; 51 56 52 - export default async function Home({ params }: PassportProps) { 57 + export default async function Home({ params }: Props) { 53 58 const guildPromise = getGuild(params.guildId); 54 59 const passportPromise = getPassport(params.guildId); 55 60 56 61 const [guild, passport] = await Promise.all([guildPromise, passportPromise]); 57 62 58 - const backgroundRgb = decimalToRgb(passport.backgroundColor || 0); 59 - const intl = new Intl.NumberFormat("en", { notation: "standard" }); 63 + const guildExists = guild && "id" in guild; 64 + 65 + const backgroundRgb = passport && "backgroundColor" in passport && passport.backgroundColor 66 + ? decimalToRgb(passport.backgroundColor || 0) 67 + : undefined; 60 68 61 69 return ( 62 70 <div className="w-full"> 63 71 64 - {passport.backgroundColor && 72 + {backgroundRgb && 65 73 <style> 66 74 {` 67 75 :root { ··· 71 79 </style> 72 80 } 73 81 74 - {typeof passport === "object" && "statusCode" in passport && 75 - <Notice type={NoticeType.Error} message={(passport as Record<string, string>).message} /> 82 + {passport && "message" in passport && 83 + <Notice type={NoticeType.Error} message={passport.message} /> 76 84 } 77 85 78 - {guild?.id === "1125063180801036329" && 86 + {guild && "id" in guild && guild?.id === "1125063180801036329" && 79 87 <Notice type={NoticeType.Info} message="This is a demo server to test out passport verification." > 80 88 <ServerButton 81 89 as={Link} ··· 96 104 <Image 97 105 alt="" 98 106 className="w-full object-cover h-[216px]" 99 - src={guild?.banner ? `https://cdn.discordapp.com/banners/${guild?.id}/${guild?.banner}?size=512` : paintPic.src} 107 + src={guild && "banner" in guild && guild.banner ? `https://cdn.discordapp.com/banners/${guild?.id}/${guild?.banner}?size=512` : paintPic.src} 100 108 width={3840 / 10} 101 109 height={2160 / 10} 102 110 /> ··· 105 113 <div 106 114 className="text-lg flex gap-5 items-center absolute top-[146px] rounded-3xl z-20 left-[4px] md:left-2 py-4 px-5 backdrop-blur-3xl backdrop-brightness-90 shadow-md" 107 115 > 108 - <ImageReduceMotion url={`https://cdn.discordapp.com/icons/${guild?.id}/${guild?.icon}`} size={128} alt="Server icon" className="rounded-full h-14 w-14 ring-offset-[var(--background-rgb)] ring-2 ring-offset-2 ring-violet-400/40" /> 116 + <ImageReduceMotion 117 + alt="Server icon" 118 + className="rounded-full h-14 w-14 ring-offset-[var(--background-rgb)] ring-2 ring-offset-2 ring-violet-400/40" 119 + url={guildExists ? `https://cdn.discordapp.com/icons/${guild.id}/${guild.icon}` : "/discord"} 120 + size={128} 121 + /> 122 + 109 123 <div className="flex flex-col gap-1"> 110 - <div className="text-2xl dark:text-neutral-200 text-neutral-800 font-medium">{guild?.name || "Unknown Server"}</div> 124 + <div className="text-2xl dark:text-neutral-200 text-neutral-800 font-medium">{guildExists ? guild.name : "Unknown Server"}</div> 111 125 <div className="text-sm font-semibold flex items-center gap-1"> 112 - <HiUsers /> {intl.format(guild?.memberCount || 0)} 113 - <Image src="https://cdn.discordapp.com/emojis/875797879401361408.webp" width={18} height={18} alt="boost icon" className="ml-2" /> Level {guild?.premiumTier} 126 + <HiUsers /> {guildExists ? intl.format(guild?.memberCount) : 0} 127 + 128 + <Image src="https://cdn.discordapp.com/emojis/875797879401361408.webp" width={18} height={18} alt="boost icon" className="ml-2" /> 129 + <span className="ml-2">Level {guildExists ? guild?.premiumTier : 0}</span> 114 130 </div> 115 131 </div> 116 132 </div> ··· 121 137 <ul> 122 138 {[ 123 139 "Secure server", 124 - `${intl.format(guild?.memberCount || 0)} members` 140 + `${guild && "memberCount" in guild ? intl.format(guild?.memberCount) : 0} members` 125 141 ].map((name) => ( 126 142 <li key={name} className="flex gap-1 items-center"> 127 143 <HiCheck className="text-violet-400" /> ··· 134 150 </li> 135 151 </ul> 136 152 137 - {guild && typeof passport !== "object" && 138 - <Verify guild={guild} /> 153 + { 154 + guild && "id" in guild && 155 + passport && "enabled" in passport && 156 + <Verify 157 + guild={guild} 158 + /> 139 159 } 140 160 141 161 </div>