diff --git a/src/gateway/events/Close.ts b/src/gateway/events/Close.ts
index dbbc41d8a..909ede968 100644
--- a/src/gateway/events/Close.ts
+++ b/src/gateway/events/Close.ts
@@ -17,16 +17,7 @@
*/
import { WebSocket } from "@spacebar/gateway";
-import {
- emitEvent,
- PresenceUpdateEvent,
- PrivateSessionProjection,
- Session,
- SessionsReplace,
- User,
- VoiceState,
- VoiceStateUpdateEvent,
-} from "@spacebar/util";
+import { emitEvent, PresenceUpdateEvent, PrivateSessionProjection, Session, SessionsReplace, User, VoiceState, VoiceStateUpdateEvent } from "@spacebar/util";
export async function Close(this: WebSocket, code: number, reason: Buffer) {
console.log("[WebSocket] closed", code, reason.toString());
@@ -44,11 +35,7 @@ export async function Close(this: WebSocket, code: number, reason: Buffer) {
});
// clear the voice state for this session if user was in voice channel
- if (
- voiceState &&
- voiceState.session_id === this.session_id &&
- voiceState.channel_id
- ) {
+ if (voiceState && voiceState.session_id === this.session_id && voiceState.channel_id) {
const prevGuildId = voiceState.guild_id;
const prevChannelId = voiceState.channel_id;
@@ -83,7 +70,7 @@ export async function Close(this: WebSocket, code: number, reason: Buffer) {
user_id: this.user_id,
data: sessions,
} as SessionsReplace);
- const session = sessions.first() || {
+ const session = sessions[0] || {
activities: [],
client_status: {},
status: "offline",
diff --git a/src/gateway/opcodes/LazyRequest.ts b/src/gateway/opcodes/LazyRequest.ts
index 94dc7517b..979735237 100644
--- a/src/gateway/opcodes/LazyRequest.ts
+++ b/src/gateway/opcodes/LazyRequest.ts
@@ -16,28 +16,11 @@
along with this program. If not, see .
*/
-import {
- getDatabase,
- getPermission,
- listenEvent,
- Member,
- Role,
- Session,
- User,
- Presence,
- Channel,
- Permissions,
-} from "@spacebar/util";
-import {
- WebSocket,
- Payload,
- handlePresenceUpdate,
- OPCODES,
- Send,
-} from "@spacebar/gateway";
+import { getDatabase, getPermission, listenEvent, Member, Role, Session, User, Presence, Channel, Permissions } from "@spacebar/util";
+import { WebSocket, Payload, handlePresenceUpdate, OPCODES, Send } from "@spacebar/gateway";
import murmur from "murmurhash-js/murmurhash3_gc";
import { check } from "./instanceOf";
-import { LazyRequestSchema } from "@spacebar/schemas"
+import { LazyRequestSchema } from "@spacebar/schemas";
// TODO: only show roles/members that have access to this channel
// TODO: config: to list all members (even those who are offline) sorted by role, or just those who are online
@@ -53,14 +36,10 @@ const getMostRelevantSession = (sessions: Session[]) => {
};
// sort sessions by relevance
sessions = sessions.sort((a, b) => {
- return (
- statusMap[a.status] -
- statusMap[b.status] +
- ((a.activities?.length ?? 0) - (b.activities?.length ?? 0)) * 2
- );
+ return statusMap[a.status] - statusMap[b.status] + ((a.activities?.length ?? 0) - (b.activities?.length ?? 0)) * 2;
});
- return sessions.first();
+ return sessions[0];
};
async function getMembers(guild_id: string, range: [number, number]) {
@@ -79,10 +58,7 @@ async function getMembers(guild_id: string, range: [number, number]) {
.leftJoinAndSelect("member.user", "user")
.leftJoinAndSelect("user.sessions", "session")
.addSelect("user.settings")
- .addSelect(
- "CASE WHEN session.status IS NULL OR session.status = 'offline' OR session.status = 'invisible' THEN 0 ELSE 1 END",
- "_status",
- )
+ .addSelect("CASE WHEN session.status IS NULL OR session.status = 'offline' OR session.status = 'invisible' THEN 0 ELSE 1 END", "_status")
.orderBy("_status", "DESC")
.addOrderBy("role.position", "DESC")
.addOrderBy("user.username", "ASC")
@@ -118,9 +94,7 @@ async function getMembers(guild_id: string, range: [number, number]) {
const offlineItems = [];
for (const role of member_roles) {
- const [role_members, other_members] = members.partition(
- (m: Member) => !!m.roles.find((r) => r.id === role.id),
- );
+ const [role_members, other_members] = members.partition((m: Member) => !!m.roles.find((r) => r.id === role.id));
const group = {
count: role_members.length,
id: role.id === guild_id ? "online" : role.id,
@@ -130,13 +104,9 @@ async function getMembers(guild_id: string, range: [number, number]) {
groups.push(group);
for (const member of role_members) {
- const roles = member.roles
- .filter((x: Role) => x.id !== guild_id)
- .map((x: Role) => x.id);
+ const roles = member.roles.filter((x: Role) => x.id !== guild_id).map((x: Role) => x.id);
- const session: Session | undefined = getMostRelevantSession(
- member.user.sessions,
- );
+ const session: Session | undefined = getMostRelevantSession(member.user.sessions);
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
@@ -157,11 +127,7 @@ async function getMembers(guild_id: string, range: [number, number]) {
},
};
- if (
- !session ||
- session.status == "invisible" ||
- session.status == "offline"
- ) {
+ if (!session || session.status == "invisible" || session.status == "offline") {
item.member.presence.status = "offline";
offlineItems.push(item);
group.count--;
@@ -188,24 +154,14 @@ async function getMembers(guild_id: string, range: [number, number]) {
items,
groups,
range,
- members: items
- .map((x) =>
- "member" in x
- ? { ...x.member, settings: undefined }
- : undefined,
- )
- .filter((x) => !!x),
+ members: items.map((x) => ("member" in x ? { ...x.member, settings: undefined } : undefined)).filter((x) => !!x),
};
}
async function subscribeToMemberEvents(this: WebSocket, user_id: string) {
if (this.events[user_id]) return false; // already subscribed as friend
if (this.member_events[user_id]) return false; // already subscribed in member list
- this.member_events[user_id] = await listenEvent(
- user_id,
- handlePresenceUpdate.bind(this),
- this.listen_options,
- );
+ this.member_events[user_id] = await listenEvent(user_id, handlePresenceUpdate.bind(this), this.listen_options);
return true;
}
@@ -213,8 +169,7 @@ export async function onLazyRequest(this: WebSocket, { d }: Payload) {
const startTime = Date.now();
// TODO: check data
check.call(this, LazyRequestSchema, d);
- const { guild_id, typing, channels, activities, members } =
- d as LazyRequestSchema;
+ const { guild_id, typing, channels, activities, members } = d as LazyRequestSchema;
if (members) {
// Client has requested a PRESENCE_UPDATE for specific member
@@ -222,10 +177,7 @@ export async function onLazyRequest(this: WebSocket, { d }: Payload) {
await Promise.all([
members.map(async (x) => {
if (!x) return;
- const didSubscribe = await subscribeToMemberEvents.call(
- this,
- x,
- );
+ const didSubscribe = await subscribeToMemberEvents.call(this, x);
if (!didSubscribe) return;
// if we didn't subscribe just now, this is a new subscription
@@ -257,7 +209,7 @@ export async function onLazyRequest(this: WebSocket, { d }: Payload) {
if (!channels) throw new Error("Must provide channel ranges");
- const channel_id = Object.keys(channels || {}).first();
+ const channel_id = Object.keys(channels || {})[0];
if (!channel_id) return;
const permissions = await getPermission(this.user_id, guild_id, channel_id);
@@ -267,9 +219,7 @@ export async function onLazyRequest(this: WebSocket, { d }: Payload) {
if (!Array.isArray(ranges)) throw new Error("Not a valid Array");
const member_count = await Member.count({ where: { guild_id } });
- const ops = await Promise.all(
- ranges.map((x) => getMembers(guild_id, x as [number, number])),
- );
+ const ops = await Promise.all(ranges.map((x) => getMembers(guild_id, x as [number, number])));
let list_id = "everyone";
@@ -282,10 +232,8 @@ export async function onLazyRequest(this: WebSocket, { d }: Payload) {
channel.permission_overwrites.forEach((overwrite) => {
const { id, allow, deny } = overwrite;
- if (BigInt(allow) & Permissions.FLAGS.VIEW_CHANNEL)
- perms.push(`allow:${id}`);
- else if (BigInt(deny) & Permissions.FLAGS.VIEW_CHANNEL)
- perms.push(`deny:${id}`);
+ if (BigInt(allow) & Permissions.FLAGS.VIEW_CHANNEL) perms.push(`allow:${id}`);
+ else if (BigInt(deny) & Permissions.FLAGS.VIEW_CHANNEL) perms.push(`deny:${id}`);
});
if (perms.length > 0) {
@@ -317,9 +265,7 @@ export async function onLazyRequest(this: WebSocket, { d }: Payload) {
op: "SYNC",
range: x.range,
})),
- online_count:
- member_count -
- (groups.find((x) => x.id == "offline")?.count ?? 0),
+ online_count: member_count - (groups.find((x) => x.id == "offline")?.count ?? 0),
member_count,
id: list_id,
guild_id,
@@ -327,7 +273,5 @@ export async function onLazyRequest(this: WebSocket, { d }: Payload) {
},
});
- console.log(
- `[Gateway] LAZY_REQUEST ${guild_id} ${channel_id} took ${Date.now() - startTime}ms`,
- );
+ console.log(`[Gateway] LAZY_REQUEST ${guild_id} ${channel_id} took ${Date.now() - startTime}ms`);
}
diff --git a/src/util/util/extensions/Array.test.ts b/src/util/util/extensions/Array.test.ts
index d41442c99..45c010384 100644
--- a/src/util/util/extensions/Array.test.ts
+++ b/src/util/util/extensions/Array.test.ts
@@ -1,11 +1,10 @@
import moduleAlias from "module-alias";
moduleAlias();
-import './Array';
-import { describe, it } from 'node:test';
-import assert from 'node:assert/strict';
+import "./Array";
+import { describe, it } from "node:test";
+import assert from "node:assert/strict";
describe("Array extensions", () => {
-
it("containsAll", () => {
const arr = [1, 2, 3, 4, 5];
assert(arr.containsAll([1, 2]));
@@ -27,8 +26,14 @@ describe("Array extensions", () => {
it("single", () => {
const arr = [1, 2, 3, 4, 5];
- assert.strictEqual(arr.single((n) => n === 3), 3);
- assert.strictEqual(arr.single((n) => n === 6), null);
+ assert.strictEqual(
+ arr.single((n) => n === 3),
+ 3,
+ );
+ assert.strictEqual(
+ arr.single((n) => n === 6),
+ null,
+ );
assert.throws(() => arr.single((n) => n > 2));
});
@@ -55,18 +60,6 @@ describe("Array extensions", () => {
assert.deepEqual(arr, [1, 2, 4, 5]);
});
- it("first", () => {
- const arr = [1, 2, 3];
- assert.strictEqual(arr.first(), 1);
- assert.strictEqual([].first(), undefined);
- });
-
- it("last", () => {
- const arr = [1, 2, 3];
- assert.strictEqual(arr.last(), 3);
- assert.strictEqual([].last(), undefined);
- });
-
it("distinct", () => {
const arr = [1, 2, 2, 3, 3, 3];
assert.deepEqual(arr.distinct(), [1, 2, 3]);
@@ -75,8 +68,14 @@ describe("Array extensions", () => {
it("distinctBy", () => {
const arr = [{ id: 1 }, { id: 2 }, { id: 1 }, { id: 3 }];
- assert.deepEqual(arr.distinctBy((x) => x.id), [{ id: 1 }, { id: 2 }, { id: 3 }]);
- assert.deepEqual([].distinctBy((x) => x), []);
+ assert.deepEqual(
+ arr.distinctBy((x) => x.id),
+ [{ id: 1 }, { id: 2 }, { id: 3 }],
+ );
+ assert.deepEqual(
+ [].distinctBy((x) => x),
+ [],
+ );
});
it("intersect", () => {
@@ -98,5 +97,4 @@ describe("Array extensions", () => {
// @ts-expect-error
assert.deepEqual([].except(arr2), []);
});
-
-});
\ No newline at end of file
+});
diff --git a/src/util/util/extensions/Array.ts b/src/util/util/extensions/Array.ts
index c32b86ce8..95ad0f3bf 100644
--- a/src/util/util/extensions/Array.ts
+++ b/src/util/util/extensions/Array.ts
@@ -24,8 +24,6 @@ declare global {
forEachAsync(callback: (elem: T, index: number, array: T[]) => Promise): Promise;
filterAsync(callback: (elem: T, index: number, array: T[]) => Promise): Promise;
remove(item: T): void;
- first(): T | undefined;
- last(): T | undefined;
distinct(): T[];
distinctBy(key: (elem: T) => K): T[];
intersect(other: T[]): T[];
@@ -126,21 +124,14 @@ if (!Array.prototype.remove)
Array.prototype.remove = function (this: T[], item: T) {
return arrayRemove.call(this, item);
};
-if (!Array.prototype.first)
- Array.prototype.first = function (this: T[]) {
- return arrayFirst.call(this);
- };
-if (!Array.prototype.last)
- Array.prototype.last = function (this: T[]) {
- return arrayLast.call(this);
- };
+
if (!Array.prototype.distinct)
Array.prototype.distinct = function (this: T[]) {
return arrayDistinct.call(this);
};
if (!Array.prototype.distinctBy)
Array.prototype.distinctBy = function (this: T[], key: (elem: T) => K) {
- return arrayDistinctBy.call(this, key as ((elem: unknown) => unknown));
+ return arrayDistinctBy.call(this, key as (elem: unknown) => unknown);
};
if (!Array.prototype.intersect)
Array.prototype.intersect = function (this: T[], other: T[]) {
@@ -149,4 +140,4 @@ if (!Array.prototype.intersect)
if (!Array.prototype.except)
Array.prototype.except = function (this: T[], other: T[]) {
return arrayExcept.call(this, other);
- };
\ No newline at end of file
+ };