/* eslint-disable no-mixed-spaces-and-tabs */ import { NextPage, NextPageContext } from 'next' import dynamic from 'next/dynamic' import { useRouter } from 'next/router' import { useState } from 'react' import useClipboard from 'react-use-clipboard' import { get } from '@utils/Query' import { cleanObject, parseCookie, redirectTo } from '@utils/Tools' import { getToken } from '@utils/Csrf' import Fetch from '@utils/Fetch' import { ParsedUrlQuery } from 'querystring' import { Bot, BotSpec, ResponseProps, Theme, WebhookStatus } from '@types' import NotFound from 'pages/404' import Link from 'next/link' import { Form, Formik } from 'formik' import { DeveloperBot, DeveloperBotSchema } from '@utils/Yup' import Input from '@components/Form/Input' import Tooltip from '@components/Tooltip' const Button = dynamic(() => import('@components/Button')) const Divider = dynamic(() => import('@components/Divider')) const DeveloperLayout = dynamic(() => import('@components/DeveloperLayout')) const DiscordAvatar = dynamic(() => import('@components/DiscordAvatar')) const Message = dynamic(() => import('@components/Message')) const Modal = dynamic(() => import('@components/Modal')) const StatisticsCard = dynamic(() => import('@components/StatisticsCard')) const Select = dynamic(() => import('@components/Form/Select')) const DateSelect = dynamic(() => import('@components/Form/DateSelect')) const BotApplication: NextPage = ({ user, spec, bot, theme, csrfToken }) => { const router = useRouter() const [ data, setData ] = useState>(null) const [ modalOpened, setModalOpen ] = useState(false) const [ showToken, setShowToken ] = useState(false) const [ range, setRange ] = useState('day') const [ startDate, setStartDate ] = useState(new Date()) const [ endDate, setEndDate ] = useState(new Date()) const [ tokenCopied, setTokenCopied ] = useClipboard(spec?.token, { successDuration: 1000 }) const availableRanges = [ { label: '일간', value: 'day' }, { label: '주간', value: 'week' }, { label: '월간', value: 'month' }, ] async function updateApplication(d: DeveloperBot) { const res = await Fetch(`/applications/bots/${bot.id}`, { method: 'PATCH', body: JSON.stringify(cleanObject(d)) }) setData(res) } async function resetToken() { const res = await Fetch<{ token: string }>(`/applications/bots/${bot.id}/reset`, { method: 'POST', body: JSON.stringify({ token: spec.token, _csrf: csrfToken }) }) setData(res) return res } if(!user) { localStorage.redirectTo = window.location.href redirectTo(router, 'login') return } if(!bot || !spec) return return 돌아가기

봇 설정

한국 디스코드 리스트 API에 사용할 정보를 이곳에서 설정하실 수 있습니다.

{ !data ? '' : data.code === 200 ?

수정 성공!

봇 정보를 저장했습니다.

:

{data.message}

    { data.errors?.map((el, i)=>
  • {el}
  • ) }
}

{bot.name}#{bot.tag}

봇 토큰

{showToken ? spec.token : '******************'}
setModalOpen(false)} dark={theme === 'dark'} header='정말로 토큰을 재발급하시겠습니까?'>

기존에 사용중이시던 토큰은 더 이상 사용하실 수 없습니다

{({ errors, touched }) => (

웹훅 URL {(!data || data.code !== 200) && spec.webhookStatus === WebhookStatus.Disabled && ( ⚠️ )}

웹훅을 이용하여 다양한 한국 디스코드 리스트의 봇에 발생하는 이벤트를 받아볼 수 있습니다.
웹훅 링크가 유효하지 않을 경우 웹훅이 중지되며, 다시 저장할 경우 다시 활성화됩니다.
웹훅에 대한 자세한 내용은 개발자 문서에서 확인하실 수 있습니다.

{touched.webhookURL && errors.webhookURL ?
{errors.webhookURL}
: null}
)}

봇 통계