summary refs log tree commit diff
path: root/src/util
diff options
context:
space:
mode:
authorPaul Munteanu <luth@luthcode.net>2021-08-01 21:01:56 +0300
committerPaul Munteanu <luth@luthcode.net>2021-08-01 21:01:56 +0300
commit64220d51f9a8ad6f7a18d08e988cd9bd4700baea (patch)
tree4f83ed61b241ebf4f9a356b2b3a60a364b18eb77 /src/util
parentMerge pull request #180 from fosscord/l10n_master (diff)
downloadserver-64220d51f9a8ad6f7a18d08e988cd9bd4700baea.tar.xz
[Channel] Implement type 4 channel and clean the code
Diffstat (limited to 'src/util')
-rw-r--r--src/util/Channel.ts22
1 files 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<TextChannel | VoiceChannel>, 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<TextChannel | VoiceChannel>
 			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({