mirror of
https://github.com/spacebarchat/server.git
synced 2024-11-11 05:02:37 +01:00
🐛 fix Guild + Channel create
This commit is contained in:
parent
6db7620582
commit
96080e8786
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user