import { getTranslations } from "next-intl/server"; import { ContentCard } from "@/components/public/ui"; import { auth } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; export const dynamic = "force-dynamic"; const FAR_FUTURE = Math.floor(Date.now() / 1000) + 50 * 365 * 24 * 3600; export default async function BannedPage() { const t = await getTranslations("pages.banned"); const session = await auth(); let reason = ""; let expire = 0; if (session?.user?.id) { try { const now = Math.floor(Date.now() / 1000); const ban = await prisma.ban.findFirst({ where: { userId: Number(session.user.id), banExpire: { gt: now } }, orderBy: { banExpire: "desc" }, select: { banReason: true, banExpire: true }, }); if (ban) { reason = ban.banReason; expire = ban.banExpire; } } catch { // show generic message } } const expiryText = expire === 0 ? "" : expire > FAR_FUTURE ? t("permanent") : t("expires", { date: new Date(expire * 1000) .toISOString() .slice(0, 16) .replace("T", " "), }); return (

{t("body")}

{reason ? (

{t("reasonLabel")} {reason}

) : null} {expiryText ?

{expiryText}

: null}

{t("contactStaff")}

); }