diff --git a/api/src/routes/guilds/#guild_id/emoji.ts b/api/src/routes/guilds/#guild_id/emoji.ts
index f14790ed..6b194f7b 100644
--- a/api/src/routes/guilds/#guild_id/emoji.ts
+++ b/api/src/routes/guilds/#guild_id/emoji.ts
@@ -1,10 +1,13 @@
import { Router, Request, Response } from "express";
import {
Config,
+ DiscordApiErrors,
emitEvent,
Emoji,
GuildEmojiUpdateEvent,
+ handleFile,
Member,
+ Snowflake,
User
} from "@fosscord/util";
import { HTTPError } from "lambert-server";
@@ -15,6 +18,7 @@ const router = Router();
export interface EmojiCreateSchema {
name?: string;
image?: string;
+ require_colons?: boolean | null;
roles?: string[];
}
@@ -44,7 +48,6 @@ router.get("/:emoji_id", route({}), async (req: Request, res: Response) => {
return res.json(emoji);
});
-/** WIP
router.post("/", route({ body: "EmojiCreateSchema", permission: "MANAGE_EMOJIS_AND_STICKERS" }), async (req: Request, res: Response) => {
const guild_id = req.params.guild_id;
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 { maxEmojis } = Config.get().limits.guild;
- if (emoji_count >= maxEmojis) {
- throw new HTTPError("Max emojis reached", 400);
+ if (emoji_count >= maxEmojis) throw DiscordApiErrors.MAXIMUM_NUMBER_OF_EMOJIS_REACHED.withParams(maxEmojis);
+
+ 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) => {
const { emoji_id, guild_id } = req.params;
|