diff options
author | Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> | 2021-02-19 15:42:16 +0100 |
---|---|---|
committer | Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> | 2021-02-19 15:42:16 +0100 |
commit | a066ba2aba8218d9d0bf36668e3a471552c35ac0 (patch) | |
tree | c6de32ec6a76ef5788d3d351e2ced20a4802672a /src/routes | |
parent | :art: [Guild] check if user is allowed to created a guild (diff) | |
parent | Update guilds.ts (diff) | |
download | server-a066ba2aba8218d9d0bf36668e3a471552c35ac0.tar.xz |
Merge branch 'master' of https://github.com/discord-open-source/discord-api
Diffstat (limited to 'src/routes')
-rw-r--r-- | src/routes/api/v8/users/@me/guilds.ts | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/routes/api/v8/users/@me/guilds.ts b/src/routes/api/v8/users/@me/guilds.ts new file mode 100644 index 00000000..d7c1bc25 --- /dev/null +++ b/src/routes/api/v8/users/@me/guilds.ts @@ -0,0 +1,53 @@ +import { Router, Request, Response } from "express"; +import { + GuildModel, + MemberModel, + UserModel, + GuildDeleteEvent, + GuildMemberRemoveEvent +} from "fosscord-server-util"; +import { HTTPError } from "lambert-server"; +import { emitEvent } from "../../../../../util/Event"; + +const router: Router = Router(); + +router.get("/", async (req: Request, res: Response) => { + const user = await UserModel.findOne( + { id: req.userid }, + "guilds username discriminator id public_flags avatar" + ).exec(); + + if (!user) throw new HTTPError("User not found", 404); + + var guildIDs = user.guilds || []; + var guildsss = await GuildModel.find({ id: { $in: guildIDs } }).exec(); + res.json(guildsss) +}); + +router.delete("/:id", async (req: Request, res: Response) => { + const guildID = BigInt(req.params.id); + if(await GuildModel.findOne({id: guildID, owner_id: req.userid}).exec()) throw new HTTPError("You can't leave your own guild", 400); + var user = await UserModel.findOneAndUpdate({ id: req.userid}, { $pull: { guilds: guildID }}).exec(); + await MemberModel.deleteOne({ id: req.userid, guild_id: guildID}).exec(); + await emitEvent({ + event: "GUILD_DELETE", + data: { + id: guildID + }, + user_id: req.userid + } as GuildDeleteEvent); + + await emitEvent({ + event: "GUILD_MEMBER_REMOVE", + data: { + guild_id: guildID, + user: user + }, + guild_id: guildID + } as GuildMemberRemoveEvent); + + + return res.status(204).send(); +}); + +export default router; |