core/pages/api/v2/bots/[id]/limit.ts

75 lines
2.3 KiB
TypeScript

import { NextApiRequest } from 'next'
import { KoreanbotsEndPoints } from '@utils/Constants'
import { checkToken } from '@utils/Csrf'
import { discordLog } from '@utils/DiscordBot'
import { CaptchaVerify, get, update } from '@utils/Query'
import RequestHandler from '@utils/RequestHandler'
import ResponseWrapper from '@utils/ResponseWrapper'
import { checkUserFlag, makeDiscordCodeblock } from '@utils/Tools'
import { ExceedLimit, ExceedLimitScehma } from '@utils/Yup'
import { EmbedBuilder } from 'discord.js'
const BotLimit = RequestHandler().patch(async (req: PostApiRequest, res) => {
const user = await get.Authorization(req.cookies.token)
if (!user) return ResponseWrapper(res, { code: 401 })
const userinfo = await get.user.load(user)
const bot = await get.bot.load(req.query.id)
if (!bot) return ResponseWrapper(res, { code: 404 })
if (!checkUserFlag(userinfo.flags, 'staff')) return ResponseWrapper(res, { code: 403 })
const validated = await ExceedLimitScehma.validate(req.body, { abortEarly: false })
.then((el) => el)
.catch((e) => {
ResponseWrapper(res, { code: 400, errors: e.errors })
return null
})
if (!validated) return
const csrfValidated = checkToken(req, res, validated._csrf)
if (!csrfValidated) return
const captcha = await CaptchaVerify(validated._captcha)
if (!captcha) return
const response = await update.updateServer(
bot.id,
validated.servers,
validated.shards == 0 ? undefined : validated.shards,
true
)
console.log(response)
get.user.clear(user)
await discordLog(
'BOT/EXCEED_LIMIT',
userinfo.id,
new EmbedBuilder().setDescription(
`${bot.name} - <@${bot.id}> ([${bot.id}](${KoreanbotsEndPoints.URL.bot(bot.id)}))`
),
null,
makeDiscordCodeblock(
`${bot.servers > validated.servers ? '-' : '+'} ${bot.servers} -> ${
validated.servers
} (${bot.servers > validated.servers ? '▼' : '▲'}${Math.abs(validated.servers - bot.servers)})
+ ${
bot.servers >= 1000000
? '서버수 제한 해제 (1000000+)'
: bot.servers >= 10000
? '서버수 제한 해제 (10000+)'
: ''
}
+ ${bot.shards >= 200 ? '샤드수 제한 해제' : ''}
`,
'diff'
)
)
return ResponseWrapper(res, { code: 200 })
})
interface PostApiRequest extends NextApiRequest {
query: {
id: string
}
body: ExceedLimit
}
export default BotLimit