From e282beb1751c5d431fa690201b234d1406da1767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9B=90=EB=8D=94?= Date: Sun, 24 Jan 2021 10:15:34 +0900 Subject: [PATCH] feat: added avatar endpoint --- pages/api/image/discord/avatars/[id].ts | 31 +++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 pages/api/image/discord/avatars/[id].ts diff --git a/pages/api/image/discord/avatars/[id].ts b/pages/api/image/discord/avatars/[id].ts new file mode 100644 index 0000000..a507fef --- /dev/null +++ b/pages/api/image/discord/avatars/[id].ts @@ -0,0 +1,31 @@ +import { createReadStream } from 'fs' +import { NextApiHandler, NextApiRequest, NextApiResponse } from 'next' +import ResponseWrapper from '@utils/ResponseWrapper' +import { DiscordEnpoints } from '@utils/Constants' +import { get } from '@utils/Query' + +const Avatar: NextApiHandler = async(req: ApiRequest, res: NextApiResponse) => { + const splitted = req.query.id.split('.') + const ext= splitted[1] + const id = splitted[0] + if(splitted.length !== 2) return ResponseWrapper(res, { code: 400, message: '올바르지 않은 형식입니다.' }) + if(!['webp', 'png', 'gif'].includes(ext)) return ResponseWrapper(res, { code: 400, message: '올바르지 않은 확장자입니다.' }) + + const user = await get.discord.user.load(id) + if(!user) return ResponseWrapper(res, { code: 400, message: '올바르지 않은 유저입니다.' }) + + const image = await get.images.user.load(DiscordEnpoints.CDN.user(id, user.avatar, { format: (ext as Ext) })) + res.setHeader('Content-Type', `image/${ext}`) + + image.pipe(res) +} + +interface ApiRequest extends NextApiRequest { + query: { + id: string + } +} + +type Ext = 'webp' | 'png' | 'gif' + +export default Avatar \ No newline at end of file