From 64220d51f9a8ad6f7a18d08e988cd9bd4700baea Mon Sep 17 00:00:00 2001 From: Paul Munteanu Date: Sun, 1 Aug 2021 21:01:56 +0300 Subject: [PATCH] [Channel] Implement type 4 channel and clean the code --- src/util/Channel.ts | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/util/Channel.ts b/src/util/Channel.ts index 8dfc03bc..4d322812 100644 --- a/src/util/Channel.ts +++ b/src/util/Channel.ts @@ -13,11 +13,21 @@ import { emitEvent } from "./Event"; // TODO: DM channel export async function createChannel(channel: Partial, user_id: string = "0") { - if (!channel.permission_overwrites) channel.permission_overwrites = []; + + // Always check if user has permission first + const permissions = await getPermission(user_id, channel.guild_id); + permissions.hasThrow("MANAGE_CHANNELS"); switch (channel.type) { case ChannelType.GUILD_TEXT: case ChannelType.GUILD_VOICE: + if (channel.parent_id) { + const exists = await ChannelModel.findOne({ id: channel.parent_id }, { guild_id: true }).exec(); + if (!exists) throw new HTTPError("Parent id channel doesn't exist", 400); + if (exists.guild_id !== channel.guild_id) throw new HTTPError("The category channel needs to be in the guild"); + } + break; + case ChannelType.GUILD_CATEGORY: break; case ChannelType.DM: case ChannelType.GROUP_DM: @@ -29,15 +39,7 @@ export async function createChannel(channel: Partial throw new HTTPError("Not yet supported"); } - const permissions = await getPermission(user_id, channel.guild_id); - permissions.hasThrow("MANAGE_CHANNELS"); - - if (channel.parent_id) { - const exists = await ChannelModel.findOne({ id: channel.parent_id }, { guild_id: true }).exec(); - if (!exists) throw new HTTPError("Parent id channel doesn't exist", 400); - if (exists.guild_id !== channel.guild_id) throw new HTTPError("The category channel needs to be in the guild"); - } - + if (!channel.permission_overwrites) channel.permission_overwrites = []; // TODO: auto generate position channel = await new ChannelModel({