diff --git a/api/src/routes/guilds/#guild_id/bans.ts b/api/src/routes/guilds/#guild_id/bans.ts
index cbc0b0fa..b84a68a7 100644
--- a/api/src/routes/guilds/#guild_id/bans.ts
+++ b/api/src/routes/guilds/#guild_id/bans.ts
@@ -1,22 +1,17 @@
import { Request, Response, Router } from "express";
-import { BanModel, emitEvent, getPermission, GuildBanAddEvent, GuildBanRemoveEvent, Guild, toObject } from "@fosscord/util";
+import { emitEvent, getPermission, GuildBanAddEvent, GuildBanRemoveEvent, Guild, Ban, User, Member } from "@fosscord/util";
import { HTTPError } from "lambert-server";
import { getIpAdress } from "../../../util/ipAddress";
import { BanCreateSchema } from "../../../schema/Ban";
import { check } from "../../../util/instanceOf";
-import { removeMember } from "../../../util/Member";
-import { getPublicUser } from "../../../util/User";
const router: Router = Router();
router.get("/", async (req: Request, res: Response) => {
const { guild_id } = req.params;
- const guild = await Guild.exists({ id: guild_id });
- if (!guild) throw new HTTPError("Guild not found", 404);
-
- var bans = await Ban.find({ guild_id: guild_id }, { user_id: true, reason: true });
+ var bans = await Ban.find({ guild_id: guild_id });
return res.json(bans);
});
@@ -32,29 +27,32 @@ router.put("/:user_id", check(BanCreateSchema), async (req: Request, res: Respon
const { guild_id } = req.params;
const banned_user_id = req.params.user_id;
- const banned_user = await getPublicUser(banned_user_id);
+ const banned_user = await User.getPublicUser(banned_user_id);
const perms = await getPermission(req.user_id, guild_id);
perms.hasThrow("BAN_MEMBERS");
if (req.user_id === banned_user_id) throw new HTTPError("You can't ban yourself", 400);
+ if (perms.cache.guild?.owner_id === banned_user_id) throw new HTTPError("You can't ban the owner", 400);
- await removeMember(banned_user_id, guild_id);
-
- const ban = await new BanModel({
+ const ban = new Ban({
user_id: banned_user_id,
guild_id: guild_id,
ip: getIpAdress(req),
executor_id: req.user_id,
reason: req.body.reason // || otherwise empty
- }).save();
+ });
- await emitEvent({
- event: "GUILD_BAN_ADD",
- data: {
- guild_id: guild_id,
- user: banned_user
- },
- guild_id: guild_id
- } as GuildBanAddEvent);
+ await Promise.all([
+ Member.removeFromGuild(banned_user_id, guild_id),
+ ban.save(),
+ emitEvent({
+ event: "GUILD_BAN_ADD",
+ data: {
+ guild_id: guild_id,
+ user: banned_user
+ },
+ guild_id: guild_id
+ } as GuildBanAddEvent)
+ ]);
return res.json(ban);
});
@@ -63,26 +61,25 @@ router.delete("/:user_id", async (req: Request, res: Response) => {
var { guild_id } = req.params;
var banned_user_id = req.params.user_id;
- const banned_user = await getPublicUser(banned_user_id);
- const guild = await Guild.exists({ id: guild_id });
- if (!guild) throw new HTTPError("Guild not found", 404);
-
+ const banned_user = await User.getPublicUser(banned_user_id);
const perms = await getPermission(req.user_id, guild_id);
perms.hasThrow("BAN_MEMBERS");
- await Ban.deleteOne({
- user_id: banned_user_id,
- guild_id
- });
-
- await emitEvent({
- event: "GUILD_BAN_REMOVE",
- data: {
- guild_id,
- user: banned_user
- },
- guild_id
- } as GuildBanRemoveEvent);
+ await Promise.all([
+ Ban.delete({
+ user_id: banned_user_id,
+ guild_id
+ }),
+
+ emitEvent({
+ event: "GUILD_BAN_REMOVE",
+ data: {
+ guild_id,
+ user: banned_user
+ },
+ guild_id
+ } as GuildBanRemoveEvent)
+ ]);
return res.status(204).send();
});
|