summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorPuyodead1 <puyodead@proton.me>2023-11-29 11:08:35 -0500
committerPuyodead1 <puyodead@proton.me>2023-11-29 11:08:35 -0500
commit7b34c70fb84dbc3c9c9dea179ade1cbd99e227e5 (patch)
tree86462d8c91b6ac7477d93b724c24f43acf57c6fb /src
parentProper error messages for invalid config (diff)
downloadserver-7b34c70fb84dbc3c9c9dea179ade1cbd99e227e5.tar.xz
fix some issues with discord bot libs
Diffstat (limited to 'src')
-rw-r--r--src/api/routes/oauth2/applications/@me.ts59
-rw-r--r--src/util/dtos/ReadyGuildDTO.ts2
-rw-r--r--src/util/entities/Message.ts1
-rw-r--r--src/util/entities/Role.ts7
4 files changed, 68 insertions, 1 deletions
diff --git a/src/api/routes/oauth2/applications/@me.ts b/src/api/routes/oauth2/applications/@me.ts
new file mode 100644
index 00000000..0c23bdb1
--- /dev/null
+++ b/src/api/routes/oauth2/applications/@me.ts
@@ -0,0 +1,59 @@
+/*
+	Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
+	Copyright (C) 2023 Spacebar and Spacebar Contributors
+	
+	This program is free software: you can redistribute it and/or modify
+	it under the terms of the GNU Affero General Public License as published
+	by the Free Software Foundation, either version 3 of the License, or
+	(at your option) any later version.
+	
+	This program is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	GNU Affero General Public License for more details.
+	
+	You should have received a copy of the GNU Affero General Public License
+	along with this program.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+import { route } from "@spacebar/api";
+import {
+	Application,
+	DiscordApiErrors,
+	PublicUserProjection,
+} from "@spacebar/util";
+import { Request, Response, Router } from "express";
+
+const router: Router = Router();
+
+router.get(
+	"/",
+	route({
+		responses: {
+			200: {
+				body: "Application",
+			},
+		},
+	}),
+	async (req: Request, res: Response) => {
+		const app = await Application.findOneOrFail({
+			where: { id: req.params.id },
+			relations: ["bot", "owner"],
+			select: {
+				owner: Object.fromEntries(
+					PublicUserProjection.map((x) => [x, true]),
+				),
+			},
+		});
+
+		if (!app.bot) throw DiscordApiErrors.BOT_ONLY_ENDPOINT;
+
+		res.json({
+			...app,
+			owner: app.owner.toPublicUser(),
+			install_params:
+				app.install_params !== null ? app.install_params : undefined,
+		});
+	},
+);
+export default router;
diff --git a/src/util/dtos/ReadyGuildDTO.ts b/src/util/dtos/ReadyGuildDTO.ts
index 905ede74..061959a6 100644
--- a/src/util/dtos/ReadyGuildDTO.ts
+++ b/src/util/dtos/ReadyGuildDTO.ts
@@ -229,7 +229,7 @@ export class ReadyGuildDTO implements IReadyGuildDTO {
 			nsfw: guild.nsfw,
 			safety_alerts_channel_id: null,
 		};
-		this.roles = guild.roles;
+		this.roles = guild.roles.map((x) => x.toJSON());
 		this.stage_instances = [];
 		this.stickers = guild.stickers;
 		this.threads = [];
diff --git a/src/util/entities/Message.ts b/src/util/entities/Message.ts
index 3598d29f..b519099a 100644
--- a/src/util/entities/Message.ts
+++ b/src/util/entities/Message.ts
@@ -238,6 +238,7 @@ export class Message extends BaseClass {
 			activity: this.activity ?? undefined,
 			application: this.application ?? undefined,
 			components: this.components ?? undefined,
+			content: this.content ?? "",
 		};
 	}
 }
diff --git a/src/util/entities/Role.ts b/src/util/entities/Role.ts
index e8e5feda..2783a279 100644
--- a/src/util/entities/Role.ts
+++ b/src/util/entities/Role.ts
@@ -69,4 +69,11 @@ export class Role extends BaseClass {
 
 	@Column({ default: 0 })
 	flags: number;
+
+	toJSON(): Role {
+		return {
+			...this,
+			tags: this.tags ?? undefined,
+		};
+	}
 }