summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/events/Connection.ts7
-rw-r--r--src/listener/listener.ts24
2 files changed, 29 insertions, 2 deletions
diff --git a/src/events/Connection.ts b/src/events/Connection.ts

index 815d84cf..f0c433f7 100644 --- a/src/events/Connection.ts +++ b/src/events/Connection.ts
@@ -5,11 +5,12 @@ import { Message } from "./Message"; import { setHeartbeat } from "../util/setHeartbeat"; import { Send } from "../util/Send"; import { CLOSECODES, OPCODES } from "../util/Constants"; +import { setupListener } from "../listener/listener"; // TODO: check rate limit // TODO: specify rate limit in config -export function Connection(this: Server, socket: WebSocket, request: IncomingMessage) { +export async function Connection(this: Server, socket: WebSocket, request: IncomingMessage) { try { socket.on("close", Close); socket.on("message", Message); @@ -29,13 +30,15 @@ export function Connection(this: Server, socket: WebSocket, request: IncomingMes setHeartbeat(socket); - Send(socket, { + await Send(socket, { op: OPCODES.Hello, d: { heartbeat_interval: 1000 * 30, }, }); + await setupListener.call(socket); + socket.readyTimeout = setTimeout(() => { return socket.close(CLOSECODES.Session_timed_out); }, 1000 * 30); diff --git a/src/listener/listener.ts b/src/listener/listener.ts new file mode 100644
index 00000000..12abaf86 --- /dev/null +++ b/src/listener/listener.ts
@@ -0,0 +1,24 @@ +import { db, User } from "discord-server-util"; +import { ProviderCache } from "lambert-db"; +import { MongodbProviderCache } from "lambert-db/dist/Mongodb"; +import WebSocket from "../util/WebSocket"; + +export async function setupListener(this: WebSocket) { + // TODO: shard guilds (only for bots) + + const user: User = await db.data.users({ id: this.userid }).get(); + + // * MongoDB specific $in query to get all guilds of the user + const guildCache: MongodbProviderCache = await db.data + .guilds({ id: { $id: user.guilds } }) + .cache({ onlyEvents: true }) + .init(); + + guildCache.on("change", (data) => { + console.log(data); + }); + + this.once("close", async () => { + await guildCache.destroy(); + }); +}