mirror of
https://github.com/koreanbots/core.git
synced 2025-12-15 14:10:22 +00:00
style: prettier
This commit is contained in:
parent
73eaf5d21b
commit
7bee44c955
@ -1,12 +1,18 @@
|
||||
const Advertisement = ():JSX.Element => {
|
||||
if(process.env.NODE_ENV === 'production') return <ins className="mb-5 adsbygoogle"
|
||||
style={{ display: 'block' }}
|
||||
data-ad-client="ca-pub-4856582423981759"
|
||||
data-ad-slot="3250141451"
|
||||
data-ad-format="auto"
|
||||
data-adtest="on"
|
||||
data-full-width-responsive="true"></ins>
|
||||
else return <div className='bg-gray-700 text-white text-center w-full py-12 my-5'>Advertisement</div>
|
||||
const Advertisement = (): JSX.Element => {
|
||||
if (process.env.NODE_ENV === 'production')
|
||||
return (
|
||||
<ins
|
||||
className="adsbygoogle mb-5"
|
||||
style={{ display: 'block' }}
|
||||
data-ad-client="ca-pub-4856582423981759"
|
||||
data-ad-slot="3250141451"
|
||||
data-ad-format="auto"
|
||||
data-adtest="on"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
)
|
||||
else
|
||||
return <div className="my-5 py-12 w-full text-center text-white bg-gray-700">Advertisement</div>
|
||||
}
|
||||
|
||||
export default Advertisement
|
||||
export default Advertisement
|
||||
|
||||
@ -1,7 +1,25 @@
|
||||
import NextImage from 'next/image'
|
||||
|
||||
const DiscordImage = (props: { size?: number, userID: string, avatarHash: string, tag: number|string, className?: string }) => {
|
||||
return <NextImage className={props.className} src={props.avatarHash ? `https://cdn.discordapp.com/avatars/${props.userID}/${props.avatarHash}.png?size=1024` : `https://cdn.discordapp.com/embed/avatars/${Number(props.tag) % 5}.png?size=1024`} width={props.size || 256} height={props.size || 256} data-fallback-image='/img/default.png'/>
|
||||
const DiscordImage = (props: {
|
||||
size?: number
|
||||
userID: string
|
||||
avatarHash: string
|
||||
tag: number | string
|
||||
className?: string
|
||||
}) => {
|
||||
return (
|
||||
<NextImage
|
||||
className={props.className}
|
||||
src={
|
||||
props.avatarHash
|
||||
? `https://cdn.discordapp.com/avatars/${props.userID}/${props.avatarHash}.png?size=1024`
|
||||
: `https://cdn.discordapp.com/embed/avatars/${Number(props.tag) % 5}.png?size=1024`
|
||||
}
|
||||
width={props.size || 256}
|
||||
height={props.size || 256}
|
||||
data-fallback-image="/img/default.png"
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
export default DiscordImage
|
||||
|
||||
@ -1,5 +1,13 @@
|
||||
const Divider = ({ className }:{ className?: string }) => {
|
||||
return <div className={`my-2 px-5 ${className || ''}`} style={{ borderTop: '1px solid rgba(34,36,38,.15)', borderBottom: '1px solid hsla(0,0%,100%,.1)' }}/>
|
||||
const Divider = ({ className }: { className?: string }) => {
|
||||
return (
|
||||
<div
|
||||
className={`my-2 px-5 ${className || ''}`}
|
||||
style={{
|
||||
borderTop: '1px solid rgba(34,36,38,.15)',
|
||||
borderBottom: '1px solid hsla(0,0%,100%,.1)',
|
||||
}}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
export default Divider
|
||||
export default Divider
|
||||
|
||||
@ -1,29 +1,38 @@
|
||||
import Container from './Container'
|
||||
import Wave from './Wave'
|
||||
|
||||
const Docs = ({ header, description, subheader, children }:DocsProps):JSX.Element => {
|
||||
return <>
|
||||
<div className='bg-discord-blurple dark:bg-discord-black'>
|
||||
<Container className='pt-20 pb-28' ignoreColor>
|
||||
<h1 className='mt-10 text-4xl text-gray-100 font-bold sm:text-left text-center'>{header}</h1>
|
||||
<h2 className='mt-5 text-2xl text-gray-200 font-medium sm:text-left text-center'>{description}</h2>
|
||||
<h2 className='mt-5 text-2xl text-gray-200 font-medium sm:text-left text-center'>{subheader}</h2>
|
||||
</Container>
|
||||
</div>
|
||||
<Wave color='currentColor' className='text-discord-blurple dark:text-discord-black bg-white dark:bg-discord-dark'/>
|
||||
<Container>
|
||||
<div>
|
||||
{children}
|
||||
const Docs = ({ header, description, subheader, children }: DocsProps): JSX.Element => {
|
||||
return (
|
||||
<>
|
||||
<div className="dark:bg-discord-black bg-discord-blurple">
|
||||
<Container className="pb-28 pt-20" ignoreColor>
|
||||
<h1 className="mt-10 text-center text-gray-100 text-4xl font-bold sm:text-left">
|
||||
{header}
|
||||
</h1>
|
||||
<h2 className="mt-5 text-center text-gray-200 text-2xl font-medium sm:text-left">
|
||||
{description}
|
||||
</h2>
|
||||
<h2 className="mt-5 text-center text-gray-200 text-2xl font-medium sm:text-left">
|
||||
{subheader}
|
||||
</h2>
|
||||
</Container>
|
||||
</div>
|
||||
</Container>
|
||||
</>
|
||||
<Wave
|
||||
color="currentColor"
|
||||
className="dark:text-discord-black text-discord-blurple dark:bg-discord-dark bg-white"
|
||||
/>
|
||||
<Container>
|
||||
<div>{children}</div>
|
||||
</Container>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default Docs
|
||||
|
||||
interface DocsProps {
|
||||
header: string
|
||||
description?: string
|
||||
subheader?: string
|
||||
children: JSX.Element | JSX.Element[]
|
||||
}
|
||||
header: string
|
||||
description?: string
|
||||
subheader?: string
|
||||
children: JSX.Element | JSX.Element[]
|
||||
}
|
||||
|
||||
@ -2,73 +2,75 @@ import Link from 'next/link'
|
||||
import Container from './Container'
|
||||
import Wave from './Wave'
|
||||
|
||||
const Footer = ():JSX.Element => {
|
||||
return <div className='releative'>
|
||||
<Wave color='currentColor' className='text-white dark:text-discord-dark bg-discord-black'/>
|
||||
<div className='bottom-0 bg-discord-black text-white'>
|
||||
<Container className='w-11/12 lg:w-3/5 pt-10 lg:pt-0 pb-20 lg:flex' ignoreColor>
|
||||
<div className='w-full lg:flex-grow'>
|
||||
<h1 className='text-koreanbots-blue text-3xl font-extrabold'>국내봇을 한 곳에서.</h1>
|
||||
<span className='text-base'>2020 Koreanbots, All rights reserved.</span>
|
||||
<div className='text-2xl'>
|
||||
<Link href='/discord'>
|
||||
<a className='mr-2'>
|
||||
<i className='fab fa-discord' />
|
||||
const Footer = (): JSX.Element => {
|
||||
return (
|
||||
<div className="releative">
|
||||
<Wave color="currentColor" className="dark:text-discord-dark text-white bg-discord-black" />
|
||||
<div className="bottom-0 text-white bg-discord-black">
|
||||
<Container className="pb-20 pt-10 w-11/12 lg:flex lg:pt-0 lg:w-3/5" ignoreColor>
|
||||
<div className="w-full lg:flex-grow">
|
||||
<h1 className="text-koreanbots-blue text-3xl font-extrabold">국내봇을 한 곳에서.</h1>
|
||||
<span className="text-base">2020 Koreanbots, All rights reserved.</span>
|
||||
<div className="text-2xl">
|
||||
<Link href="/discord">
|
||||
<a className="mr-2">
|
||||
<i className="fab fa-discord" />
|
||||
</a>
|
||||
</Link>
|
||||
<a href="https://github.com/koreanbots" className="mr-2">
|
||||
<i className="fab fa-github" />
|
||||
</a>
|
||||
</Link>
|
||||
<a href='https://github.com/koreanbots' className='mr-2'>
|
||||
<i className='fab fa-github' />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className='flex-col w-full lg:w-1/3 mb-2'>
|
||||
<h2 className='text-base text-koreanbots-blue font-bold'>한국 디스코드봇 리스트</h2>
|
||||
<ul className='text-sm'>
|
||||
<li>
|
||||
<Link href='/about'>
|
||||
<a className='hover:text-gray-300'>소개</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href='/api'>
|
||||
<a className='hover:text-gray-300'>API</a>
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className='flex-col w-full lg:w-1/5 mb-2'>
|
||||
<h2 className='text-base text-koreanbots-blue font-bold'>커뮤니티</h2>
|
||||
<ul className='text-sm'>
|
||||
<li>
|
||||
<Link href='/partners'>
|
||||
<a className='hover:text-gray-300'>파트너</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href='/verification'>
|
||||
<a className='hover:text-gray-300'>인증</a>
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className='flex-col w-full lg:w-1/5 mb-2'>
|
||||
<h2 className='text-base text-koreanbots-blue font-bold'>약관</h2>
|
||||
<ul className='text-sm'>
|
||||
<li>
|
||||
<Link href='/privacy'>
|
||||
<a className='hover:text-gray-300'>개인정보취급방침</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href='/guidelines'>
|
||||
<a className='hover:text-gray-300'>가이드라인</a>
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</Container>
|
||||
<div className="flex-col mb-2 w-full lg:w-1/3">
|
||||
<h2 className="text-koreanbots-blue text-base font-bold">한국 디스코드봇 리스트</h2>
|
||||
<ul className="text-sm">
|
||||
<li>
|
||||
<Link href="/about">
|
||||
<a className="hover:text-gray-300">소개</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href="/api">
|
||||
<a className="hover:text-gray-300">API</a>
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className="flex-col mb-2 w-full lg:w-1/5">
|
||||
<h2 className="text-koreanbots-blue text-base font-bold">커뮤니티</h2>
|
||||
<ul className="text-sm">
|
||||
<li>
|
||||
<Link href="/partners">
|
||||
<a className="hover:text-gray-300">파트너</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href="/verification">
|
||||
<a className="hover:text-gray-300">인증</a>
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className="flex-col mb-2 w-full lg:w-1/5">
|
||||
<h2 className="text-koreanbots-blue text-base font-bold">약관</h2>
|
||||
<ul className="text-sm">
|
||||
<li>
|
||||
<Link href="/privacy">
|
||||
<a className="hover:text-gray-300">개인정보취급방침</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href="/guidelines">
|
||||
<a className="hover:text-gray-300">가이드라인</a>
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</Container>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default Footer
|
||||
export default Footer
|
||||
|
||||
@ -5,9 +5,9 @@ const Navbar = (): JSX.Element => {
|
||||
const [navbarOpen, setNavbarOpen] = useState<boolean>(false)
|
||||
return (
|
||||
<>
|
||||
<nav className="fixed lg:absolute bg-transparent z-20 top-0 flex flex-wrap items-center justify-between px-2 py-3 w-full text-gray-100 bg-discord-blurple dark:bg-discord-black">
|
||||
<nav className="fixed z-20 top-0 flex flex-wrap items-center justify-between px-2 py-3 w-full text-gray-100 dark:bg-discord-black bg-discord-blurple bg-transparent lg:absolute">
|
||||
<div className="container flex flex-wrap items-center justify-between mx-auto px-4">
|
||||
<div className="relative flex justify-between w-full static block lg:justify-start lg:w-auto">
|
||||
<div className="relative static block flex justify-between w-full lg:justify-start lg:w-auto">
|
||||
<a
|
||||
className="logofont text-large whitespace-no-wrap inline-block mr-4 py-2 hover:text-gray-300 font-semibold leading-relaxed uppercase sm:text-2xl"
|
||||
href="/"
|
||||
@ -22,42 +22,40 @@ const Navbar = (): JSX.Element => {
|
||||
<i className={`fas ${!navbarOpen ? 'fa-bars' : 'fa-times'}`}></i>
|
||||
</button>
|
||||
</div>
|
||||
<div
|
||||
className='lg:flex flex-grow items-center bg-white lg:bg-transparent lg:shadow-none hidden'
|
||||
>
|
||||
<div className="hidden flex-grow items-center bg-white lg:flex lg:bg-transparent lg:shadow-none">
|
||||
<ul className="flex flex-col list-none lg:flex-row lg:ml-auto">
|
||||
<li className="flex items-center">
|
||||
<a
|
||||
href="/discord"
|
||||
className="lg:text-gray-100 lg:hover:text-gray-300 flex items-center px-3 py-4 w-full hover:text-gray-500 text-gray-700 text-sm font-semibold sm:w-auto lg:py-2"
|
||||
className="lg:hover:text-gray-300 flex items-center px-3 py-4 w-full hover:text-gray-500 text-gray-700 text-sm font-semibold sm:w-auto lg:py-2 lg:text-gray-100"
|
||||
>
|
||||
디스코드
|
||||
</a>
|
||||
</li>
|
||||
<li className="flex items-center">
|
||||
<Link href="/about">
|
||||
<a className="lg:text-gray-100 lg:hover:text-gray-300 flex items-center px-3 py-4 w-full hover:text-gray-500 text-gray-700 text-sm font-semibold sm:w-auto lg:py-2">
|
||||
<a className="lg:hover:text-gray-300 flex items-center px-3 py-4 w-full hover:text-gray-500 text-gray-700 text-sm font-semibold sm:w-auto lg:py-2 lg:text-gray-100">
|
||||
소개
|
||||
</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li className="flex items-center">
|
||||
<Link href="/api">
|
||||
<a className="lg:text-gray-100 lg:hover:text-gray-300 flex items-center px-3 py-4 w-full hover:text-gray-500 text-gray-700 text-sm font-semibold sm:w-auto lg:py-2">
|
||||
<a className="lg:hover:text-gray-300 flex items-center px-3 py-4 w-full hover:text-gray-500 text-gray-700 text-sm font-semibold sm:w-auto lg:py-2 lg:text-gray-100">
|
||||
API
|
||||
</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li className="flex items-center">
|
||||
<Link href="/addbot">
|
||||
<a className="lg:text-gray-100 lg:hover:text-gray-300 flex items-center px-3 py-4 w-full hover:text-gray-500 text-gray-700 text-sm font-semibold sm:w-auto lg:py-2">
|
||||
<a className="lg:hover:text-gray-300 flex items-center px-3 py-4 w-full hover:text-gray-500 text-gray-700 text-sm font-semibold sm:w-auto lg:py-2 lg:text-gray-100">
|
||||
봇 추가하기
|
||||
</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li className="flex items-center">
|
||||
<Link href="/api/auth/discord">
|
||||
<a className="lg:text-gray-100 lg:hover:text-gray-300 flex items-center px-3 py-4 w-full hover:text-gray-500 text-gray-700 text-sm font-semibold sm:w-auto lg:py-2">
|
||||
<a className="lg:hover:text-gray-300 flex items-center px-3 py-4 w-full hover:text-gray-500 text-gray-700 text-sm font-semibold sm:w-auto lg:py-2 lg:text-gray-100">
|
||||
로그인
|
||||
</a>
|
||||
</Link>
|
||||
@ -66,52 +64,60 @@ const Navbar = (): JSX.Element => {
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<div className={`w-full h-full fixed bg-discord-blurple dark:bg-discord-black mt-8 sm:mt-0 z-19 ${navbarOpen ? 'block' : 'hidden'}`}>
|
||||
<div
|
||||
className={`w-full h-full fixed bg-discord-blurple dark:bg-discord-black mt-8 sm:mt-0 z-19 ${
|
||||
navbarOpen ? 'block' : 'hidden'
|
||||
}`}
|
||||
>
|
||||
<nav className="mt-20">
|
||||
<Link href='/about'>
|
||||
<a className="flex items-center py-2 px-8 text-gray-100 hover:text-gray-300">
|
||||
<svg className="h-5 w-5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M19 11H5M19 11C20.1046 11 21 11.8954 21 13V19C21 20.1046 20.1046 21 19 21H5C3.89543 21 3 20.1046 3 19V13C3 11.8954 3.89543 11 5 11M19 11V9C19 7.89543 18.1046 7 17 7M5 11V9C5 7.89543 5.89543 7 7 7M7 7V5C7 3.89543 7.89543 3 9 3H15C16.1046 3 17 3.89543 17 5V7M7 7H17" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
|
||||
<Link href="/about">
|
||||
<a className="flex items-center px-8 py-2 text-gray-100 hover:text-gray-300">
|
||||
<svg
|
||||
className="w-5 h-5"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
d="M19 11H5M19 11C20.1046 11 21 11.8954 21 13V19C21 20.1046 20.1046 21 19 21H5C3.89543 21 3 20.1046 3 19V13C3 11.8954 3.89543 11 5 11M19 11V9C19 7.89543 18.1046 7 17 7M5 11V9C5 7.89543 5.89543 7 7 7M7 7V5C7 3.89543 7.89543 3 9 3H15C16.1046 3 17 3.89543 17 5V7M7 7H17"
|
||||
stroke="currentColor"
|
||||
strokeWidth="2"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
|
||||
|
||||
<span className='px-2 font-medium'>소개</span>
|
||||
|
||||
<span className="px-2 font-medium">소개</span>
|
||||
</a>
|
||||
</Link>
|
||||
<Link href='/about'>
|
||||
<a className="flex items-center py-2 px-8 text-gray-100 hover:text-gray-300">
|
||||
<i className="fas fa-tools"/>
|
||||
<Link href="/about">
|
||||
<a className="flex items-center px-8 py-2 text-gray-100 hover:text-gray-300">
|
||||
<i className="fas fa-tools" />
|
||||
|
||||
|
||||
<span className='px-2 font-medium'>API</span>
|
||||
|
||||
<span className="px-2 font-medium">API</span>
|
||||
</a>
|
||||
</Link>
|
||||
<Link href='/addbot'>
|
||||
<a className="flex items-center py-2 px-8 text-gray-100 hover:text-gray-300">
|
||||
<Link href="/addbot">
|
||||
<a className="flex items-center px-8 py-2 text-gray-100 hover:text-gray-300">
|
||||
<i className="fas fa-plus"></i>
|
||||
<span className='px-2 font-medium'>봇 추가하기</span>
|
||||
|
||||
<span className="px-2 font-medium">봇 추가하기</span>
|
||||
</a>
|
||||
</Link>
|
||||
|
||||
<Link href='/api/auth/login'>
|
||||
<a className="flex items-center py-2 px-8 text-gray-100 hover:text-gray-300">
|
||||
<i className="far fa-user"/>
|
||||
<span className='px-2 font-medium'>로그인</span>
|
||||
|
||||
<Link href="/api/auth/login">
|
||||
<a className="flex items-center px-8 py-2 text-gray-100 hover:text-gray-300">
|
||||
<i className="far fa-user" />
|
||||
<span className="px-2 font-medium">로그인</span>
|
||||
</a>
|
||||
</Link>
|
||||
</nav>
|
||||
|
||||
<div className="absolute bottom-0 my-10">
|
||||
<a className="flex items-center py-2 px-8 text-gray-100 hover:text-gray-300">
|
||||
<i className='fab fa-discord' />
|
||||
<a className="flex items-center px-8 py-2 text-gray-100 hover:text-gray-300">
|
||||
<i className="fab fa-discord" />
|
||||
|
||||
|
||||
<Link href='/discord'>
|
||||
<a className='px-2 font-medium'>디스코드 서버</a>
|
||||
<Link href="/discord">
|
||||
<a className="px-2 font-medium">디스코드 서버</a>
|
||||
</Link>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@ -1,24 +1,22 @@
|
||||
import Head from 'next/head'
|
||||
|
||||
const SEO = ({ title, description, image }:SEOProps):JSX.Element => {
|
||||
return <Head>
|
||||
<title>{title} - 한국 디스코드봇 리스트</title>
|
||||
{ description && <meta
|
||||
name="description"
|
||||
content={description}
|
||||
/> }
|
||||
<meta name="og:site_name" content="한국 디스코드봇 리스트" />
|
||||
<meta name="og:title" content={title} />
|
||||
{ description && <meta name="og:description" content={description} /> }
|
||||
{ image && <meta name="og:image" content={image} /> }
|
||||
</Head>
|
||||
const SEO = ({ title, description, image }: SEOProps): JSX.Element => {
|
||||
return (
|
||||
<Head>
|
||||
<title>{title} - 한국 디스코드봇 리스트</title>
|
||||
{description && <meta name="description" content={description} />}
|
||||
<meta name="og:site_name" content="한국 디스코드봇 리스트" />
|
||||
<meta name="og:title" content={title} />
|
||||
{description && <meta name="og:description" content={description} />}
|
||||
{image && <meta name="og:image" content={image} />}
|
||||
</Head>
|
||||
)
|
||||
}
|
||||
|
||||
export default SEO
|
||||
|
||||
|
||||
interface SEOProps {
|
||||
title: string
|
||||
description?: string
|
||||
image?: string
|
||||
}
|
||||
title: string
|
||||
description?: string
|
||||
image?: string
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { useState } from 'react'
|
||||
|
||||
const Search = ({query, result}:SearchProps):JSX.Element => {
|
||||
const Search = ({ query, result }: SearchProps): JSX.Element => {
|
||||
return (
|
||||
<div>
|
||||
<input />
|
||||
@ -9,8 +9,8 @@ const Search = ({query, result}:SearchProps):JSX.Element => {
|
||||
}
|
||||
|
||||
interface SearchProps {
|
||||
query: string
|
||||
result: string
|
||||
query: string
|
||||
result: string
|
||||
}
|
||||
|
||||
export default Search
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
const Segment = ({ children }):JSX.Element => {
|
||||
return <div className='bg-little-white dark:bg-discord-black text-black dark:text-white p-5 rounded-sm'>
|
||||
{children}
|
||||
</div>
|
||||
const Segment = ({ children }): JSX.Element => {
|
||||
return (
|
||||
<div className="p-5 text-black dark:text-white dark:bg-discord-black bg-little-white rounded-sm">
|
||||
{children}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default Segment
|
||||
export default Segment
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
const Wave = ({ color, className }:WaveProps):JSX.Element => {
|
||||
const Wave = ({ color, className }: WaveProps): JSX.Element => {
|
||||
return (
|
||||
<svg viewBox="0 0 1440 320" className={className}>
|
||||
<path
|
||||
@ -10,8 +10,8 @@ const Wave = ({ color, className }:WaveProps):JSX.Element => {
|
||||
}
|
||||
|
||||
interface WaveProps {
|
||||
color: string
|
||||
className?: string
|
||||
color: string
|
||||
className?: string
|
||||
}
|
||||
|
||||
export default Wave
|
||||
export default Wave
|
||||
|
||||
@ -2,9 +2,11 @@ import { NextPage } from 'next'
|
||||
import Container from '../components/Container'
|
||||
|
||||
const NotFound: NextPage = () => {
|
||||
return <Container paddingTop>
|
||||
<h1>Not Found</h1>
|
||||
</Container>
|
||||
return (
|
||||
<Container paddingTop>
|
||||
<h1>Not Found</h1>
|
||||
</Container>
|
||||
)
|
||||
}
|
||||
|
||||
export default NotFound
|
||||
|
||||
@ -28,7 +28,7 @@ class MyDocument extends Document {
|
||||
}}
|
||||
/>
|
||||
</Head>
|
||||
<body className="h-full text-black dark:text-gray-100 bg-white dark:bg-discord-dark">
|
||||
<body className="h-full text-black dark:text-gray-100 dark:bg-discord-dark bg-white">
|
||||
<Main />
|
||||
<NextScript />
|
||||
</body>
|
||||
|
||||
@ -1,84 +1,89 @@
|
||||
import { NextPage } from 'next'
|
||||
import Docs from '../components/Docs'
|
||||
|
||||
const Privacy:NextPage = () => {
|
||||
return <Docs header='가이드라인' description='리스트에 등재되는 모든 봇들이 지켜야하는 가이드라인입니다!' subheader='최초 작성: 2020-04-30 수정: 2020-05-15'>
|
||||
<h1 className='font-bold text-4xl mb-3'>KOREANBOTS에 오신 것을 환영합니다.</h1>
|
||||
<p>봇 추가 또는 등재 유지를 위해서 반드시 지켜야할 가이드라인들입니다.</p>
|
||||
<p>
|
||||
가이드라인 위반이 확인될 경우, 거부 또는 삭제 처리될 수 있음을
|
||||
알려드립니다.
|
||||
</p>
|
||||
<h2 className='font-semibold text-3xl mt-10' id="봇">봇</h2>
|
||||
<p>아래는 봇 추가를 위해 반드시 지켜야할 규칙입니다.</p>
|
||||
<ul className='list-inside list-disc'>
|
||||
<li>반드시 디스코드 서버에 참가해주세요.</li>
|
||||
<li>
|
||||
카테고리는 정확하게 지정해주세요 (NSFW의 경우 반드시 NSFW를
|
||||
지정해주셔야합니다.)
|
||||
</li>
|
||||
<li>
|
||||
오픈소스가 베이스가 되는 봇(유사한 점이 인정되는 경우는 설명란에 해당
|
||||
오픈소스를 기재해주세요)
|
||||
</li>
|
||||
<li>
|
||||
100퍼센트 업타임을 유지할 필요는 없지만, 심사 시간 기준으로 오프라인일
|
||||
경우 심사 거부됩니다.
|
||||
</li>
|
||||
<li>한국인 개발자가 개발하였으며, 한국어를 지원</li>
|
||||
<li>서버로 초대할 수 있는 공개봇 (특수목적의 봇은 제외)</li>
|
||||
<li>
|
||||
오픈소스봇을 따로 거부하지는 않지만, 반드시 <strong>라이선스</strong>
|
||||
를 지켜주세요. 원작자가 문제 제기할 경우, 통보없이 봇이 삭제되거나
|
||||
거부될 수 있습니다.
|
||||
<ul className='pl-3 list-inside list-disc'>
|
||||
<li>
|
||||
오픈소스 라이선스에 <strong>원소스를 표시해야 한다는 조항</strong>(MIT
|
||||
등 해당)이 있다면, 소스같은 곳뿐만 아니라 반드시 봇 설명에
|
||||
기재해주세요.</li>
|
||||
<li>한 두개의 명령어까지 관여할 수는 없지만, 봇의 베이스 소스(예시:
|
||||
Just Some Bot을 활용한 뮤직봇, RedBot 기반 봇.)에<br/>오픈소스가
|
||||
사용되었을 경우, 반드시 라이선스에 관한 조항을 봇 설명에 표시해주세요.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 className='font-semibold text-lg mt-x' id="금지사항">금지사항</h3>
|
||||
<p>다음 항목에 해당하는 봇의 등록을 거부할 수 있습니다.</p>
|
||||
<ul className='list-inside list-disc'>
|
||||
<li>불법 프로그램 홍보 또는 판매 기타 행위를 조장하는 봇.</li>
|
||||
<li>
|
||||
디스코드 <strong>TOS</strong>나 <strong>가이드라인</strong>,{' '}
|
||||
<strong>개발자 약관</strong>에 위반되는 봇.
|
||||
</li>
|
||||
<li>
|
||||
서버 테러를 시도하거나, 무단으로 의도하여 채널,역할 등을 삭제/수정을
|
||||
시도 또는 이력이 존재하는 경우
|
||||
</li>
|
||||
<li>
|
||||
대한민국 법을 위반하거나 오픈소스 라이선스, API 라이선스등을 위반한 봇
|
||||
</li>
|
||||
</ul>
|
||||
<h2 className='font-semibold text-3xl mt-10' id="유저">유저</h2>
|
||||
<p>
|
||||
다음 항목에 해당하는 유저가 제작에 참여하고 있는(과거에 제작 참여
|
||||
이력과는 관련 없음) 봇의 등록을 거부할 수 있습니다.
|
||||
</p>
|
||||
<ul className='list-inside list-disc'>
|
||||
<li>
|
||||
디스코드 <strong>TOS</strong>나 <strong>가이드라인</strong>,{' '}
|
||||
<strong>개발자 약관</strong> 또는 <strong>대한민국 법</strong>,{' '}
|
||||
<strong>오픈소스 라이선스</strong>, <strong>기타 라이선스</strong> 중
|
||||
하나 이상을 위반 하고 있는 경우
|
||||
</li>
|
||||
</ul>
|
||||
<p className='mt-10'>
|
||||
위 항목들은 정확하게 인정되기 전까지는 처리할 수 없습니다. 또한,
|
||||
처리하기 전에는 반드시 유저에게 통보를 시도해야합니다.
|
||||
</p>
|
||||
<p>당사의 가이드라인은 <strong>대한민국 국내법</strong>이 상위 적용됩니다.</p>
|
||||
</Docs>
|
||||
const Privacy: NextPage = () => {
|
||||
return (
|
||||
<Docs
|
||||
header="가이드라인"
|
||||
description="리스트에 등재되는 모든 봇들이 지켜야하는 가이드라인입니다!"
|
||||
subheader="최초 작성: 2020-04-30 수정: 2020-05-15"
|
||||
>
|
||||
<h1 className="mb-3 text-4xl font-bold">KOREANBOTS에 오신 것을 환영합니다.</h1>
|
||||
<p>봇 추가 또는 등재 유지를 위해서 반드시 지켜야할 가이드라인들입니다.</p>
|
||||
<p>가이드라인 위반이 확인될 경우, 거부 또는 삭제 처리될 수 있음을 알려드립니다.</p>
|
||||
<h2 className="mt-10 text-3xl font-semibold" id="봇">
|
||||
봇
|
||||
</h2>
|
||||
<p>아래는 봇 추가를 위해 반드시 지켜야할 규칙입니다.</p>
|
||||
<ul className="list-inside list-disc">
|
||||
<li>반드시 디스코드 서버에 참가해주세요.</li>
|
||||
<li>카테고리는 정확하게 지정해주세요 (NSFW의 경우 반드시 NSFW를 지정해주셔야합니다.)</li>
|
||||
<li>
|
||||
오픈소스가 베이스가 되는 봇(유사한 점이 인정되는 경우는 설명란에 해당 오픈소스를
|
||||
기재해주세요)
|
||||
</li>
|
||||
<li>
|
||||
100퍼센트 업타임을 유지할 필요는 없지만, 심사 시간 기준으로 오프라인일 경우 심사
|
||||
거부됩니다.
|
||||
</li>
|
||||
<li>한국인 개발자가 개발하였으며, 한국어를 지원</li>
|
||||
<li>서버로 초대할 수 있는 공개봇 (특수목적의 봇은 제외)</li>
|
||||
<li>
|
||||
오픈소스봇을 따로 거부하지는 않지만, 반드시 <strong>라이선스</strong>를 지켜주세요.
|
||||
원작자가 문제 제기할 경우, 통보없이 봇이 삭제되거나 거부될 수 있습니다.
|
||||
<ul className="pl-3 list-inside list-disc">
|
||||
<li>
|
||||
오픈소스 라이선스에 <strong>원소스를 표시해야 한다는 조항</strong>(MIT 등 해당)이
|
||||
있다면, 소스같은 곳뿐만 아니라 반드시 봇 설명에 기재해주세요.
|
||||
</li>
|
||||
<li>
|
||||
한 두개의 명령어까지 관여할 수는 없지만, 봇의 베이스 소스(예시: Just Some Bot을 활용한
|
||||
뮤직봇, RedBot 기반 봇.)에
|
||||
<br />
|
||||
오픈소스가 사용되었을 경우, 반드시 라이선스에 관한 조항을 봇 설명에 표시해주세요.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 className="mt-x text-lg font-semibold" id="금지사항">
|
||||
금지사항
|
||||
</h3>
|
||||
<p>다음 항목에 해당하는 봇의 등록을 거부할 수 있습니다.</p>
|
||||
<ul className="list-inside list-disc">
|
||||
<li>불법 프로그램 홍보 또는 판매 기타 행위를 조장하는 봇.</li>
|
||||
<li>
|
||||
디스코드 <strong>TOS</strong>나 <strong>가이드라인</strong>, <strong>개발자 약관</strong>
|
||||
에 위반되는 봇.
|
||||
</li>
|
||||
<li>
|
||||
서버 테러를 시도하거나, 무단으로 의도하여 채널,역할 등을 삭제/수정을 시도 또는 이력이
|
||||
존재하는 경우
|
||||
</li>
|
||||
<li>대한민국 법을 위반하거나 오픈소스 라이선스, API 라이선스등을 위반한 봇</li>
|
||||
</ul>
|
||||
<h2 className="mt-10 text-3xl font-semibold" id="유저">
|
||||
유저
|
||||
</h2>
|
||||
<p>
|
||||
다음 항목에 해당하는 유저가 제작에 참여하고 있는(과거에 제작 참여 이력과는 관련 없음) 봇의
|
||||
등록을 거부할 수 있습니다.
|
||||
</p>
|
||||
<ul className="list-inside list-disc">
|
||||
<li>
|
||||
디스코드 <strong>TOS</strong>나 <strong>가이드라인</strong>, <strong>개발자 약관</strong>{' '}
|
||||
또는 <strong>대한민국 법</strong>, <strong>오픈소스 라이선스</strong>,{' '}
|
||||
<strong>기타 라이선스</strong> 중 하나 이상을 위반 하고 있는 경우
|
||||
</li>
|
||||
</ul>
|
||||
<p className="mt-10">
|
||||
위 항목들은 정확하게 인정되기 전까지는 처리할 수 없습니다. 또한, 처리하기 전에는 반드시
|
||||
유저에게 통보를 시도해야합니다.
|
||||
</p>
|
||||
<p>
|
||||
당사의 가이드라인은 <strong>대한민국 국내법</strong>이 상위 적용됩니다.
|
||||
</p>
|
||||
</Docs>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
export default Privacy
|
||||
|
||||
@ -3,23 +3,36 @@ import Container from '../components/Container'
|
||||
import Wave from '../components/Wave'
|
||||
|
||||
const Index: NextPage = () => {
|
||||
return <>
|
||||
<div className='bg-discord-blurple dark:bg-discord-black'>
|
||||
<Container className='pt-20 pb-28' ignoreColor>
|
||||
<h1 className='text-3xl text-gray-100 font-bold sm:text-left text-center'>한국 디스코드봇 리스트</h1>
|
||||
</Container>
|
||||
</div>
|
||||
<Wave color='currentColor' className='text-discord-blurple dark:text-discord-black bg-white dark:bg-discord-dark'/>
|
||||
return (
|
||||
<>
|
||||
<div className="dark:bg-discord-black bg-discord-blurple">
|
||||
<Container className="pb-28 pt-20" ignoreColor>
|
||||
<h1 className="text-center text-gray-100 text-3xl font-bold sm:text-left">
|
||||
한국 디스코드봇 리스트
|
||||
</h1>
|
||||
</Container>
|
||||
</div>
|
||||
<Wave
|
||||
color="currentColor"
|
||||
className="dark:text-discord-black text-discord-blurple dark:bg-discord-dark bg-white"
|
||||
/>
|
||||
|
||||
<Container>
|
||||
<h1 className='text-3xl font-bold'><i className='far fa-heart text-pink-600 mr-3' /> 하트 랭킹</h1>
|
||||
<p className='text-base'>하트를 많이 받은 봇들의 순위입니다!</p>
|
||||
<h1 className='text-3xl font-bold'><i className='far fa-star text-yellow-500 mt-10 mr-3' /> 새로운 봇</h1>
|
||||
<p className='text-base'>최근에 한국 디스코드봇 리스트에 추가된 따끈따끈한 봇입니다.</p>
|
||||
<h1 className='text-3xl font-bold'><i className='fa fa-check text-green-500 mt-10 mr-3' /> 신뢰된 봇</h1>
|
||||
<p className='text-base'>KOREANBOTS에서 인증받은 신뢰할 수 있는 봇들입니다!!</p>
|
||||
</Container>
|
||||
</>
|
||||
<Container>
|
||||
<h1 className="text-3xl font-bold">
|
||||
<i className="far fa-heart mr-3 text-pink-600" /> 하트 랭킹
|
||||
</h1>
|
||||
<p className="text-base">하트를 많이 받은 봇들의 순위입니다!</p>
|
||||
<h1 className="text-3xl font-bold">
|
||||
<i className="far fa-star mr-3 mt-10 text-yellow-500" /> 새로운 봇
|
||||
</h1>
|
||||
<p className="text-base">최근에 한국 디스코드봇 리스트에 추가된 따끈따끈한 봇입니다.</p>
|
||||
<h1 className="text-3xl font-bold">
|
||||
<i className="fa fa-check mr-3 mt-10 text-green-500" /> 신뢰된 봇
|
||||
</h1>
|
||||
<p className="text-base">KOREANBOTS에서 인증받은 신뢰할 수 있는 봇들입니다!!</p>
|
||||
</Container>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default Index
|
||||
|
||||
@ -1,127 +1,123 @@
|
||||
import { NextPage } from 'next'
|
||||
import Docs from '../components/Docs'
|
||||
|
||||
const Privacy:NextPage = () => {
|
||||
return <Docs header='개인정보취급방침' description='저희가 개인정보를 취급하는 방침입니다.'>
|
||||
<h2 className='font-medium text-3xl mt-10'>개인정보 처리의 목적</h2>
|
||||
<p>
|
||||
"한국 디스코드봇 리스트"('https://koreanbots.dev')는 다음 목적을 위하여
|
||||
개인정보를 처리하고 있으며, 다음 목적 이외의 용도로는 사용하지 않습니다.
|
||||
</p>
|
||||
<ul className='list-inside list-disc'>
|
||||
<li>웹사이트에 표시 및 서비스 제공</li>
|
||||
<li>빠른 웹사이트 문제 수정</li>
|
||||
<li>사이트와 유저의 보안 유지</li>
|
||||
</ul>
|
||||
<h2 className='font-medium text-3xl mt-10'>수집하는 개인정보 항목</h2>
|
||||
<ul className='list-inside list-disc'>
|
||||
<li>
|
||||
유저: 디스코드 Oauth를 통한 정보(이메일, 디스코드 유저의 ID, 아바타, 유저네임과 태그, 접속해있는 길드), 접속로그(IP주소, 접속 기기정보), 유저의 봇 투표 정보 | 선택항목: Github 닉네임
|
||||
</li>
|
||||
<li>
|
||||
봇: 등록일, ID, 이름, 태그, 디스코드 인증 여부, 소유자, 라이브러리,
|
||||
접두사, 투표정보, 서버 수, 봇 설명, 카테고리, 봇 Status | 선택항목:
|
||||
웹사이트, GIT URL, 초대링크, 디스코드 서버 링크
|
||||
</li>
|
||||
</ul>
|
||||
<h2 className='font-medium text-3xl mt-10'>개인정보 보유 및 이용기간</h2>
|
||||
<p>
|
||||
개인정보는 <strong>서비스 종료시까지 보관을 원칙</strong>으로 하며,
|
||||
유저의 요청시 언제든지 파기할 수 있습니다.
|
||||
</p>
|
||||
<h2 className='font-medium text-3xl mt-10'>이용자 및 법정 대리인의 권리와 행사 방법</h2>
|
||||
<p>
|
||||
회사는 정보통신망법 및 개인정보 보호법 등 관계 법령에서 규정하고 있는
|
||||
이용자의 권리를 충실히 보장합니다.
|
||||
</p>
|
||||
<p>
|
||||
이용자는 언제든지 자신의 개인정보 및 이용 현황을 상시 확인할 수 있으며,
|
||||
동의 철회 및 정정을 요청할 수 있습니다.
|
||||
</p>
|
||||
<h2 className='font-medium text-3xl mt-10'>개인정보의 파기</h2>
|
||||
<p>
|
||||
개인정보의 수집 및 이용 목적이 달성 되면, 수집한 개인정보를 신속하고
|
||||
안전한 방법으로 파기합니다.
|
||||
</p>
|
||||
<h2 className='font-medium text-3xl mt-10'>개인정보 보호책임자</h2>
|
||||
<p>
|
||||
권리 침해와 개인정보 처리와 관한 불만처리 및 피해구제를 위하여 아래와
|
||||
같이 개인정보보호 담당자를 지정하고 있습니다.
|
||||
</p>
|
||||
<h3>개인정보 보호 책임자</h3>
|
||||
<ul className='list-inside list-disc'>
|
||||
<li>성명: 박준서</li>
|
||||
<li>직책: 대표</li>
|
||||
<li>
|
||||
연락처: <a href="mailto:wonderlandpark@callisto.team">메일</a> 혹은
|
||||
디스코드 @wonderlandpark#9999
|
||||
</li>
|
||||
</ul>
|
||||
<h2 className='font-medium text-3xl mt-10'>개인정보 처리방침 변경 시 고지 의무</h2>
|
||||
<p>
|
||||
개인정보 처리방침의 변경이 있는 경우 시행 7일전 사전에 이용자에게
|
||||
고지합니다.
|
||||
</p>
|
||||
<h2 className='font-medium text-3xl mt-10'>정보주체의 권익침해에 대한 구제방법</h2>
|
||||
<p>
|
||||
정보주체는 아래의 기관에 개인정보 침해에 대한 피해구제, 상담 등을 문의할
|
||||
수 있습니다.
|
||||
</p>
|
||||
<p>
|
||||
아래의 기관은 당사와는 별개의 기관으로서, 당사의 자체적인 개인정보
|
||||
불만처리, 피해 구제 결과에 만족하지 못하시거나 보다 자세한 도움이
|
||||
필요하시면 문의하여 주시기 바랍니다.
|
||||
</p>
|
||||
<p>
|
||||
▶ 개인정보 침해신고센터 (행정안전부, 한국인터넷진흥원 운영)
|
||||
<br />
|
||||
- 소관업무 : 개인정보 침해사실 신고, 상담
|
||||
<br />
|
||||
- 인터넷 신고 : privacy.kisa.or.kr
|
||||
<br />
|
||||
- 전자우편 신고 : privacyclean@kisa.or.kr
|
||||
<br />
|
||||
- 전화 신고 : 118 (ARS 내선 2번)
|
||||
<br />
|
||||
- 팩스 신고 : ☎ 061-820-2619
|
||||
<br />
|
||||
- 방문/우편 신고 : (58324) 전라남도 나주시 진흥길 9(빛가람동 301-2) 3층
|
||||
한국인터넷진흥원 개인정보침해신고센터
|
||||
<br />
|
||||
</p>
|
||||
<p>
|
||||
▶ 개인정보 분쟁조정위원회
|
||||
<br />
|
||||
- 소관업무 : 개인정보 분쟁조정 및 집단 분쟁조정 신청, 상담
|
||||
<br />
|
||||
- 온라인 신청 : www.kopico.go.kr
|
||||
<br />
|
||||
- 오프라인(우편) 신청 : (03171) 서울특별시 종로구 세종대로 209
|
||||
정부서울청사 4층 개인정보분쟁조정위원회 (☎1833-6972)
|
||||
<br />
|
||||
</p>
|
||||
<p>
|
||||
▶ 대검찰청 과학수사부 사이버수사과
|
||||
<br />
|
||||
- 소관업무 : 각종 사이버범죄 수사/수사지원 전담
|
||||
<br />
|
||||
- 인터넷 신고 : cybercid@spo.go.kr
|
||||
<br />
|
||||
- 전화 : (국번없이) 1301, 02-3480-3570
|
||||
<br />
|
||||
</p>
|
||||
<p>
|
||||
▶ 경찰청 사이버안전국
|
||||
<br />
|
||||
- 소관업무 : 개인정보 침해 관련 사이버 범죄 신고, 상담
|
||||
<br />
|
||||
- 인터넷 신고 : cyberbureau.police.go.kr
|
||||
<br />
|
||||
- 전화 : 182(경찰민원 콜센터)
|
||||
<br />
|
||||
</p>
|
||||
</Docs>
|
||||
const Privacy: NextPage = () => {
|
||||
return (
|
||||
<Docs header="개인정보취급방침" description="저희가 개인정보를 취급하는 방침입니다.">
|
||||
<h2 className="mt-10 text-3xl font-medium">개인정보 처리의 목적</h2>
|
||||
<p>
|
||||
"한국 디스코드봇 리스트"('https://koreanbots.dev')는 다음 목적을 위하여 개인정보를 처리하고
|
||||
있으며, 다음 목적 이외의 용도로는 사용하지 않습니다.
|
||||
</p>
|
||||
<ul className="list-inside list-disc">
|
||||
<li>웹사이트에 표시 및 서비스 제공</li>
|
||||
<li>빠른 웹사이트 문제 수정</li>
|
||||
<li>사이트와 유저의 보안 유지</li>
|
||||
</ul>
|
||||
<h2 className="mt-10 text-3xl font-medium">수집하는 개인정보 항목</h2>
|
||||
<ul className="list-inside list-disc">
|
||||
<li>
|
||||
유저: 디스코드 Oauth를 통한 정보(이메일, 디스코드 유저의 ID, 아바타, 유저네임과 태그,
|
||||
접속해있는 길드), 접속로그(IP주소, 접속 기기정보), 유저의 봇 투표 정보 | 선택항목: Github
|
||||
닉네임
|
||||
</li>
|
||||
<li>
|
||||
봇: 등록일, ID, 이름, 태그, 디스코드 인증 여부, 소유자, 라이브러리, 접두사, 투표정보, 서버
|
||||
수, 봇 설명, 카테고리, 봇 Status | 선택항목: 웹사이트, GIT URL, 초대링크, 디스코드 서버
|
||||
링크
|
||||
</li>
|
||||
</ul>
|
||||
<h2 className="mt-10 text-3xl font-medium">개인정보 보유 및 이용기간</h2>
|
||||
<p>
|
||||
개인정보는 <strong>서비스 종료시까지 보관을 원칙</strong>으로 하며, 유저의 요청시 언제든지
|
||||
파기할 수 있습니다.
|
||||
</p>
|
||||
<h2 className="mt-10 text-3xl font-medium">이용자 및 법정 대리인의 권리와 행사 방법</h2>
|
||||
<p>
|
||||
회사는 정보통신망법 및 개인정보 보호법 등 관계 법령에서 규정하고 있는 이용자의 권리를 충실히
|
||||
보장합니다.
|
||||
</p>
|
||||
<p>
|
||||
이용자는 언제든지 자신의 개인정보 및 이용 현황을 상시 확인할 수 있으며, 동의 철회 및 정정을
|
||||
요청할 수 있습니다.
|
||||
</p>
|
||||
<h2 className="mt-10 text-3xl font-medium">개인정보의 파기</h2>
|
||||
<p>
|
||||
개인정보의 수집 및 이용 목적이 달성 되면, 수집한 개인정보를 신속하고 안전한 방법으로
|
||||
파기합니다.
|
||||
</p>
|
||||
<h2 className="mt-10 text-3xl font-medium">개인정보 보호책임자</h2>
|
||||
<p>
|
||||
권리 침해와 개인정보 처리와 관한 불만처리 및 피해구제를 위하여 아래와 같이 개인정보보호
|
||||
담당자를 지정하고 있습니다.
|
||||
</p>
|
||||
<h3>개인정보 보호 책임자</h3>
|
||||
<ul className="list-inside list-disc">
|
||||
<li>성명: 박준서</li>
|
||||
<li>직책: 대표</li>
|
||||
<li>
|
||||
연락처: <a href="mailto:wonderlandpark@callisto.team">메일</a> 혹은 디스코드
|
||||
@wonderlandpark#9999
|
||||
</li>
|
||||
</ul>
|
||||
<h2 className="mt-10 text-3xl font-medium">개인정보 처리방침 변경 시 고지 의무</h2>
|
||||
<p>개인정보 처리방침의 변경이 있는 경우 시행 7일전 사전에 이용자에게 고지합니다.</p>
|
||||
<h2 className="mt-10 text-3xl font-medium">정보주체의 권익침해에 대한 구제방법</h2>
|
||||
<p>정보주체는 아래의 기관에 개인정보 침해에 대한 피해구제, 상담 등을 문의할 수 있습니다.</p>
|
||||
<p>
|
||||
아래의 기관은 당사와는 별개의 기관으로서, 당사의 자체적인 개인정보 불만처리, 피해 구제
|
||||
결과에 만족하지 못하시거나 보다 자세한 도움이 필요하시면 문의하여 주시기 바랍니다.
|
||||
</p>
|
||||
<p>
|
||||
▶ 개인정보 침해신고센터 (행정안전부, 한국인터넷진흥원 운영)
|
||||
<br />
|
||||
- 소관업무 : 개인정보 침해사실 신고, 상담
|
||||
<br />
|
||||
- 인터넷 신고 : privacy.kisa.or.kr
|
||||
<br />
|
||||
- 전자우편 신고 : privacyclean@kisa.or.kr
|
||||
<br />
|
||||
- 전화 신고 : 118 (ARS 내선 2번)
|
||||
<br />
|
||||
- 팩스 신고 : ☎ 061-820-2619
|
||||
<br />
|
||||
- 방문/우편 신고 : (58324) 전라남도 나주시 진흥길 9(빛가람동 301-2) 3층 한국인터넷진흥원
|
||||
개인정보침해신고센터
|
||||
<br />
|
||||
</p>
|
||||
<p>
|
||||
▶ 개인정보 분쟁조정위원회
|
||||
<br />
|
||||
- 소관업무 : 개인정보 분쟁조정 및 집단 분쟁조정 신청, 상담
|
||||
<br />
|
||||
- 온라인 신청 : www.kopico.go.kr
|
||||
<br />
|
||||
- 오프라인(우편) 신청 : (03171) 서울특별시 종로구 세종대로 209 정부서울청사 4층
|
||||
개인정보분쟁조정위원회 (☎1833-6972)
|
||||
<br />
|
||||
</p>
|
||||
<p>
|
||||
▶ 대검찰청 과학수사부 사이버수사과
|
||||
<br />
|
||||
- 소관업무 : 각종 사이버범죄 수사/수사지원 전담
|
||||
<br />
|
||||
- 인터넷 신고 : cybercid@spo.go.kr
|
||||
<br />
|
||||
- 전화 : (국번없이) 1301, 02-3480-3570
|
||||
<br />
|
||||
</p>
|
||||
<p>
|
||||
▶ 경찰청 사이버안전국
|
||||
<br />
|
||||
- 소관업무 : 개인정보 침해 관련 사이버 범죄 신고, 상담
|
||||
<br />
|
||||
- 인터넷 신고 : cyberbureau.police.go.kr
|
||||
<br />
|
||||
- 전화 : 182(경찰민원 콜센터)
|
||||
<br />
|
||||
</p>
|
||||
</Docs>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
export default Privacy
|
||||
|
||||
@ -4,4 +4,4 @@ import relativeTime from 'dayjs/plugin/relativeTime'
|
||||
Day.extend(relativeTime)
|
||||
Day.locale('ko')
|
||||
|
||||
export default Day
|
||||
export default Day
|
||||
|
||||
@ -3,13 +3,15 @@ import * as Query from './Query'
|
||||
|
||||
const Fetch = {
|
||||
bot: new DataLoader(
|
||||
async (ids: string[]) => (await Promise.all(ids.map((el: string) => Query.getBot(el)))).map(row => ({ ...row })),
|
||||
async (ids: string[]) =>
|
||||
(await Promise.all(ids.map((el: string) => Query.getBot(el)))).map(row => ({ ...row })),
|
||||
{
|
||||
batchScheduleFn: callback => setTimeout(callback, 1000),
|
||||
}
|
||||
),
|
||||
user: new DataLoader(
|
||||
async (ids: string[]) => (await Promise.all(ids.map((el: string) => Query.getUser(el)))).map(row => ({ ...row })),
|
||||
async (ids: string[]) =>
|
||||
(await Promise.all(ids.map((el: string) => Query.getUser(el)))).map(row => ({ ...row })),
|
||||
{
|
||||
batchScheduleFn: callback => setTimeout(callback, 1000),
|
||||
}
|
||||
|
||||
@ -17,29 +17,61 @@ export const knex = knsexy({
|
||||
},
|
||||
})
|
||||
|
||||
export async function getBot(id: string, owners=true):Promise<Bot> {
|
||||
const res = await knex('bots').select(['id', 'owners', 'lib', 'prefix', 'votes', 'servers', 'intro', 'desc', 'web', 'git', 'url', 'category', 'status', 'name', 'avatar', 'tag', 'verified', 'trusted', 'partnered', 'discord', 'boosted', 'state', 'vanity', 'bg', 'banner']).where({ id }).orWhere({ vanity: id, boosted: 1 })
|
||||
if(res[0]) {
|
||||
export async function getBot(id: string, owners = true): Promise<Bot> {
|
||||
const res = await knex('bots')
|
||||
.select([
|
||||
'id',
|
||||
'owners',
|
||||
'lib',
|
||||
'prefix',
|
||||
'votes',
|
||||
'servers',
|
||||
'intro',
|
||||
'desc',
|
||||
'web',
|
||||
'git',
|
||||
'url',
|
||||
'category',
|
||||
'status',
|
||||
'name',
|
||||
'avatar',
|
||||
'tag',
|
||||
'verified',
|
||||
'trusted',
|
||||
'partnered',
|
||||
'discord',
|
||||
'boosted',
|
||||
'state',
|
||||
'vanity',
|
||||
'bg',
|
||||
'banner',
|
||||
])
|
||||
.where({ id })
|
||||
.orWhere({ vanity: id, boosted: 1 })
|
||||
if (res[0]) {
|
||||
res[0].category = JSON.parse(res[0].category)
|
||||
res[0].owners = JSON.parse(res[0].owners)
|
||||
if(owners) res[0].owners = await Promise.all(res[0].owners.map(async (u: string) => await getUser(u)))
|
||||
res[0].owners = res[0].owners.filter((el: User|null)=> el).map((row: User)=> ({...row}))
|
||||
res[0].vanity = res[0].vanity && ( res[0].boosted || res[0].trusted || res[0].partnered )
|
||||
|
||||
if (owners)
|
||||
res[0].owners = await Promise.all(res[0].owners.map(async (u: string) => await getUser(u)))
|
||||
res[0].owners = res[0].owners.filter((el: User | null) => el).map((row: User) => ({ ...row }))
|
||||
res[0].vanity = res[0].vanity && (res[0].boosted || res[0].trusted || res[0].partnered)
|
||||
}
|
||||
|
||||
|
||||
return res[0] || null
|
||||
}
|
||||
|
||||
export async function getUser(id: string, bots=true):Promise<User> {
|
||||
const res = await knex('users').select(['id', 'avatar', 'tag', 'username', 'perm', 'github']).where({ id })
|
||||
if(res[0]) {
|
||||
const owned = await knex('bots').select(['id']).where('owners', 'like', `%${id}%`)
|
||||
if(bots) res[0].bots = await Promise.all(owned.map(async b=> await getBot(b.id, false)))
|
||||
else res[0].bots = owned.map(async b=> b.id)
|
||||
res[0].bots = res[0].bots.filter((el:Bot|null)=> el).map((row: User)=> ({...row}))
|
||||
export async function getUser(id: string, bots = true): Promise<User> {
|
||||
const res = await knex('users')
|
||||
.select(['id', 'avatar', 'tag', 'username', 'perm', 'github'])
|
||||
.where({ id })
|
||||
if (res[0]) {
|
||||
const owned = await knex('bots')
|
||||
.select(['id'])
|
||||
.where('owners', 'like', `%${id}%`)
|
||||
if (bots) res[0].bots = await Promise.all(owned.map(async b => await getBot(b.id, false)))
|
||||
else res[0].bots = owned.map(async b => b.id)
|
||||
res[0].bots = res[0].bots.filter((el: Bot | null) => el).map((row: User) => ({ ...row }))
|
||||
}
|
||||
|
||||
|
||||
return res[0] || null
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user