summary refs log tree commit diff
path: root/src/api/routes/guilds/#guild_id/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/routes/guilds/#guild_id/index.ts')
-rw-r--r--src/api/routes/guilds/#guild_id/index.ts72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/api/routes/guilds/#guild_id/index.ts b/src/api/routes/guilds/#guild_id/index.ts
index 86777b36..6feb0a83 100644
--- a/src/api/routes/guilds/#guild_id/index.ts
+++ b/src/api/routes/guilds/#guild_id/index.ts
@@ -18,11 +18,13 @@
 
 import { route } from "@spacebar/api";
 import {
+	Channel,
 	DiscordApiErrors,
 	Guild,
 	GuildUpdateEvent,
 	GuildUpdateSchema,
 	Member,
+	Permissions,
 	SpacebarApiErrors,
 	emitEvent,
 	getPermission,
@@ -155,6 +157,76 @@ router.patch(
 			guild.features = body.features;
 		}
 
+		if (body.public_updates_channel_id == "1") {
+			// move all channels up 1
+			await Channel.createQueryBuilder("channels")
+				.where({ guild: { id: guild_id } })
+				.update({ position: () => "position + 1" })
+				.execute();
+
+			// create an updates channel for them
+			await Channel.createChannel(
+				{
+					name: "moderator-only",
+					guild_id: guild.id,
+					position: 0,
+					type: 0,
+					permission_overwrites: [
+						// remove SEND_MESSAGES from @everyone
+						{
+							id: guild.id,
+							allow: "0",
+							deny: Permissions.FLAGS.VIEW_CHANNEL.toString(),
+							type: 0,
+						},
+					],
+				},
+				undefined,
+				{ skipPermissionCheck: true },
+			);
+		} else if (body.public_updates_channel_id != undefined) {
+			// ensure channel exists in this guild
+			await Channel.findOneOrFail({
+				where: { guild_id, id: body.public_updates_channel_id },
+				select: { id: true },
+			});
+		}
+
+		if (body.rules_channel_id == "1") {
+			// move all channels up 1
+			await Channel.createQueryBuilder("channels")
+				.where({ guild: { id: guild_id } })
+				.update({ position: () => "position + 1" })
+				.execute();
+
+			// create a rules for them
+			await Channel.createChannel(
+				{
+					name: "rules",
+					guild_id: guild.id,
+					position: 0,
+					type: 0,
+					permission_overwrites: [
+						// remove SEND_MESSAGES from @everyone
+						{
+							id: guild.id,
+							allow: "0",
+							deny: Permissions.FLAGS.SEND_MESSAGES.toString(),
+							type: 0,
+						},
+					],
+				},
+				undefined,
+				{ skipPermissionCheck: true },
+			);
+		} else if (body.rules_channel_id != undefined) {
+			// ensure channel exists in this guild
+			await Channel.findOneOrFail({
+				where: { guild_id, id: body.rules_channel_id },
+				select: { id: true },
+			});
+		}
+
 		// TODO: check if body ids are valid
 		guild.assign(body);