Merge branch 'spacebarchat:master' into pass_length_check

This commit is contained in:
ngn13 2023-06-11 13:27:23 +03:00 committed by GitHub
commit ece68990f8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 28 additions and 1 deletions

BIN
package-lock.json generated

Binary file not shown.

View File

@ -49,6 +49,7 @@
"@types/jsonwebtoken": "^8.5.9",
"@types/morgan": "^1.9.3",
"@types/multer": "^1.4.7",
"@types/murmurhash-js": "^1.0.4",
"@types/node": "^18.7.20",
"@types/node-fetch": "^2.6.2",
"@types/node-os-utils": "^1.3.0",
@ -94,6 +95,7 @@
"module-alias": "^2.2.2",
"morgan": "^1.10.0",
"multer": "^1.4.5-lts.1",
"murmurhash-js": "^1.0.0",
"node-2fa": "^2.0.3",
"node-fetch": "^2.6.7",
"node-os-utils": "^1.3.7",

View File

@ -27,6 +27,8 @@ import {
User,
Presence,
partition,
Channel,
Permissions,
} from "@spacebar/util";
import {
WebSocket,
@ -35,6 +37,7 @@ import {
OPCODES,
Send,
} from "@spacebar/gateway";
import murmur from "murmurhash-js/murmurhash3_gc";
import { check } from "./instanceOf";
// TODO: only show roles/members that have access to this channel
@ -271,6 +274,28 @@ export async function onLazyRequest(this: WebSocket, { d }: Payload) {
ranges.map((x) => getMembers(guild_id, x as [number, number])),
);
let list_id = "everyone";
const channel = await Channel.findOneOrFail({
where: { id: channel_id },
});
if (channel.permission_overwrites) {
const perms: string[] = [];
channel.permission_overwrites.forEach((overwrite) => {
const { id, allow, deny } = overwrite;
if (allow.toBigInt() & Permissions.FLAGS.VIEW_CHANNEL)
perms.push(`allow:${id}`);
else if (deny.toBigInt() & Permissions.FLAGS.VIEW_CHANNEL)
perms.push(`deny:${id}`);
});
if (perms.length > 0) {
list_id = murmur(perms.sort().join(",")).toString();
}
}
// TODO: unsubscribe member_events that are not in op.members
ops.forEach((op) => {
@ -299,7 +324,7 @@ export async function onLazyRequest(this: WebSocket, { d }: Payload) {
member_count -
(groups.find((x) => x.id == "offline")?.count ?? 0),
member_count,
id: "everyone",
id: list_id,
guild_id,
groups,
},