(api): implement post on emoji route

This commit is contained in:
Lobo Metalúrgico 2021-10-09 11:36:58 -03:00
parent ec8b59c5e5
commit e642b6194a

View File

@ -1,10 +1,13 @@
import { Router, Request, Response } from "express"; import { Router, Request, Response } from "express";
import { import {
Config, Config,
DiscordApiErrors,
emitEvent, emitEvent,
Emoji, Emoji,
GuildEmojiUpdateEvent, GuildEmojiUpdateEvent,
handleFile,
Member, Member,
Snowflake,
User User
} from "@fosscord/util"; } from "@fosscord/util";
import { HTTPError } from "lambert-server"; import { HTTPError } from "lambert-server";
@ -15,6 +18,7 @@ const router = Router();
export interface EmojiCreateSchema { export interface EmojiCreateSchema {
name?: string; name?: string;
image?: string; image?: string;
require_colons?: boolean | null;
roles?: string[]; roles?: string[];
} }
@ -44,7 +48,6 @@ router.get("/:emoji_id", route({}), async (req: Request, res: Response) => {
return res.json(emoji); return res.json(emoji);
}); });
/** WIP
router.post("/", route({ body: "EmojiCreateSchema", permission: "MANAGE_EMOJIS_AND_STICKERS" }), async (req: Request, res: Response) => { router.post("/", route({ body: "EmojiCreateSchema", permission: "MANAGE_EMOJIS_AND_STICKERS" }), async (req: Request, res: Response) => {
const guild_id = req.params.guild_id; const guild_id = req.params.guild_id;
const body = req.body as EmojiCreateSchema; const body = req.body as EmojiCreateSchema;
@ -52,11 +55,42 @@ router.post("/", route({ body: "EmojiCreateSchema", permission: "MANAGE_EMOJIS_A
const emoji_count = await Emoji.count({ guild_id: guild_id }); const emoji_count = await Emoji.count({ guild_id: guild_id });
const { maxEmojis } = Config.get().limits.guild; const { maxEmojis } = Config.get().limits.guild;
if (emoji_count >= maxEmojis) { if (emoji_count >= maxEmojis) throw DiscordApiErrors.MAXIMUM_NUMBER_OF_EMOJIS_REACHED.withParams(maxEmojis);
throw new HTTPError("Max emojis reached", 400);
const id = Snowflake.generate();
if (!body.image) {
throw DiscordApiErrors.GENERAL_ERROR.withParams("No image provided");
} }
if (body.require_colons === null) body.require_colons = true;
const user = await User.findOneOrFail({ id: req.user_id });
body.image = await handleFile(`/emojis/${id}`, body.image);
const emoji = new Emoji({
id: id,
guild_id: guild_id,
...body,
user: user,
managed: false,
animated: false, // TODO: Add support animated emojis
available: true
});
await Promise.all([
emoji.save(),
emitEvent({
event: "GUILD_EMOJI_UPDATE",
guild_id: guild_id,
data: {
guild_id: guild_id,
emojis: await Emoji.find({ guild_id: guild_id })
}
} as GuildEmojiUpdateEvent)
]);
}); });
*/
router.patch("/:emoji_id", route({ body: "EmojiModifySchema", permission: "MANAGE_EMOJIS_AND_STICKERS" }), async (req: Request, res: Response) => { router.patch("/:emoji_id", route({ body: "EmojiModifySchema", permission: "MANAGE_EMOJIS_AND_STICKERS" }), async (req: Request, res: Response) => {
const { emoji_id, guild_id } = req.params; const { emoji_id, guild_id } = req.params;