From 12763d1c593daabe170cf10e48fb460f86e9bed7 Mon Sep 17 00:00:00 2001 From: MathMan05 Date: Wed, 26 Nov 2025 14:45:19 -0600 Subject: [PATCH] remove distinct --- .../routes/channels/#channel_id/recipients.ts | 32 +++---------------- src/gateway/opcodes/LazyRequest.ts | 5 +-- src/util/entities/Channel.ts | 2 +- src/util/util/extensions/Array.test.ts | 6 ---- src/util/util/extensions/Array.ts | 10 ------ 5 files changed, 7 insertions(+), 48 deletions(-) diff --git a/src/api/routes/channels/#channel_id/recipients.ts b/src/api/routes/channels/#channel_id/recipients.ts index 65160274d..6388cfe21 100644 --- a/src/api/routes/channels/#channel_id/recipients.ts +++ b/src/api/routes/channels/#channel_id/recipients.ts @@ -17,15 +17,7 @@ */ import { route } from "@spacebar/api"; -import { - Channel, - ChannelRecipientAddEvent, - DiscordApiErrors, - DmChannelDTO, - emitEvent, - Recipient, - User, -} from "@spacebar/util"; +import { Channel, ChannelRecipientAddEvent, DiscordApiErrors, DmChannelDTO, emitEvent, Recipient, User } from "@spacebar/util"; import { Request, Response, Router } from "express"; import { ChannelType, PublicUserProjection } from "@spacebar/schemas"; @@ -47,24 +39,16 @@ router.put( }); if (channel.type !== ChannelType.GROUP_DM) { - const recipients = [ - ...(channel.recipients?.map((r) => r.user_id) || []), - user_id, - ].distinct(); + const recipients = [...new Set([...(channel.recipients?.map((r) => r.user_id) || []), user_id])]; - const new_channel = await Channel.createDMChannel( - recipients, - req.user_id, - ); + const new_channel = await Channel.createDMChannel(recipients, req.user_id); return res.status(201).json(new_channel); } else { if (channel.recipients?.map((r) => r.user_id).includes(user_id)) { throw DiscordApiErrors.INVALID_RECIPIENT; //TODO is this the right error? } - channel.recipients?.push( - Recipient.create({ channel_id: channel_id, user_id: user_id }), - ); + channel.recipients?.push(Recipient.create({ channel_id: channel_id, user_id: user_id })); await channel.save(); await emitEvent({ @@ -103,13 +87,7 @@ router.delete( where: { id: channel_id }, relations: ["recipients"], }); - if ( - !( - channel.type === ChannelType.GROUP_DM && - (channel.owner_id === req.user_id || user_id === req.user_id) - ) - ) - throw DiscordApiErrors.MISSING_PERMISSIONS; + if (!(channel.type === ChannelType.GROUP_DM && (channel.owner_id === req.user_id || user_id === req.user_id))) throw DiscordApiErrors.MISSING_PERMISSIONS; if (!channel.recipients?.map((r) => r.user_id).includes(user_id)) { throw DiscordApiErrors.INVALID_RECIPIENT; //TODO is this the right error? diff --git a/src/gateway/opcodes/LazyRequest.ts b/src/gateway/opcodes/LazyRequest.ts index e7490ff3a..bd22bdb09 100644 --- a/src/gateway/opcodes/LazyRequest.ts +++ b/src/gateway/opcodes/LazyRequest.ts @@ -254,10 +254,7 @@ export async function onLazyRequest(this: WebSocket, { d }: Payload) { }); }); - const groups = ops - .map((x) => x.groups) - .flat() - .distinct(); + const groups = [...new Set(ops.map((x) => x.groups).flat())]; await Send(this, { op: OPCODES.Dispatch, diff --git a/src/util/entities/Channel.ts b/src/util/entities/Channel.ts index 39ab04e4b..ff3de280a 100644 --- a/src/util/entities/Channel.ts +++ b/src/util/entities/Channel.ts @@ -255,7 +255,7 @@ export class Channel extends BaseClass { } static async createDMChannel(recipients: string[], creator_user_id: string, name?: string) { - recipients = recipients.distinct().filter((x) => x !== creator_user_id); + recipients = [...new Set(recipients.distinct().filter((x) => x !== creator_user_id))]; // TODO: check config for max number of recipients /** if you want to disallow note to self channels, uncomment the conditional below diff --git a/src/util/util/extensions/Array.test.ts b/src/util/util/extensions/Array.test.ts index 916192517..3550654ab 100644 --- a/src/util/util/extensions/Array.test.ts +++ b/src/util/util/extensions/Array.test.ts @@ -19,10 +19,4 @@ describe("Array extensions", () => { arr.remove(6); assert.deepEqual(arr, [1, 2, 4, 5]); }); - - it("distinct", () => { - const arr = [1, 2, 2, 3, 3, 3]; - assert.deepEqual(arr.distinct(), [1, 2, 3]); - assert.deepEqual([].distinct(), []); - }); }); diff --git a/src/util/util/extensions/Array.ts b/src/util/util/extensions/Array.ts index 74cceb769..58ec0a1b7 100644 --- a/src/util/util/extensions/Array.ts +++ b/src/util/util/extensions/Array.ts @@ -20,7 +20,6 @@ declare global { interface Array { partition(filter: (elem: T) => boolean): [T[], T[]]; remove(item: T): void; - distinct(): T[]; } } @@ -39,10 +38,6 @@ export function arrayRemove(this: T[], item: T): void { } } -export function arrayDistinct(this: T[]): T[] { - return Array.from(new Set(this)); -} - // register extensions if (!Array.prototype.partition) Array.prototype.partition = function (this: T[], filter: (elem: T) => boolean) { @@ -53,8 +48,3 @@ if (!Array.prototype.remove) Array.prototype.remove = function (this: T[], item: T) { return arrayRemove.call(this, item); }; - -if (!Array.prototype.distinct) - Array.prototype.distinct = function (this: T[]) { - return arrayDistinct.call(this); - };