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?
|