added requested changes from #3
This commit is contained in:
		
							parent
							
								
									a94f7c7617
								
							
						
					
					
						commit
						45116c6d8f
					
				| @ -1,17 +1,29 @@ | ||||
| import { Router, Request, Response } from "express"; | ||||
| import { GuildDeleteEvent, GuildModel, MemberModel, Snowflake } from "fosscord-server-util"; | ||||
| import { | ||||
| 	GuildDeleteEvent, | ||||
| 	GuildCreateEvent, | ||||
| 	GuildMemberAddEvent, | ||||
| 	RoleModel, | ||||
| 	GuildModel, | ||||
| 	MemberModel, | ||||
| 	UserModel, | ||||
| 	Snowflake, | ||||
| 	getPermission, | ||||
| } from "fosscord-server-util"; | ||||
| import { HTTPError } from "lambert-server"; | ||||
| import { check } from "./../../../../util/instanceOf"; | ||||
| import { GuildCreateSchema, GuildUpdateSchema } from "../../../../schema/Guild"; | ||||
| import { emitEvent } from "../../../../util/Event"; | ||||
| import Config from "../../../../util/Config"; | ||||
| 
 | ||||
| const router: Router = Router(); | ||||
| 
 | ||||
| router.get("/:id", async (req: Request, res: Response) => { | ||||
| 	const guild = await GuildModel.findOne({ id: BigInt(req.params.id) }).exec(); | ||||
| 	const guild_id = BigInt(req.params.id); | ||||
| 	const guild = await GuildModel.findOne({ id: guild_id }).exec(); | ||||
| 	if (!guild) throw new HTTPError("Guild doesn't exist"); | ||||
| 
 | ||||
| 	const member = await MemberModel.findOne({ guild_id: req.params.id, id: req.userid }, "id").exec(); | ||||
| 	const member = await MemberModel.findOne({ guild_id: guild_id, id: req.userid }, "id").exec(); | ||||
| 
 | ||||
| 	if (!member) throw new HTTPError("you arent a member of the guild you are trying to access", 401); | ||||
| 
 | ||||
| @ -19,22 +31,39 @@ router.get("/:id", async (req: Request, res: Response) => { | ||||
| }); | ||||
| 
 | ||||
| router.patch("/:id", check(GuildUpdateSchema), async (req: Request, res: Response) => { | ||||
| 	// TODO: check permission of member
 | ||||
| 	const body = req.body as GuildUpdateSchema; | ||||
| 	const guild_id = BigInt(req.params.id); | ||||
| 
 | ||||
| 	const guild = await GuildModel.findOne({ id: BigInt(req.params.id) }).exec(); | ||||
| 	if (!guild) throw new HTTPError("This guild doesnt exist", 404); | ||||
| 	// // TODO: check permission of member
 | ||||
| 	const perms = await getPermission(req.userid, guild_id); | ||||
| 	if (!perms.has("MANAGE_GUILD")) throw new HTTPError("User is missing the 'MANAGE_GUILD' permission", 401); | ||||
| 
 | ||||
| 	throw "not finished"; | ||||
| 	const guild = await GuildModel.findOne({ id: guild_id, owner_id: req.userid }).exec(); | ||||
| 	if (!guild) throw new HTTPError("This guild doesnt exist or you arent the owner", 404); | ||||
| 	await GuildModel.updateOne({ id: guild_id }, body).exec(); | ||||
| 	return res.status(204); | ||||
| }); | ||||
| 
 | ||||
| // // TODO: finish POST route
 | ||||
| router.post("/", check(GuildCreateSchema), async (req: Request, res: Response) => { | ||||
| 	const body = req.body as GuildCreateSchema; | ||||
| 	// TODO: check if user is in more than 100 (config max guilds)
 | ||||
| 
 | ||||
| 	// // TODO: check if user is in more than (config max guilds)
 | ||||
| 	const { maxGuilds } = Config.get().limits.user; | ||||
| 	const user = await UserModel.findOne({ id: req.userid }, "guilds").exec(); | ||||
| 
 | ||||
| 	if (!user) throw new HTTPError("User not found", 404); | ||||
| 
 | ||||
| 	if (user.guilds.length >= maxGuilds) { | ||||
| 		throw new HTTPError("User is already in 100 guilds", 403); | ||||
| 	} | ||||
| 
 | ||||
| 	const guildID = Snowflake.generate(); | ||||
| 	const guild = { | ||||
| 	const guild: any = { | ||||
| 		// TODO:
 | ||||
| 		// ! temp fix [Type: any] for:
 | ||||
| 		// ! Conversion of type '{ event: "GUILD_CREATE"; data: { guild_id: bigint; name: string; region: string; owner_id: any; icon: undefined; afk_channel_id: undefined; afk_timeout: number; application_id: undefined; banner: undefined; ... 27 more ...; widget_enabled: boolean; }; guild_id: bigint; }' to type 'GuildCreateEvent' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.Type '{ event: "GUILD_CREATE"; data: { guild_id: bigint; name: string; region: string; owner_id: any; icon: undefined; afk_channel_id: undefined; afk_timeout: number; application_id: undefined; banner: undefined; ... 27 more ...; widget_enabled: boolean; }; guild_id: bigint; }' is missing the following properties from type 'GuildCreateEvent': $ignore, $isDefault, $isDeleted, $isEmpty, and 44 more.ts(2352)
 | ||||
| 
 | ||||
| 		name: body.name, | ||||
| 		region: body.region || "en-US", | ||||
| 		owner_id: req.userid, | ||||
| @ -75,8 +104,68 @@ router.post("/", check(GuildCreateSchema), async (req: Request, res: Response) = | ||||
| 
 | ||||
| 	try { | ||||
| 		await new GuildModel(guild).save(); | ||||
| 		// TODO: insert default everyone role
 | ||||
| 		// TODO: automatically add user to guild
 | ||||
| 		// // TODO: insert default everyone role
 | ||||
| 		await new RoleModel({ | ||||
| 			id: guildID, | ||||
| 			guild_id: guildID, | ||||
| 			color: 0, | ||||
| 			hoist: false, | ||||
| 			managed: true, | ||||
| 			mentionable: true, | ||||
| 			name: "@everyone", | ||||
| 			permissions: 2251804225, | ||||
| 			position: 0, | ||||
| 			tags: null, | ||||
| 		}).save(); | ||||
| 
 | ||||
| 		// // TODO: automatically add user to guild
 | ||||
| 		const member: any = { | ||||
| 			// TODO:
 | ||||
| 			// ! temp fix [Type: any] for:
 | ||||
| 			// ! Conversion of type '{ event: "GUILD_MEMBER_ADD"; data: { guild_id: bigint; id: any; nick: null; roles: bigint[]; joined_at: number; premium_since: null; deaf: boolean; mute: boolean; pending: boolean; permissions: number; }; guild_id: bigint; }' to type 'GuildMemberAddEvent' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.Type '{ event: "GUILD_MEMBER_ADD"; data: { guild_id: bigint; id: any; nick: null; roles: bigint[]; joined_at: number; premium_since: null; deaf: boolean; mute: boolean; pending: boolean; permissions: number; }; guild_id: bigint; }' is missing the following properties from type 'GuildMemberAddEvent': $ignore, $isDefault, $isDeleted, $isEmpty, and 44 more.ts(2352)
 | ||||
| 
 | ||||
| 			id: req.userid, | ||||
| 			guild_id: guildID, | ||||
| 			nick: null, | ||||
| 			roles: [guildID], | ||||
| 			joined_at: Date.now(), | ||||
| 			premium_since: null, | ||||
| 			deaf: false, | ||||
| 			mute: false, | ||||
| 			pending: false, | ||||
| 			permissions: 8, | ||||
| 		}; | ||||
| 		await new MemberModel({ | ||||
| 			...member, | ||||
| 			settings: { | ||||
| 				channel_overrides: [], | ||||
| 				message_notifications: 0, | ||||
| 				mobile_push: true, | ||||
| 				mute_config: null, | ||||
| 				muted: false, | ||||
| 				suppress_everyone: false, | ||||
| 				suppress_roles: false, | ||||
| 				version: 0, | ||||
| 			}, | ||||
| 		}).save(); | ||||
| 
 | ||||
| 		// // TODO: emit Event
 | ||||
| 		await emitEvent({ | ||||
| 			event: "GUILD_MEMBER_ADD", | ||||
| 			data: { | ||||
| 				...member, | ||||
| 				guild_id: guildID, | ||||
| 			}, | ||||
| 			guild_id: guildID, | ||||
| 		} as GuildMemberAddEvent); | ||||
| 		await emitEvent({ | ||||
| 			event: "GUILD_CREATE", | ||||
| 			data: { | ||||
| 				...guild, | ||||
| 				guild_id: guildID, | ||||
| 			}, | ||||
| 			guild_id: guildID, | ||||
| 		} as GuildCreateEvent); | ||||
| 	} catch (error) { | ||||
| 		throw new HTTPError("Couldnt create Guild", 500); | ||||
| 	} | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 xnacly
						xnacly