feat: added contents

This commit is contained in:
원더 2021-01-08 12:14:24 +09:00
parent 38902f92fe
commit cef3a73c2c

View File

@ -1,5 +1,4 @@
import { NextPage, NextPageContext } from 'next' import { NextPage, NextPageContext } from 'next'
import Head from 'next/head'
import { SnowflakeUtil } from 'discord.js' import { SnowflakeUtil } from 'discord.js'
import Day from '../../utils/Day' import Day from '../../utils/Day'
import { ParsedUrlQuery } from 'querystring' import { ParsedUrlQuery } from 'querystring'
@ -7,29 +6,46 @@ import { ParsedUrlQuery } from 'querystring'
import Container from '../../components/Container' import Container from '../../components/Container'
import DiscordImage from '../../components/DiscordImage' import DiscordImage from '../../components/DiscordImage'
import Divider from '../../components/Divider' import Divider from '../../components/Divider'
import Label from '../../components/Labal' import Tag from '../../components/Tag'
import Owner from '../../components/Owner' import Owner from '../../components/Owner'
import Segment from '../../components/Segment' import Segment from '../../components/Segment'
import { Bot, User } from '../../types' import { Bot, User } from '../../types'
import Fetch from '../../utils/Fetch'
import NotFound from '../404' import NotFound from '../404'
import SEO from '../../components/SEO' import SEO from '../../components/SEO'
import LongButton from '../../components/LongButton'
import { Status } from '../../utils/Constants'
import { Fetch, formatNumber } from '../../utils'
import Advertisement from '../../components/Advertisement'
const Bots:NextPage<BotsProps> = ({ data, date }) => { const Bots:NextPage<BotsProps> = ({ data, date, votes}) => {
console.log(data) console.log(data)
if(!data.id) return <NotFound /> if(!data.id) return <NotFound />
return <Container paddingTop className='py-10'> return <Container paddingTop className='py-10'>
<SEO title={data.name} description={data.intro} image={data.avatar ? `https://cdn.discordapp.com/avatars/${data.id}/${data.avatar}.png?size=1024` : `https://cdn.discordapp.com/embed/avatars/${Number(data.tag) % 5}.png?size=1024`} /> <SEO title={data.name} description={data.intro} image={data.avatar ? `https://cdn.discordapp.com/avatars/${data.id}/${data.avatar}.png?size=1024` : `https://cdn.discordapp.com/embed/avatars/${Number(data.tag) % 5}.png?size=1024`} />
<div className='lg:flex'> <div className='lg:flex'>
<div className='w-full lg:w-1/3 text-center'> <div className='w-full lg:w-1/4 text-center'>
<DiscordImage userID={data.id} avatarHash={data.avatar} tag={data.tag} className='w-full'/> <DiscordImage userID={data.id} avatarHash={data.avatar} tag={data.tag} className='w-full'/>
</div> </div>
<div className='py-12 px-5 w-full text-center lg:text-left flex-grow'> <div className='py-12 px-5 w-full text-center lg:text-left flex-grow lg:w-5/12'>
<div className='flex'> <div>
<h1 className='text-4xl font-bold mb-2'>{data.name} {data.trusted && <span className='text-koreanbots-blue text-3xl'><i className='fas fa-award' /></span>}</h1> <Tag circular text={(<><i className={`fas fa-circle text-${Status[data.status]?.color}`}/> {Status[data.status]?.text}</>)}/>
<h1 className='text-4xl font-bold mb-2 mt-3'>{data.name} {data.trusted && <span className='text-koreanbots-blue text-3xl'><i className='fas fa-award' /></span>}</h1>
</div> </div>
<p className='text-base text-gray-800 dark:text-gray-300'>{data.intro}</p> <p className='text-base text-gray-800 dark:text-gray-300'>{data.intro}</p>
</div> </div>
<div className='w-full lg:w-1/4'>
<LongButton href={data.url || `https://discordapp.com/oauth2/authorize?client_id=${data.id}&scope=bot&permissions=0`}>
<h4 className="whitespace-nowrap"><i className="fas fa-user-plus" /> </h4>
</LongButton>
<LongButton>
<h4><i className='far fa-heart text-pink-600' /> </h4>
<span className='text-sm bg-little-white-hover dark:bg-very-black text-black dark:text-gray-400 px-2 py-1 rounded-lg ml-1 text-center'>{votes}</span>
</LongButton>
</div>
</div> </div>
<Divider className='px-5' /> <Divider className='px-5' />
<div className='lg:flex lg:flex-row-reverse'> <div className='lg:flex lg:flex-row-reverse'>
@ -47,13 +63,14 @@ const Bots:NextPage<BotsProps> = ({ data, date }) => {
</div> </div>
<h2 className='3xl font-bold mt-2 mb-2'></h2> <h2 className='3xl font-bold mt-2 mb-2'></h2>
<div className='flex flex-wrap'> <div className='flex flex-wrap'>
{ data.category.map(el=> <Label key={el} text={el} href={`/categories/${el}`} /> ) } { data.category.map(el=> <Tag key={el} text={el} href={`/categories/${el}`} /> ) }
</div> </div>
<h2 className='3xl font-bold mt-2 mb-2'></h2> <h2 className='3xl font-bold mt-2 mb-2'></h2>
{ (data.owners as User[]).map(el=> <Owner key={el.id} id={el.id} tag={el.tag} avatarHash={el.avatar} username={el.username} /> ) } { (data.owners as User[]).map(el=> <Owner key={el.id} id={el.id} tag={el.tag} avatarHash={el.avatar} username={el.username} /> ) }
<Advertisement />
</div> </div>
<div className='markdown-body w-full lg:w-3/4 lg:pr-5 pt-10'> <div className='markdown-body w-full lg:w-3/4 lg:pr-5 pt-10'>
<Advertisement />
<Segment> <Segment>
<h1> .</h1> <h1> .</h1>
<h2> </h2> <h2> </h2>
@ -79,6 +96,7 @@ const Bots:NextPage<BotsProps> = ({ data, date }) => {
<li>second</li> <li>second</li>
</ul> </ul>
</Segment> </Segment>
<Advertisement />
</div> </div>
</div> </div>
@ -87,7 +105,7 @@ const Bots:NextPage<BotsProps> = ({ data, date }) => {
export const getServerSideProps = async (ctx: Context) => { export const getServerSideProps = async (ctx: Context) => {
const data = await Fetch.bot.load(ctx.query.id) const data = await Fetch.bot.load(ctx.query.id)
return { props: { data, date: SnowflakeUtil.deconstruct(data.id).date.toJSON() } } return { props: { data, date: SnowflakeUtil.deconstruct(data.id ?? '0').date.toJSON(), votes: formatNumber(data.votes ?? 0, 3) } }
} }
export default Bots export default Bots
@ -95,6 +113,7 @@ export default Bots
interface BotsProps { interface BotsProps {
data: Bot data: Bot
date: Date date: Date
votes: string
} }
interface Context extends NextPageContext { interface Context extends NextPageContext {
query: Query query: Query