diff options
author | Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> | 2021-08-14 13:56:46 +0200 |
---|---|---|
committer | Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> | 2021-08-14 13:56:46 +0200 |
commit | 31a6c416a623c2461f1bdad56a4cbae1743d837f (patch) | |
tree | da50a1997d93e6bd3d98a59eb960e8b1f1906058 | |
parent | :bug: fix guild create with channel template (diff) | |
download | server-31a6c416a623c2461f1bdad56a4cbae1743d837f.tar.xz |
:bug: fix Guild + Channel create
-rw-r--r-- | api/src/schema/Channel.ts | 2 | ||||
-rw-r--r-- | api/src/schema/Guild.ts | 5 | ||||
-rw-r--r-- | api/src/util/Channel.ts | 13 |
3 files changed, 15 insertions, 5 deletions
diff --git a/api/src/schema/Channel.ts b/api/src/schema/Channel.ts index 18a8f835..bffbaa69 100644 --- a/api/src/schema/Channel.ts +++ b/api/src/schema/Channel.ts @@ -18,6 +18,7 @@ export const ChannelModifySchema = { } ], $parent_id: String, + $id: String, // kept for backwards compatibility does nothing (need for guild create) $nsfw: Boolean }; @@ -46,6 +47,7 @@ export interface ChannelModifySchema { deny: bigint; }[]; parent_id?: string; + id?: string; // is not used (only for guild create) nsfw?: boolean; } diff --git a/api/src/schema/Guild.ts b/api/src/schema/Guild.ts index ce40b49f..e5971baf 100644 --- a/api/src/schema/Guild.ts +++ b/api/src/schema/Guild.ts @@ -1,11 +1,12 @@ import { ChannelSchema, GuildChannel } from "@fosscord/util"; import { Length } from "../util/instanceOf"; +import { ChannelModifySchema } from "./Channel"; export const GuildCreateSchema = { name: new Length(String, 2, 100), $region: String, // auto complete voice region of the user $icon: String, - $channels: [Object], + $channels: [ChannelModifySchema], $guild_template_code: String, $system_channel_id: String, $rules_channel_id: String @@ -15,7 +16,7 @@ export interface GuildCreateSchema { name: string; region?: string; icon?: string; - channels?: GuildChannel[]; + channels?: ChannelModifySchema[]; guild_template_code?: string; system_channel_id?: string; rules_channel_id?: string; diff --git a/api/src/util/Channel.ts b/api/src/util/Channel.ts index ef04d521..fb6f9c8c 100644 --- a/api/src/util/Channel.ts +++ b/api/src/util/Channel.ts @@ -13,7 +13,14 @@ import { import { HTTPError } from "lambert-server"; // TODO: DM channel -export async function createChannel(channel: Partial<TextChannel | VoiceChannel>, user_id: string = "0") { +export async function createChannel( + channel: Partial<TextChannel | VoiceChannel>, + user_id: string = "0", + opts?: { + keepId?: boolean; + skipExistsCheck?: boolean; + } +) { // Always check if user has permission first const permissions = await getPermission(user_id, channel.guild_id); permissions.hasThrow("MANAGE_CHANNELS"); @@ -21,7 +28,7 @@ export async function createChannel(channel: Partial<TextChannel | VoiceChannel> switch (channel.type) { case ChannelType.GUILD_TEXT: case ChannelType.GUILD_VOICE: - if (channel.parent_id) { + if (channel.parent_id && !opts?.skipExistsCheck) { 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"); @@ -44,7 +51,7 @@ export async function createChannel(channel: Partial<TextChannel | VoiceChannel> channel = await new ChannelModel({ ...channel, - id: Snowflake.generate(), + ...(!opts?.keepId && { id: Snowflake.generate() }), created_at: new Date(), // @ts-ignore recipient_ids: null |