feat: private api changes

This commit is contained in:
wonderlandpark 2021-05-21 09:44:17 +09:00
parent 007e5816d6
commit daf0d85c83
7 changed files with 107 additions and 1 deletions

View File

@ -0,0 +1,32 @@
import { NextApiRequest } from 'next'
import { MessageEmbed } from 'discord.js'
import RequestHandler from '@utils/RequestHandler'
import ResponseWrapper from '@utils/ResponseWrapper'
import { get, update } from '@utils/Query'
import { DiscordBot, getBotReviewLogChannel } from '@utils/DiscordBot'
import { KoreanbotsEndPoints } from '@utils/Constants'
const DenyBotSubmit = RequestHandler()
.post(async (req: ApiRequest, res) => {
const bot = await get.BotAuthorization(req.headers.authorization)
if(bot !== DiscordBot.user.id) return ResponseWrapper(res, { code: 403 })
const submit = await get.botSubmit.load(JSON.stringify({ id: req.query.id, date: req.query.date }))
if(!submit) return ResponseWrapper(res, { code: 404 })
await update.denyBotSubmission(submit.id, submit.date, req.body.reason)
get.botSubmit.clear(JSON.stringify({ id: req.query.id, date: req.query.date }))
await getBotReviewLogChannel().send(new MessageEmbed().setTitle('거부 됨').setColor('RED').setDescription(`[${submit.id}/${submit.date}](${KoreanbotsEndPoints.URL.submittedBot(submit.id, submit.date)})`).setTimestamp())
return ResponseWrapper(res, { code: 200 })
})
interface ApiRequest extends NextApiRequest {
query: {
id: string
date: string
}
body: {
reason?: string
}
}
export default DenyBotSubmit

View File

@ -0,0 +1,24 @@
import { NextApiRequest } from 'next'
import RequestHandler from '@utils/RequestHandler'
import ResponseWrapper from '@utils/ResponseWrapper'
import { get } from '@utils/Query'
import { DiscordBot } from '@utils/DiscordBot'
const BotSubmit = RequestHandler()
.get(async (req: ApiRequest, res) => {
const bot = await get.BotAuthorization(req.headers.authorization)
if(bot !== DiscordBot.user.id) return ResponseWrapper(res, { code: 403 })
const submit = await get.botSubmit.load(JSON.stringify({ id: req.query.id, date: req.query.date }))
if(!submit) return ResponseWrapper(res, { code: 404 })
return ResponseWrapper(res, { code: 200, data: submit })
})
interface ApiRequest extends NextApiRequest {
query: {
id: string
date: string
}
}
export default BotSubmit

View File

@ -0,0 +1,23 @@
import { NextApiRequest } from 'next'
import RequestHandler from '@utils/RequestHandler'
import ResponseWrapper from '@utils/ResponseWrapper'
import { get } from '@utils/Query'
import { DiscordBot } from '@utils/DiscordBot'
const BotSubmit = RequestHandler()
.get(async (req: ApiRequest, res) => {
const bot = await get.BotAuthorization(req.headers.authorization)
if(bot !== DiscordBot.user.id) return ResponseWrapper(res, { code: 403 })
const submits = await get.botSubmitList()
const submit = submits.find(el => el.id === req.query.id)
if(!submit) return ResponseWrapper(res, { code: 404 })
return ResponseWrapper(res, { code: 200, data: submit })
})
interface ApiRequest extends NextApiRequest {
query: {
id: string
}
}
export default BotSubmit

View File

@ -0,0 +1,9 @@
import RequestHandler from '@utils/RequestHandler'
import ResponseWrapper from '@utils/ResponseWrapper'
const BotSubmits = RequestHandler()
.get(async (_req, res) => {
return ResponseWrapper(res, { code: 403, message: 'Private API' })
})
export default BotSubmits

View File

@ -188,6 +188,18 @@ export const DiscordEnpoints = {
}
export const KoreanbotsEndPoints = {
OG: class {
static root = 'https://og.kbots.link'
static bot(id: string, name: string, bio: string, tags: string[], stats: string[]) {
const u = new URL(this.root)
u.pathname = name
u.searchParams.append('image', KoreanbotsEndPoints.CDN.avatar(id, { format: 'webp', size: 256 }))
u.searchParams.append('bio', bio)
tags.map(t => u.searchParams.append('tags', t))
stats.map(s => u.searchParams.append('stats', s))
return u.href
}
},
CDN: class {
static root = '/api/image'
static avatar (id: string, options: KoreanbotsImageOptions) { return makeImageURL(`${this.root}/discord/avatars/${id}`, options) }
@ -195,6 +207,7 @@ export const KoreanbotsEndPoints = {
URL: class {
static root = process.env.KOREANBOTS_URL || 'https://koreanbots.dev'
static bot (id: string) { return `${this.root}/bots/${id}` }
static user (id: string) { return `${this.root}/users/${id}` }
static submittedBot(id: string, date: number) { return `${this.root}/pendingBots/${id}/${date}` }
},
baseAPI: '/api/v2',

View File

@ -381,6 +381,10 @@ async function getBotSubmitList() {
return await Promise.all(res.map(b => get.botSubmit.load(JSON.stringify({ id: b.id, date: b.date }))))
}
async function denyBotSubmission(id: string, date: number, reason?: string) {
await knex('submitted').update({ state: 2 }).where({ state: 0, id, date, reason: reason || null })
}
export const get = {
discord: {
user: new DataLoader(
@ -475,7 +479,8 @@ export const update = {
updateServer,
Github,
bot: updateBot,
botOwners: updateOwner
botOwners: updateOwner,
denyBotSubmission
}
export const put = {