import { NextPage, NextPageContext } from 'next' import { 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 { ParsedUrlQuery } from 'querystring' import { getJosaPicker } from 'josa' import { get } from '@utils/Query' import { checkUserFlag, cleanObject, makeBotURL, parseCookie, redirectTo } from '@utils/Tools' import { ManageBot, ManageBotSchema } from '@utils/Yup' import { categories, library } from '@utils/Constants' import { Bot, Theme, User } from '@types' import { getToken } from '@utils/Csrf' import Fetch from '@utils/Fetch' import NotFound from 'pages/404' import Forbidden from '@components/Forbidden' const Label = dynamic(() => import('@components/Form/Label')) const Input = dynamic(() => import('@components/Form/Input')) const Divider = dynamic(() => import('@components/Divider')) const Redirect = dynamic(() => import('@components/Redirect')) const TextArea = dynamic(() => import('@components/Form/TextArea')) const Segment = dynamic(() => import('@components/Segment')) const Markdown = dynamic(() => import('@components/Markdown')) const Select = dynamic(() => import('@components/Form/Select')) const Selects = dynamic(() => import('@components/Form/Selects')) const Button = dynamic(() => import('@components/Button')) const Container = dynamic(() => import('@components/Container')) const DiscordAvatar = dynamic(() => import('@components/DiscordAvatar')) const Tag = dynamic(() => import('@components/Tag')) const Message = dynamic(() => import('@components/Message')) const Modal = dynamic(() => import('@components/Modal')) const Captcha = dynamic(() => import('@components/Captcha')) const Login = dynamic(() => import('@components/Login')) const ManageBotPage:NextPage = ({ bot, user, csrfToken, theme }) => { const [ data, setData ] = useState(null) const [ adminModal, setAdminModal ] = useState(false) const [ transferModal, setTransferModal ] = useState(false) const [ deleteModal, setDeleteModal ] = useState(false) const router = useRouter() async function submitBot(value: ManageBot) { const res = await Fetch(`/bots/${bot.id}`, { method: 'PATCH', body: JSON.stringify(cleanObject(value)) }) setData(res) } async function getUser(id: string) { const u = await Fetch(`/users/${encodeURIComponent(id)}`) if(u.code === 200 && u.data) return u.data else return null } if(!bot) return if(!user) return if(!(bot.owners as User[]).find(el => el.id === user.id) && !checkUserFlag(user.flags, 'staff')) return return

봇 관리하기

{({ errors, touched, values, setFieldTouched, setFieldValue }) => (

{bot.name}#{bot.tag}

ID: {bot.id}

{ data ? data.code === 200 ?

정보를 저장했습니다.

반영까지는 시간이 조금 걸릴 수 있습니다!

:

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

    {data.errors?.map((el, n) =>
  • {el}
  • )}
: '' } { values.category.includes('빗금 명령어') &&

해당 봇은 빗금 명령어(Slash Command) 카테고리가 선택되었습니다.

초대링크는 빗금 명령어 권한을 부여하지 않은 일반 봇 초대링크로 자동 생성됩니다. 따라서 빗금 명령어 권한을 포함한 초대링크를 직접 설정해주세요.

}