import { NextPage, NextPageContext } from 'next' import { useRef, useState } from 'react' import { useRouter } from 'next/router' import dynamic from 'next/dynamic' import Link from 'next/link' import { NextSeo } from 'next-seo' import { Form, Formik } from 'formik' import HCaptcha from '@hcaptcha/react-hcaptcha' import { get } from '@utils/Query' import { cleanObject, getRandom, parseCookie, redirectTo } from '@utils/Tools' import { AddServerSubmitSchema, AddServerSubmit } from '@utils/Yup' import { serverCategories, ServerIntroList } from '@utils/Constants' import { getToken } from '@utils/Csrf' import Fetch from '@utils/Fetch' import { ResponseProps, Server, ServerData, Theme, User } from '@types' import Forbidden from '@components/Forbidden' const CheckBox = dynamic(() => import('@components/Form/CheckBox')) const Label = dynamic(() => import('@components/Form/Label')) const Login = dynamic(() => import('@components/Login')) const Input = dynamic(() => import('@components/Form/Input')) const Divider = dynamic(() => import('@components/Divider')) const TextArea = dynamic(() => import('@components/Form/TextArea')) const Segment = dynamic(() => import('@components/Segment')) const Markdown = dynamic(() => import('@components/Markdown')) const Selects = dynamic(() => import('@components/Form/Selects')) const Button = dynamic(() => import('@components/Button')) const Container = dynamic(() => import('@components/Container')) const Message = dynamic(() => import('@components/Message')) const Captcha = dynamic(() => import('@components/Captcha')) const AddServer: NextPage = ({ logged, user, csrfToken, server, serverData, theme, }) => { const [data, setData] = useState>(null) const [captcha, setCaptcha] = useState(false) const [touchedSumbit, setTouched] = useState(false) const captchaRef = useRef() const router = useRouter() const initialValues: AddServerSubmit = { agree: false, invite: '', intro: '', desc: ` # 서버 이름 자신의 서버를 자유롭게 표현해보세요! ## ✏️ 소개 무엇이 목적인 서버인가요? 어떤 주제인가요? ## 💬 특징 - 어떤 - 특징이 - 있나요?`, category: [], _csrf: csrfToken, _captcha: 'captcha', } function toLogin() { localStorage.redirectTo = window.location.href redirectTo(router, 'login') } async function submitServer(id: string, value: AddServerSubmit, token: string) { const res = await Fetch(`/servers/${id}`, { method: 'POST', body: JSON.stringify(cleanObject({ ...value, _captcha: token })), }) setData(res) } if (!logged) return ( ) if (data?.data && data.code == 200) { setTimeout(() => redirectTo(router, `/servers/${router.query.id}`), 1_000) } return (

새로운 서버 추가하기

안녕하세요,{' '} {user.username}#{user.tag} 님!{' '} 본인이 아니신가요?
{data ? ( data.code == 200 && data.data ? (

서버 등록 성공!

서버를 성공적으로 등록했습니다! 서버 페이지로 리다이렉트 됩니다!

) : (

{data.message || '오류가 발생했습니다.'}

    {data.errors?.map((el, n) =>
  • {el}
  • )}
) ) : ( <> )} {server ? (

이미 등록된 서버입니다.

) : !serverData ? (

서버에 봇이 초대되지 않았습니다.

서버를 등록하시려면 먼저 봇을 초대해야합니다.

서버에 이미 봇이 초대되었다면 반영까지 최대 1분이 소요될 수 있습니다.

) : serverData.admins.includes(user.id) || serverData.owner.includes(user.id) ? ( setCaptcha(true)} > {({ errors, touched, values, isValid, setFieldTouched, setFieldValue }) => (

등록하시기 전에 다음 사항을 확인해 주세요!

  • 디스코드 서버 에 참여를 권장드립니다.
  • 서버가{' '} 가이드라인 을 지키고 있나요?
  • 서버에서 관리자 권한을 갖고 있는 모든 분은 삭제를 제외한 모든 행동을 할 수 있습니다.
  • 서버를 등록한 이후 봇을 추방하시게 되면 서버 정보가 웹에 업데이트 되지 않습니다.
  • 또한, 서버를 등록하게 되면 작성하신 모든 정보와 서버에서 수집된 정보는 웹과 API에 공개됩니다.