diff --git a/gateway/src/listener/listener.ts b/gateway/src/listener/listener.ts
index 79659a1f..060de65b 100644
--- a/gateway/src/listener/listener.ts
+++ b/gateway/src/listener/listener.ts
@@ -117,7 +117,7 @@ export async function setupListener(this: WebSocket) {
// TODO: only subscribe for events that are in the connection intents
async function consume(this: WebSocket, opts: EventOpts) {
const { data, event } = opts;
- const id = data.id as string;
+ let id = data.id as string;
const permission = this.permissions[id] || new Permissions("ADMINISTRATOR"); // default permission for dm
const consumer = consume.bind(this);
@@ -138,6 +138,10 @@ async function consume(this: WebSocket, opts: EventOpts) {
this.listen_options
);
break;
+ case "GUILD_MEMBER_REMOVE":
+ if (!this.member_events[data.user.id]) break;
+ this.member_events[data.user.id]();
+ break;
case "RELATIONSHIP_REMOVE":
case "CHANNEL_DELETE":
case "GUILD_DELETE":
@@ -149,9 +153,18 @@ async function consume(this: WebSocket, opts: EventOpts) {
!permission
.overwriteChannel(data.permission_overwrites)
.has("VIEW_CHANNEL")
- )
+ ) {
return;
- //No break needed here, we need to call the listenEvent function below
+ }
+ this.events[id] = await listenEvent(id, consumer, listenOpts);
+ break;
+ case "RELATIONSHIP_ADD":
+ this.events[data.user.id] = await listenEvent(
+ data.user.id,
+ handlePresenceUpdate.bind(this),
+ this.listen_options
+ );
+ break;
case "GUILD_CREATE":
this.events[id] = await listenEvent(id, consumer, listenOpts);
break;
diff --git a/gateway/src/opcodes/LazyRequest.ts b/gateway/src/opcodes/LazyRequest.ts
index c304dfe7..2156070f 100644
--- a/gateway/src/opcodes/LazyRequest.ts
+++ b/gateway/src/opcodes/LazyRequest.ts
@@ -1,11 +1,4 @@
-import {
- EVENTEnum,
- EventOpts,
- getPermission,
- listenEvent,
- Member,
- Role,
-} from "@fosscord/util";
+import { getPermission, listenEvent, Member, Role } from "@fosscord/util";
import { LazyRequest } from "../schema/LazyRequest";
import { Send } from "../util/Send";
import { OPCODES } from "../util/Constants";
@@ -47,7 +40,7 @@ async function getMembers(guild_id: string, range: [number, number]) {
const member_roles = members
.map((m) => m.roles)
.flat()
- .unique((r) => r.id);
+ .unique((r: Role) => r.id);
for (const role of member_roles) {
// @ts-ignore
diff --git a/gateway/src/util/SessionUtils.ts b/gateway/src/util/SessionUtils.ts
index c66c7e76..bf854042 100644
--- a/gateway/src/util/SessionUtils.ts
+++ b/gateway/src/util/SessionUtils.ts
@@ -7,5 +7,7 @@ export function genVoiceToken() {
}
function genRanHex(size: number) {
- return [...Array(size)].map(() => Math.floor(Math.random() * 16).toString(16)).join("");
+ return [...Array(size)]
+ .map(() => Math.floor(Math.random() * 16).toString(16))
+ .join("");
}
|