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.

delete pronouns page

Luna 2efcbf86 6b85ee7b

-415
-22
app/(home)/bot/pronouns/genders/page.tsx
··· 1 - import type { Metadata } from "next"; 2 - 3 - import type { PronounsResponse } from "@/typings"; 4 - import { getCanonicalUrl } from "@/utils/urls"; 5 - 6 - import List from "../list.component"; 7 - 8 - export const generateMetadata = (): Metadata => { 9 - const url = getCanonicalUrl("bot", "pronouns", "genders"); 10 - 11 - return { 12 - alternates: { 13 - canonical: url 14 - } 15 - }; 16 - }; 17 - 18 - export default async function Home() { 19 - const genders = await fetch("https://prns-api.waya.one/genders", { next: { revalidate: 60 * 60 } }).then((res) => res.json()) as PronounsResponse; 20 - 21 - return <List res={genders} type="Genders" />; 22 - }
-183
app/(home)/bot/pronouns/layout.tsx
··· 1 - import type { Metadata } from "next"; 2 - import { Montserrat, Patrick_Hand } from "next/font/google"; 3 - import Image from "next/image"; 4 - import Link from "next/link"; 5 - import { HiHome, HiUserAdd } from "react-icons/hi"; 6 - 7 - import Comment from "@/components/comment"; 8 - import ImageGrid from "@/components/image-grid"; 9 - import { Button } from "@/components/ui/button"; 10 - import { defaultFetchOptions } from "@/lib/api"; 11 - import ArrowPic from "@/public/icons/arroww.webp"; 12 - import type { ApiV1TopguildsGetResponse } from "@/typings"; 13 - import { cn } from "@/utils/cn"; 14 - import { getBaseUrl, getCanonicalUrl } from "@/utils/urls"; 15 - 16 - const montserrat = Montserrat({ subsets: ["latin"] }); 17 - const handwritten = Patrick_Hand({ subsets: ["latin"], weight: "400" }); 18 - 19 - export const revalidate = 3600; 20 - 21 - export const generateMetadata = (): Metadata => { 22 - 23 - const title = "Pronouns: Describe yourself in Discord"; 24 - const description = "Let your community describe themself with a wide variety of supported Pronouns, Sexualities and Genders."; 25 - const url = getCanonicalUrl("bot", "pronouns"); 26 - 27 - return { 28 - title, 29 - description, 30 - alternates: { 31 - canonical: url 32 - }, 33 - openGraph: { 34 - title, 35 - description, 36 - type: "website", 37 - url, 38 - images: `${getBaseUrl()}/pronouns-bot.webp` 39 - }, 40 - twitter: { 41 - card: "summary", 42 - site: "wamellow.com", 43 - title, 44 - description, 45 - images: `${getBaseUrl()}/pronouns-bot.webp` 46 - } 47 - }; 48 - }; 49 - 50 - export default async function RootLayout({ 51 - children 52 - }: { 53 - children: React.ReactNode; 54 - }) { 55 - const topGuilds = await fetch(`${process.env.NEXT_PUBLIC_API}/top-guilds`, defaultFetchOptions) 56 - .then((res) => res.json()) 57 - .catch(() => null) as ApiV1TopguildsGetResponse[] | null; 58 - 59 - return (<> 60 - <div className="lg:text-7xl text-5xl flex font-semibold md:mb-6 mb-4 dark:text-neutral-100 text-neutral-900 break-words w-full"> 61 - <h1 className={montserrat.className}> 62 - <span className="bg-gradient-to-r from-indigo-400 to-pink-400 bg-clip-text text-transparent h-20 break-keep">Pronouns</span> 63 - {" in "} 64 - <span className="underline decoration-blurple break-keep">discord</span> 65 - </h1> 66 - </div> 67 - 68 - { 69 - topGuilds && 70 - <ImageGrid images={topGuilds 71 - .sort((a, b) => b.memberCount - a.memberCount) 72 - .map((guild) => ({ 73 - id: guild.id, 74 - url: guild.icon || "/discord.webp", 75 - link: getCanonicalUrl("leaderboard", guild.id) 76 - }))} 77 - /> 78 - } 79 - 80 - <div className="md:text-xl text-lg lg:flex w-full mt-4"> 81 - <div className="font-medium w-full grid grid-cols-2 md:flex flex-wrap h-min gap-2"> 82 - <Button 83 - asChild 84 - className="w-1/2 lg:w-fit text-lg" 85 - > 86 - <Link 87 - prefetch={false} 88 - href="/bot/pronouns" 89 - > 90 - <HiHome /> 91 - </Link> 92 - </Button> 93 - <Button 94 - asChild 95 - className="w-1/2 lg:w-fit text-lg" 96 - > 97 - <Link 98 - prefetch={false} 99 - href="/bot/pronouns/pronouns" 100 - > 101 - Pronouns 102 - </Link> 103 - </Button> 104 - <Button 105 - asChild 106 - className="w-1/2 lg:w-fit text-lg" 107 - > 108 - <Link 109 - prefetch={false} 110 - href="/bot/pronouns/genders" 111 - > 112 - Genders 113 - </Link> 114 - </Button> 115 - <Button 116 - asChild 117 - className="w-1/2 lg:w-fit text-lg" 118 - > 119 - <Link 120 - prefetch={false} 121 - href="/bot/pronouns/sexualities" 122 - > 123 - Sexualities 124 - </Link> 125 - </Button> 126 - </div> 127 - 128 - <div className="flex flex-col min-w-full lg:min-w-[420px]"> 129 - 130 - <div className="lg:ml-auto flex gap-2 text-xl font-medium mt-4 lg:mt-0"> 131 - <Button 132 - asChild 133 - className="w-1/2 lg:w-fit text-lg font-medium" 134 - variant="secondary" 135 - > 136 - <Link 137 - prefetch={false} 138 - href="https://discord.com/oauth2/authorize?client_id=912003493777268767&permissions=8&scope=bot%20applications.commands" 139 - > 140 - <HiUserAdd /> 141 - <span className="block sm:hidden">Invite</span> 142 - <span className="hidden sm:block">Invite Pronouns</span> 143 - </Link> 144 - </Button> 145 - <Button 146 - asChild 147 - className="w-1/2 lg:w-fit text-lg" 148 - > 149 - <Link 150 - prefetch={false} 151 - href="/support" 152 - > 153 - <HiUserAdd /> 154 - <span className="block sm:hidden">Support</span> 155 - <span className="hidden sm:block">Join Support</span> 156 - </Link> 157 - </Button> 158 - </div> 159 - 160 - 161 - <span className={cn(handwritten.className, "lg:ml-auto flex gap-2 text-neutral-500 font-mediumr mt-3 opacity-80 pl-20 lg:pr-20 rotate-2")}> 162 - <Image src={ArrowPic} width={24} height={24} alt="arrow up" className="h-5 w-5 relative top-px" draggable={false} /> 163 - Get started here in seconds 164 - </span> 165 - 166 - </div> 167 - 168 - </div> 169 - 170 - 171 - <div className="lg:my-10 my-8 w-full"> 172 - {children} 173 - </div> 174 - 175 - <Comment 176 - username="@deleted user" 177 - bio="Pronouns user" 178 - avatar="/discord.webp" 179 - content="I have a lot of friends who have different preferred pronouns and identities and I think it's super sweet y'all have the feature that they can change their pronouns anytime so I put your bot in my servers and a friend may put it in theirs too 🥰" 180 - /> 181 - 182 - </>); 183 - }
-55
app/(home)/bot/pronouns/list.component.tsx
··· 1 - import Link from "next/link"; 2 - import { HiAcademicCap } from "react-icons/hi"; 3 - 4 - import Ad from "@/components/ad"; 5 - import type { PronounsResponse } from "@/typings"; 6 - 7 - interface Props { 8 - res: PronounsResponse; 9 - type: string; 10 - } 11 - 12 - export default function List({ res, type }: Props) { 13 - return ( 14 - <div> 15 - <div className="w-full flex items-center justify-between mb-2"> 16 - <span className="text-3xl font-semibold bg-gradient-to-r from-indigo-400 to-pink-400 bg-clip-text text-transparent break-keep">{type}</span> 17 - <span>{res.content.length} avaliable</span> 18 - </div> 19 - 20 - <div className="flex flex-col sm:flex-row w-full gap-4"> 21 - <div className="rounded-md overflow-hidden sm:w-1/2 lg:w-3/4 dark:bg-wamellow bg-wamellow-100 p-2 divide-y divide-wamellow" > 22 - {res.content 23 - .sort((a, b) => a.localeCompare(b)) 24 - ?.map((element, i) => ( 25 - <div key={element} className="flex items-center justify-between py-2 px-3" > 26 - <span>{element}</span> 27 - <span className="italic text-sm">{(i + 1).toString().padStart(2, "0")}</span> 28 - </div> 29 - ))} 30 - </div> 31 - 32 - <div className="sm:w-1/2 lg:w-1/4 flex flex-col gap-2"> 33 - <Ad /> 34 - <Ad 35 - title="Auditional Text" 36 - description="Convert your text into either a MP3 file or let the bot speak the text in your current voice channel and choose from 18 different voices." 37 - url="https://discord.com/oauth2/authorize?client_id=985213199248924722&scope=bot&permissions=3197952" 38 - color="green" 39 - /> 40 - <Ad 41 - title="Textional Voice" 42 - description="Record and transcribe voice channels in real-time for moderators with voice-to-text bot." 43 - url="https://discord.com/oauth2/authorize?client_id=1097907896987160666&scope=bot&permissions=2147486720" 44 - color="red" 45 - /> 46 - <span className="text-neutral-500 flex flex-wrap items-center gap-1"> 47 - All bots are owned by <Link className="hover:underline" href="http://shi.gg">shi.gg</Link> 48 - <HiAcademicCap /> 49 - </span> 50 - </div> 51 - </div> 52 - 53 - </div> 54 - ); 55 - }
-95
app/(home)/bot/pronouns/page.tsx
··· 1 - import { Montserrat } from "next/font/google"; 2 - import Image from "next/image"; 3 - import Link from "next/link"; 4 - import { BsPlus } from "react-icons/bs"; 5 - import { HiCash } from "react-icons/hi"; 6 - 7 - import Box from "@/components/box"; 8 - import DiscordMessage from "@/components/discord/message"; 9 - import { Badge } from "@/components/ui/badge"; 10 - import { Button } from "@/components/ui/button"; 11 - import { cn } from "@/utils/cn"; 12 - 13 - const montserrat = Montserrat({ subsets: ["latin"] }); 14 - 15 - export default function Home() { 16 - 17 - const styles = { 18 - h2: cn(montserrat.className, "lg:text-5xl text-4xl bg-gradient-to-b bg-clip-text text-transparent from-neutral-200 from-40% to-violet-300 font-bold underline decoration-violet-400"), 19 - h3: cn(montserrat.className, "lg:text-2xl text-xl bg-gradient-to-b bg-clip-text text-transparent from-neutral-200 from-40% to-neutral-300 font-semibold") 20 - }; 21 - 22 - const messageProps = (command: string) => { 23 - return { 24 - mode: "DARK" as const, 25 - commandUsed: { 26 - name: command, 27 - username: "@mwlica", 28 - avatar: "/luna.webp", 29 - bot: false 30 - }, 31 - 32 - user: { 33 - username: "Pronouns", 34 - avatar: "/pronouns-bot.webp", 35 - bot: true 36 - } 37 - }; 38 - }; 39 - 40 - return ( 41 - <div> 42 - <h2 className={styles.h2}>It{"'"}s important for us</h2> 43 - <div className="my-8 max-w-md font-medium"> 44 - Support diverse identities openly, fostering a safe space for everyone to be their true selves. 45 - </div> 46 - 47 - <Box className="flex flex-col md:flex-row gap-10 items-center"> 48 - <div className="md:w-1/2"> 49 - <Badge 50 - className="mb-2" 51 - variant="flat" 52 - radius="rounded" 53 - > 54 - <HiCash /> 55 - Everything for free 56 - </Badge> 57 - 58 - <h3 className={styles.h3}>Sexualities, Genders & Pronouns</h3> 59 - 60 - <div className="pt-6"> 61 - Let your community describe themself with a wide variety of supported Pronouns, Sexualities and Genders. 62 - This has become very important in recent years as more and more people finally feel safe to come out publicly as who they really are, and we think this is a great way to express this publicly online. 63 - </div> 64 - 65 - <div className="flex gap-2 mt-6"> 66 - <Button asChild> 67 - <Link 68 - prefetch={false} 69 - href="/support" 70 - target="_blank" 71 - > 72 - <BsPlus /> 73 - Request Additional 74 - </Link> 75 - </Button> 76 - </div> 77 - </div> 78 - 79 - <div className="bg-discord-gray w-full md:w-1/2 px-8 py-4 rounded-lg flex flex-col gap-5"> 80 - {[["pronouns", "@She/They"], ["sexuality", "lesbian"], ["gender", "transwoman"]].map(([type, name]) => 81 - <div className="w-full" key={"prns-" + type + name}> 82 - <DiscordMessage {...messageProps("add " + type)} > 83 - <span className="flex items-center gap-1"> 84 - <Image src="https://cdn.discordapp.com/emojis/949003338186383491.webp?size=44&quality=lossless" height={24} width={24} alt="" /> 85 - You added {name} as your {type}. 86 - </span> 87 - </DiscordMessage> 88 - </div> 89 - )} 90 - </div> 91 - </Box> 92 - 93 - </div> 94 - ); 95 - }
-22
app/(home)/bot/pronouns/pronouns/page.tsx
··· 1 - import type { Metadata } from "next"; 2 - 3 - import type { PronounsResponse } from "@/typings"; 4 - import { getCanonicalUrl } from "@/utils/urls"; 5 - 6 - import List from "../list.component"; 7 - 8 - export const generateMetadata = (): Metadata => { 9 - const url = getCanonicalUrl("bot", "pronouns", "pronouns"); 10 - 11 - return { 12 - alternates: { 13 - canonical: url 14 - } 15 - }; 16 - }; 17 - 18 - export default async function Home() { 19 - const pronouns = await fetch("https://prns-api.waya.one/pronouns", { next: { revalidate: 60 * 60 } }).then((res) => res.json()) as PronounsResponse; 20 - 21 - return <List res={pronouns} type="Pronouns" />; 22 - }
-22
app/(home)/bot/pronouns/sexualities/page.tsx
··· 1 - import type { Metadata } from "next"; 2 - 3 - import type { PronounsResponse } from "@/typings"; 4 - import { getCanonicalUrl } from "@/utils/urls"; 5 - 6 - import List from "../list.component"; 7 - 8 - export const generateMetadata = (): Metadata => { 9 - const url = getCanonicalUrl("bot", "pronouns", "sexualities"); 10 - 11 - return { 12 - alternates: { 13 - canonical: url 14 - } 15 - }; 16 - }; 17 - 18 - export default async function Home() { 19 - const sexualities = await fetch("https://prns-api.waya.one/sexualities", { next: { revalidate: 60 * 60 } }).then((res) => res.json()) as PronounsResponse; 20 - 21 - return <List res={sexualities} type="Sexualities" />; 22 - }
-16
app/(home)/debug/page.tsx
··· 2 2 import { cookies, headers } from "next/headers"; 3 3 import { HiTrash } from "react-icons/hi"; 4 4 5 - import Box from "@/components/box"; 6 5 import { Shiggy } from "@/components/shiggy"; 7 6 import { Button } from "@/components/ui/button"; 8 7 import { getBaseUrl, getCanonicalUrl } from "@/utils/urls"; ··· 51 50 const headerList: { name: string; value: string; }[] = []; 52 51 for (const [key, value] of (await headers()).entries()) { 53 52 headerList.push({ name: key, value }); 54 - } 55 - 56 - if ((await cookies()).get("devTools")?.value !== "true") { 57 - return ( 58 - <Box 59 - className="relative mb-64 mt-12" 60 - small 61 - > 62 - <div> 63 - <h1 className="text-2xl font-medium text-neutral-100">You need to enable dev tools to view this page</h1> 64 - <p>Enable lunar tools in your browser to view this page</p> 65 - </div> 66 - <Shiggy className="absolute right-4 bottom-0 h-52" /> 67 - </Box> 68 - ); 69 53 } 70 54 71 55 async function deleteCookie(formData: FormData) {