import { NextPage, NextPageContext } from 'next' import dynamic from 'next/dynamic' import Link from 'next/link' import { NextSeo } from 'next-seo' import { get } from '@utils/Query' import { BotSubmissionDenyReasonPresetsName, git } from '@utils/Constants' import Day from '@utils/Day' import { SubmittedBot, User } from '@types' import useCopyClipboard from 'react-use-clipboard' import { ParsedUrlQuery } from 'querystring' import NotFound from 'pages/404' const Container = dynamic(() => import('@components/Container')) const Divider = dynamic(() => import('@components/Divider')) const LongButton = dynamic(() => import('@components/LongButton')) const Tag = dynamic(() => import('@components/Tag')) const Advertisement = dynamic(() => import('@components/Advertisement')) const Segment = dynamic(() => import('@components/Segment')) const Markdown = dynamic(() => import ('@components/Markdown')) const Owner = dynamic(() => import('@components/Owner')) const Message = dynamic(() => import('@components/Message')) const PendingBot: NextPage = ({ data }) => { const [ isCopied, setCopied ] = useCopyClipboard(data?.desc, { successDuration: 1000 }) if(!data) return return
{ data.state === 0 ?

승인 대기중

해당 봇은 아직 승인 대기 상태입니다.

: data.state === 1 ?

승인됨

신청하신 해당 봇이 승인되었습니다!

봇 페이지

:

거부됨

아쉽게도 신청하신 해당 봇은 거부되었습니다.

{ data.reason && <>

사유: {BotSubmissionDenyReasonPresetsName[data.reason] || data.reason}

{DenyPresetsArticle[data.reason]}
}
{data.strikes < 3 ? (

앞으로 {3 - data.strikes}번의 심사 기회가 남았습니다. 심사 기회를 모두 소진하시면 동일한 봇으로의 심사가 제한됩니다.
'프라이빗 봇', '봇 오프라인', '공식 디스코드 서버 미참여'로 거부된 경우 심사 기회가 차감되지 않습니다.

) : (

더 이상 해당 봇으로 심사를 신청하실 수 없습니다.

)}
}

{data.intro}

초대하기

{ isCopied ? <> 복사됨 : <> 설명 마크다운 복사하기}

정보

ID
{data.id}
등록일
{Day(data.date * 1000).format('LLL')}
접두사
{data.prefix}

카테고리

{data.category.map(el => ( ))}

제작자

{(data.owners as User[]).map(el => ( ))}
} export const getServerSideProps = async (ctx: Context) => { const data = await get.botSubmit.load(JSON.stringify(ctx.query)) return { props: { data: data ? { ...data, strikes: await get.botSubmitStrikes(data.id) } : null } } } const DenyPresetsArticle = { MISSING_VERIFY: <>

개발자 확인 불가로 거부되셨다면 본인이 봇의 소유자라는 것을 증명할 수 없다는 뜻입니다.

본인이 봇 소유자임을 증명하려면, 개발자의 태그(username#0000 형식)가 반드시 다음 명령어중에 포함되어야합니다.

  • 도움 명령어: 도움, 도움말, 명령어, help, commands
  • [접두사]hellothisisverification 응답: 유저#태그(아이디)

, OFFLINE: <>

봇 오프라인으로 거부되셨다면 심사 당시에 봇이 오프라인으로 명령어가 응답하지 않았다는 뜻입니다.

봇이 24시간 호스팅 되지 않는다면, 아쉽게도 저희가 심사 시간을 맞춰드릴 수 없기에 심사 시간과 봇의 온라인 시간이 맞지 않는다면 심사를 진행할 수 없습니다.

, INVALID_CATEGORY:

한 개 이상의 올바르지 않은 카테고리가 포함되어 있습니다. 반드시 봇에 해당되는 카테고리만 선택해주세요.
카테고리에 대한 자세한 설명은 여기에서 확인하실 수 있습니다.

, PRIVATE:

봇을 초대할 수 없어, 심사를 진행할 수 없습니다. 다음 항목을 확인해주세요.

  • 봇이 공개 봇인가요?
  • 봇이 아직 인증을 받지 못하였는데 100서버에 도달하여 초대가 불가한가요?
  • "REQUIRES OAUTH2 CODE GRANT" 옵션을 사용하고 있나요?
  • 위 항목들을 해결하신 뒤에 다시 신청해주세요.

, LICENSE_VIOLATION:

한 건 이상의 오픈소스 라이선스 위반사항이 있습니다. 사용하신 오픈소스를 라이선스에 맞추어, 사이트 내 봇 설명과 봇 명령어 안에 기재해주세요.

, ABSENT_AT_DISCORD:

반드시 공식 디스코드에 참가해주세요.

} interface PendingBotProps { data: SubmittedBot & {strikes: number | null} } interface Context extends NextPageContext { query: URLQuery } interface URLQuery extends ParsedUrlQuery { id: string date: string } export default PendingBot