Merge branch 'master' into slowcord
This commit is contained in:
		
						commit
						cc1dd05858
					
				
							
								
								
									
										68
									
								
								api/src/routes/guilds/#guild_id/roles/#role_id/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								api/src/routes/guilds/#guild_id/roles/#role_id/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,68 @@ | ||||
| import { Router, Request, Response } from "express"; | ||||
| import { Role, Member, GuildRoleUpdateEvent, GuildRoleDeleteEvent, emitEvent, handleFile } from "@fosscord/util"; | ||||
| import { route } from "@fosscord/api"; | ||||
| import { HTTPError } from "lambert-server"; | ||||
| import { RoleModifySchema } from "../"; | ||||
| 
 | ||||
| const router = Router(); | ||||
| 
 | ||||
| router.get("/", route({}), async (req: Request, res: Response) => { | ||||
| 	const { guild_id, role_id } = req.params; | ||||
| 	await Member.IsInGuildOrFail(req.user_id, guild_id); | ||||
| 	const role = await Role.findOneOrFail({ guild_id, id: role_id }); | ||||
| 	return res.json(role); | ||||
| }); | ||||
| 
 | ||||
| router.delete("/", route({ permission: "MANAGE_ROLES" }), async (req: Request, res: Response) => { | ||||
| 	const { guild_id, role_id } = req.params; | ||||
| 	if (role_id === guild_id) throw new HTTPError("You can't delete the @everyone role"); | ||||
| 
 | ||||
| 	await Promise.all([ | ||||
| 		Role.delete({ | ||||
| 			id: role_id, | ||||
| 			guild_id: guild_id | ||||
| 		}), | ||||
| 		emitEvent({ | ||||
| 			event: "GUILD_ROLE_DELETE", | ||||
| 			guild_id, | ||||
| 			data: { | ||||
| 				guild_id, | ||||
| 				role_id | ||||
| 			} | ||||
| 		} as GuildRoleDeleteEvent) | ||||
| 	]); | ||||
| 
 | ||||
| 	res.sendStatus(204); | ||||
| }); | ||||
| 
 | ||||
| // TODO: check role hierarchy
 | ||||
| 
 | ||||
| router.patch("/", route({ body: "RoleModifySchema", permission: "MANAGE_ROLES" }), async (req: Request, res: Response) => { | ||||
| 	const { role_id, guild_id } = req.params; | ||||
| 	const body = req.body as RoleModifySchema; | ||||
| 
 | ||||
| 	if (body.icon) body.icon = await handleFile(`/role-icons/${role_id}`, body.icon as string); | ||||
| 
 | ||||
| 	const role = new Role({ | ||||
| 		...body, | ||||
| 		id: role_id, | ||||
| 		guild_id, | ||||
| 		permissions: String(req.permission!.bitfield & BigInt(body.permissions || "0")) | ||||
| 	}); | ||||
| 
 | ||||
| 	await Promise.all([ | ||||
| 		role.save(), | ||||
| 		emitEvent({ | ||||
| 			event: "GUILD_ROLE_UPDATE", | ||||
| 			guild_id, | ||||
| 			data: { | ||||
| 				guild_id, | ||||
| 				role | ||||
| 			} | ||||
| 		} as GuildRoleUpdateEvent) | ||||
| 	]); | ||||
| 
 | ||||
| 	res.json(role); | ||||
| }); | ||||
| 
 | ||||
| export default router; | ||||
| @ -81,59 +81,6 @@ router.post("/", route({ body: "RoleModifySchema", permission: "MANAGE_ROLES" }) | ||||
| 	res.json(role); | ||||
| }); | ||||
| 
 | ||||
| router.delete("/:role_id", route({ permission: "MANAGE_ROLES" }), async (req: Request, res: Response) => { | ||||
| 	const guild_id = req.params.guild_id; | ||||
| 	const { role_id } = req.params; | ||||
| 	if (role_id === guild_id) throw new HTTPError("You can't delete the @everyone role"); | ||||
| 
 | ||||
| 	await Promise.all([ | ||||
| 		Role.delete({ | ||||
| 			id: role_id, | ||||
| 			guild_id: guild_id | ||||
| 		}), | ||||
| 		emitEvent({ | ||||
| 			event: "GUILD_ROLE_DELETE", | ||||
| 			guild_id, | ||||
| 			data: { | ||||
| 				guild_id, | ||||
| 				role_id | ||||
| 			} | ||||
| 		} as GuildRoleDeleteEvent) | ||||
| 	]); | ||||
| 
 | ||||
| 	res.sendStatus(204); | ||||
| }); | ||||
| 
 | ||||
| // TODO: check role hierarchy
 | ||||
| 
 | ||||
| router.patch("/:role_id", route({ body: "RoleModifySchema", permission: "MANAGE_ROLES" }), async (req: Request, res: Response) => { | ||||
| 	const { role_id, guild_id } = req.params; | ||||
| 	const body = req.body as RoleModifySchema; | ||||
| 
 | ||||
| 	if (body.icon) body.icon = await handleFile(`/role-icons/${role_id}`, body.icon as string);  | ||||
| 
 | ||||
| 	const role = new Role({ | ||||
| 		...body, | ||||
| 		id: role_id, | ||||
| 		guild_id, | ||||
| 		permissions: String(req.permission!.bitfield & BigInt(body.permissions || "0")) | ||||
| 	}); | ||||
| 
 | ||||
| 	await Promise.all([ | ||||
| 		role.save(), | ||||
| 		emitEvent({ | ||||
| 			event: "GUILD_ROLE_UPDATE", | ||||
| 			guild_id, | ||||
| 			data: { | ||||
| 				guild_id, | ||||
| 				role | ||||
| 			} | ||||
| 		} as GuildRoleUpdateEvent) | ||||
| 	]); | ||||
| 
 | ||||
| 	res.json(role); | ||||
| }); | ||||
| 
 | ||||
| router.patch("/", route({ body: "RolePositionUpdateSchema" }), async (req: Request, res: Response) => { | ||||
| 	const { guild_id } = req.params; | ||||
| 	const body = req.body as RolePositionUpdateSchema; | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Madeline
						Madeline