[Channels] messages bulk delete

This commit is contained in:
Flam3rboy 2021-03-04 22:00:33 +01:00
parent 65eeb4d80a
commit 87b38d740b

View File

@ -0,0 +1,35 @@
import { Router } from "express";
import { ChannelModel, getPermission, MessageDeleteBulkEvent, MessageModel } from "fosscord-server-util";
import { HTTPError } from "lambert-server";
import Config from "../../../../../../util/Config";
import { emitEvent } from "../../../../../../util/Event";
import { check } from "../../../../../../util/instanceOf";
const router: Router = Router();
export default router;
// TODO: should this request fail, if you provide messages older than 14 days/invalid ids?
// https://discord.com/developers/docs/resources/channel#bulk-delete-messages
router.post("/", check({ messages: [BigInt] }), async (req, res) => {
const channel_id = BigInt(req.params.channel_id);
const channel = await ChannelModel.findOne({ id: channel_id }, { permission_overwrites: true, guild_id: true }).exec();
if (!channel?.guild_id) throw new HTTPError("Can't bulk delete dm channel messages", 400);
const permission = await getPermission(req.userid, channel?.guild_id, channel_id, { channel });
if (!permission.has("MANAGE_MESSAGES")) throw new HTTPError("You are missing the MANAGE_MESSAGES permissions");
const { maxBulkDelete } = Config.get().limits.message;
const { messages } = req.body as { messages: bigint[] };
if (messages.length < 2) throw new HTTPError("You must at least specify 2 messages to bulk delete");
if (messages.length > maxBulkDelete) throw new HTTPError(`You cannot delete more than ${maxBulkDelete} messages`);
await MessageModel.deleteMany({ id: { $in: messages } }).exec();
await emitEvent({
event: "MESSAGE_DELETE_BULK",
channel_id,
data: { ids: messages, channel_id, guild_id: channel.guild_id },
} as MessageDeleteBulkEvent);
res.status(204).send();
});