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