🚧 gateway
This commit is contained in:
		
							parent
							
								
									a567551c8a
								
							
						
					
					
						commit
						b57f8b33d4
					
				| @ -1,10 +1,10 @@ | ||||
| import { | ||||
| 	db, | ||||
| 	Event, | ||||
| 	UserModel, | ||||
| 	User, | ||||
| 	getPermission, | ||||
| 	Permissions, | ||||
| 	ChannelModel, | ||||
| 	Channel, | ||||
| 	RabbitMQ, | ||||
| 	EVENT, | ||||
| 	listenEvent, | ||||
| @ -27,11 +27,11 @@ import { Channel } from "amqplib"; | ||||
| 
 | ||||
| // TODO: use already queried guilds/channels of Identify and don't fetch them again
 | ||||
| export async function setupListener(this: WebSocket) { | ||||
| 	const user = await UserModel.findOne({ id: this.user_id }, { guilds: true }).exec(); | ||||
| 	const channels = await ChannelModel.find( | ||||
| 	const user = await User.findOneOrFail({ id: this.user_id }, { guilds: true }); | ||||
| 	const channels = await Channel.find( | ||||
| 		{ $or: [{ recipient_ids: this.user_id }, { guild_id: { $in: user.guilds } }] }, | ||||
| 		{ id: true, permission_overwrites: true } | ||||
| 	).exec(); | ||||
| 	); | ||||
| 	const dm_channels = channels.filter((x) => !x.guild_id); | ||||
| 	const guild_channels = channels.filter((x) => x.guild_id); | ||||
| 
 | ||||
|  | ||||
| @ -1,18 +1,6 @@ | ||||
| import { CLOSECODES, Payload, OPCODES } from "../util/Constants"; | ||||
| import WebSocket from "../util/WebSocket"; | ||||
| import { | ||||
| 	ChannelModel, | ||||
| 	checkToken, | ||||
| 	GuildModel, | ||||
| 	Intents, | ||||
| 	MemberDocument, | ||||
| 	MemberModel, | ||||
| 	ReadyEventData, | ||||
| 	UserModel, | ||||
| 	toObject, | ||||
| 	EVENTEnum, | ||||
| 	Config, | ||||
| } from "@fosscord/util"; | ||||
| import { Channel, checkToken, Guild, Intents, Member, ReadyEventData, User, EVENTEnum, Config } from "@fosscord/util"; | ||||
| import { setupListener } from "../listener/listener"; | ||||
| import { IdentifySchema } from "../schema/Identify"; | ||||
| import { Send } from "../util/Send"; | ||||
| @ -54,7 +42,7 @@ export async function onIdentify(this: WebSocket, data: Payload) { | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	const members = toObject(await MemberModel.find({ id: this.user_id }).exec()); | ||||
| 	const members = await Member.find({ id: this.user_id }); | ||||
| 	const merged_members = members.map((x: any) => { | ||||
| 		const y = { ...x, user_id: x.id }; | ||||
| 		delete y.settings; | ||||
| @ -63,8 +51,8 @@ export async function onIdentify(this: WebSocket, data: Payload) { | ||||
| 	}) as MemberDocument[][]; | ||||
| 	const user_guild_settings_entries = members.map((x) => x.settings); | ||||
| 
 | ||||
| 	const channels = await ChannelModel.find({ recipient_ids: this.user_id }).exec(); | ||||
| 	const user = await UserModel.findOne({ id: this.user_id }).exec(); | ||||
| 	const channels = await Channel.find({ recipient_ids: this.user_id }); | ||||
| 	const user = await User.findOneOrFail({ id: this.user_id }); | ||||
| 	if (!user) return this.close(CLOSECODES.Authentication_failed); | ||||
| 
 | ||||
| 	const public_user = { | ||||
| @ -76,10 +64,10 @@ export async function onIdentify(this: WebSocket, data: Payload) { | ||||
| 		bot: user.bot, | ||||
| 	}; | ||||
| 
 | ||||
| 	const guilds = await GuildModel.find({ id: { $in: user.guilds } }) | ||||
| 		.populate({ path: "joined_at", match: { id: this.user_id } }) | ||||
| 		.exec(); | ||||
| 
 | ||||
| 	const guilds = await Guild.find({ id: { $in: user.guilds } }).populate({ | ||||
| 		path: "joined_at", | ||||
| 		match: { id: this.user_id }, | ||||
| 	}); | ||||
| 	const privateUser = { | ||||
| 		avatar: user.avatar, | ||||
| 		mobile: user.mobile, | ||||
| @ -104,9 +92,9 @@ export async function onIdentify(this: WebSocket, data: Payload) { | ||||
| 	const d: ReadyEventData = { | ||||
| 		v: 8, | ||||
| 		user: privateUser, | ||||
| 		user_settings: user.user_settings, | ||||
| 		user_settings: user.settings, | ||||
| 		// @ts-ignore
 | ||||
| 		guilds: toObject(guilds).map((x) => { | ||||
| 		guilds: guilds.map((x) => { | ||||
| 			// @ts-ignore
 | ||||
| 			x.guild_hashes = { | ||||
| 				channels: { omitted: false, hash: "y4PV2fZ0gmo" }, | ||||
| @ -131,7 +119,7 @@ export async function onIdentify(this: WebSocket, data: Payload) { | ||||
| 			version: 642, | ||||
| 		}, | ||||
| 		// @ts-ignore
 | ||||
| 		private_channels: toObject(channels).map((x: ChannelDocument) => { | ||||
| 		private_channels: channels.map((x): ChannelDocument => { | ||||
| 			x.recipient_ids = x.recipients.map((y: any) => y.id); | ||||
| 			delete x.recipients; | ||||
| 			return x; | ||||
| @ -144,17 +132,12 @@ export async function onIdentify(this: WebSocket, data: Payload) { | ||||
| 				consented: false, // TODO
 | ||||
| 			}, | ||||
| 		}, | ||||
| 		country_code: user.user_settings.locale, | ||||
| 		country_code: user.settings.locale, | ||||
| 		friend_suggestion_count: 0, // TODO
 | ||||
| 		// @ts-ignore
 | ||||
| 		experiments: experiments, // TODO
 | ||||
| 		guild_join_requests: [], // TODO what is this?
 | ||||
| 		users: [ | ||||
| 			public_user, | ||||
| 			...toObject(channels) | ||||
| 				.map((x: any) => x.recipients) | ||||
| 				.flat(), | ||||
| 		].unique(), // TODO
 | ||||
| 		users: [public_user, ...channels.map((x: any) => x.recipients).flat()].unique(), // TODO
 | ||||
| 		merged_members: merged_members, | ||||
| 		// shard // TODO: only for bots sharding
 | ||||
| 		// application // TODO for applications
 | ||||
|  | ||||
| @ -18,45 +18,43 @@ export async function onLazyRequest(this: WebSocket, { d }: Payload) { | ||||
| 	permissions.hasThrow("VIEW_CHANNEL"); | ||||
| 
 | ||||
| 	// MongoDB query to retrieve all hoisted roles and join them with the members and users collection
 | ||||
| 	const roles = toObject( | ||||
| 		await db | ||||
| 			.collection("roles") | ||||
| 			.aggregate([ | ||||
| 				{ | ||||
| 					$match: { | ||||
| 						guild_id, | ||||
| 						// hoist: true // TODO: also match @everyone role
 | ||||
| 					}, | ||||
| 	const roles = await db | ||||
| 		.collection("roles") | ||||
| 		.aggregate([ | ||||
| 			{ | ||||
| 				$match: { | ||||
| 					guild_id, | ||||
| 					// hoist: true // TODO: also match @everyone role
 | ||||
| 				}, | ||||
| 				{ $sort: { position: 1 } }, | ||||
| 				{ | ||||
| 					$lookup: { | ||||
| 						from: "members", | ||||
| 						let: { id: "$id" }, | ||||
| 						pipeline: [ | ||||
| 							{ $match: { $expr: { $in: ["$$id", "$roles"] } } }, | ||||
| 							{ $limit: 100 }, | ||||
| 							{ | ||||
| 								$lookup: { | ||||
| 									from: "users", | ||||
| 									let: { user_id: "$id" }, | ||||
| 									pipeline: [ | ||||
| 										{ $match: { $expr: { $eq: ["$id", "$$user_id"] } } }, | ||||
| 										{ $project: PublicUserProjection }, | ||||
| 									], | ||||
| 									as: "user", | ||||
| 								}, | ||||
| 			}, | ||||
| 			{ $sort: { position: 1 } }, | ||||
| 			{ | ||||
| 				$lookup: { | ||||
| 					from: "members", | ||||
| 					let: { id: "$id" }, | ||||
| 					pipeline: [ | ||||
| 						{ $match: { $expr: { $in: ["$$id", "$roles"] } } }, | ||||
| 						{ $limit: 100 }, | ||||
| 						{ | ||||
| 							$lookup: { | ||||
| 								from: "users", | ||||
| 								let: { user_id: "$id" }, | ||||
| 								pipeline: [ | ||||
| 									{ $match: { $expr: { $eq: ["$id", "$$user_id"] } } }, | ||||
| 									{ $project: PublicUserProjection }, | ||||
| 								], | ||||
| 								as: "user", | ||||
| 							}, | ||||
| 							{ | ||||
| 								$unwind: "$user", | ||||
| 							}, | ||||
| 						], | ||||
| 						as: "members", | ||||
| 					}, | ||||
| 						}, | ||||
| 						{ | ||||
| 							$unwind: "$user", | ||||
| 						}, | ||||
| 					], | ||||
| 					as: "members", | ||||
| 				}, | ||||
| 			]) | ||||
| 			.toArray() | ||||
| 	); | ||||
| 			}, | ||||
| 		]) | ||||
| 		.toArray(); | ||||
| 
 | ||||
| 	const groups = roles.map((x) => ({ id: x.id === guild_id ? "online" : x.id, count: x.members.length })); | ||||
| 	const member_count = roles.reduce((a, b) => b.members.length + a, 0); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Flam3rboy
						Flam3rboy