import { getColor } from "@/lib/colors" import { env } from "@/lib/env/server" import { getGuild } from "@/lib/hypixel/api/guild" import { getUuid } from "@/lib/hypixel/api/mojang" import { Guild } from "@/lib/schema/guild" import { cn, parseSearchParams } from "@/lib/utils" import { Loader2Icon, ShieldAlert } from "lucide-react" import { Metadata } from "next" import { ReactNode, Suspense } from "react" import z from "zod" import { GuildPageLoadText } from "./_client" import { GuildMembers } from "./_components/members" import Sidebar from "./_components/sidebar" export async function generateMetadata({ params, searchParams }: PageProps<"/guild/[value]">): Promise { const { value } = await params const ptype = parseSearchParams(await searchParams).getValue("type") const { data: type } = z.literal("id").or(z.literal("name")).or(z.literal("player")).default("player").safeParse(ptype) switch (type) { case "id": case "name": const g = await getGuild(value, type) return { title: g?.name !== undefined ? `${g.name} Guild` : "Unknown" } case "player": case undefined: const p = await getUuid(value) return { title: p !== null ? `${p.name}'s Guild` : "Player not in Guild" } default: throw new Error(`Unknown type: ${type satisfies never}`) } } export default function GuildPage({ params, searchParams }: PageProps<"/guild/[value]">) { const maintenance = env.MAINTENANCE_MODE if (maintenance) { return (

Not available right now. This is just so I could have a front page for Hypixel Production API Key.

) } return ( } > ) } async function SuspendedPage({ params, searchParams }: Pick, "params" | "searchParams">) { const { value } = await params const ptype = parseSearchParams(await searchParams).getValue("type") const { data: type } = z.literal("id").or(z.literal("name")).or(z.literal("player")).default("player").safeParse(ptype) let guild: Guild["guild"] | null = null let component: ReactNode | null = null switch (type) { case "id": guild = await getGuild(value, type) component = (

{`The guild with the id ${value} doesn't exist`}

) break case "name": guild = await getGuild(value, type) component = (

{`The guild with the name ${value} doesn't exist`}

) break case "player": case undefined: const uuid = await getUuid(value) if (!uuid) { return (

Player not found

) } guild = await getGuild(uuid.id, type) component = (

{`${uuid.name} is not in a guild or has not logged on to hypixel`}

) break } if (!guild) return component return (

{guild.name}

) }