diff options
Diffstat (limited to 'src/gateway/opcodes/Identify.ts')
-rw-r--r-- | src/gateway/opcodes/Identify.ts | 46 |
1 files changed, 26 insertions, 20 deletions
diff --git a/src/gateway/opcodes/Identify.ts b/src/gateway/opcodes/Identify.ts index 8d762967..030ca66e 100644 --- a/src/gateway/opcodes/Identify.ts +++ b/src/gateway/opcodes/Identify.ts @@ -42,13 +42,13 @@ import { UserGuildSettings, ReadyGuildDTO, Guild, + UserTokenData, } from "@fosscord/util"; import { Send } from "../util/Send"; import { CLOSECODES, OPCODES } from "../util/Constants"; -import { genSessionId } from "../util/SessionUtils"; import { setupListener } from "../listener/listener"; // import experiments from "./experiments.json"; -const experiments: any = []; +const experiments: unknown[] = []; import { check } from "./instanceOf"; import { Recipient } from "@fosscord/util"; @@ -56,6 +56,8 @@ import { Recipient } from "@fosscord/util"; // TODO: check privileged intents, if defined in the config // TODO: check if already identified +// TODO: Refactor identify ( and lazyrequest, tbh ) + export async function onIdentify(this: WebSocket, data: Payload) { clearTimeout(this.readyTimeout); // TODO: is this needed now that we use `json-bigint`? @@ -65,15 +67,16 @@ export async function onIdentify(this: WebSocket, data: Payload) { const identify: IdentifySchema = data.d; + let decoded: UserTokenData["decoded"]; try { const { jwtSecret } = Config.get().security; - var { decoded } = await checkToken(identify.token, jwtSecret); // will throw an error if invalid + decoded = (await checkToken(identify.token, jwtSecret)).decoded; // will throw an error if invalid } catch (error) { console.error("invalid token", error); return this.close(CLOSECODES.Authentication_failed); } this.user_id = decoded.id; - let session_id = this.session_id; + const session_id = this.session_id; const [user, read_states, members, recipients, session, application] = await Promise.all([ @@ -144,7 +147,7 @@ export async function onIdentify(this: WebSocket, data: Payload) { return this.close(CLOSECODES.Invalid_shard); } } - var users: PublicUser[] = []; + let users: PublicUser[] = []; const merged_members = members.map((x: Member) => { return [ @@ -156,18 +159,18 @@ export async function onIdentify(this: WebSocket, data: Payload) { }, ]; }) as PublicMember[][]; - let guilds = members.map((x) => ({ ...x.guild, joined_at: x.joined_at })); + // TODO: This type is bad. + let guilds: Partial<Guild>[] = members.map((x) => ({ + ...x.guild, + joined_at: x.joined_at, + })); const pending_guilds: typeof guilds = []; - // @ts-ignore - guilds = guilds.map((guild) => { - if (user.bot) { + if (user.bot) + guilds = guilds.map((guild) => { pending_guilds.push(guild); return { id: guild.id, unavailable: true }; - } - - return guild; - }); + }); // TODO: Rewrite this. Perhaps a DTO? const user_guild_settings_entries = members.map((x) => ({ @@ -180,24 +183,25 @@ export async function onIdentify(this: WebSocket, data: Payload) { ...y[1], channel_id: y[0], })), - })) as any as UserGuildSettings[]; + })) as unknown as UserGuildSettings[]; const channels = recipients.map((x) => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment //@ts-ignore - x.channel.recipients = x.channel.recipients?.map((x) => + x.channel.recipients = x.channel.recipients.map((x) => x.user.toPublicUser(), ); //TODO is this needed? check if users in group dm that are not friends are sent in the READY event users = users.concat(x.channel.recipients as unknown as User[]); if (x.channel.isDm()) { - x.channel.recipients = x.channel.recipients!.filter( + x.channel.recipients = x.channel.recipients?.filter( (x) => x.id !== this.user_id, ); } return x.channel; }); - for (let relation of user.relationships) { + for (const relation of user.relationships) { const related_user = relation.to; const public_related_user = { username: related_user.username, @@ -236,7 +240,7 @@ export async function onIdentify(this: WebSocket, data: Payload) { } as PresenceUpdateEvent); }); - read_states.forEach((s: any) => { + read_states.forEach((s: Partial<ReadState>) => { s.id = s.channel_id; delete s.user_id; delete s.channel_id; @@ -275,10 +279,11 @@ export async function onIdentify(this: WebSocket, data: Payload) { }, //TODO: check this code! user: privateUser, user_settings: user.settings, + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore - guilds: guilds.map((x) => { + guilds: guilds.map((x: Guild & { joined_at: Date }) => { return { - ...new ReadyGuildDTO(x as Guild & { joined_at: Date }).toJSON(), + ...new ReadyGuildDTO(x).toJSON(), guild_hashes: {}, joined_at: x.joined_at, }; @@ -307,6 +312,7 @@ export async function onIdentify(this: WebSocket, data: Payload) { }, country_code: user.settings.locale, friend_suggestion_count: 0, // TODO + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore experiments: experiments, // TODO guild_join_requests: [], // TODO what is this? |