diff --git "a/src/api/routes/guilds/\043guild_id/index.ts" "b/src/api/routes/guilds/\043guild_id/index.ts" index fb3589c..1e97629 100644 --- "a/src/api/routes/guilds/\043guild_id/index.ts" +++ "b/src/api/routes/guilds/\043guild_id/index.ts" @@ -9,6 +9,7 @@ handleFile, Member, GuildUpdateSchema, + FosscordApiErrors, } from "@fosscord/util"; import { HTTPError } from "lambert-server"; import { route } from "@fosscord/api"; @@ -74,6 +75,27 @@ body.discovery_splash, ); + if (body.features) { + const diff = guild.features.filter(x => !body.features?.includes(x)) + .concat(body.features.filter(x => !guild.features.includes(x))); + + // TODO move these + const MUTABLE_FEATURES = [ + "COMMUNITY", + "INVITES_DISABLED", + "DISCOVERABLE", + ]; + + for (var feature of diff) { + if (MUTABLE_FEATURES.includes(feature)) continue; + + throw FosscordApiErrors.FEATURE_IS_IMMUTABLE.withParams(feature); + } + + // for some reason, they don't update in the assign. + guild.features = body.features; + } + // TODO: check if body ids are valid guild.assign(body); diff --git a/src/util/util/Constants.ts b/src/util/util/Constants.ts index 46cf2e4..b84a817 100644 --- a/src/util/util/Constants.ts +++ b/src/util/util/Constants.ts @@ -1043,6 +1043,11 @@ 45006, 501, ), + FEATURE_IS_IMMUTABLE : new ApiError( + "The feature ({}) cannot be edited.", + 45007, + 403, + ), MISSING_RIGHTS: new ApiError( "You lack rights to perform that action ({})", 50013,