From d1e7f3a37e7abd0415698fa9717536817cc7289b Mon Sep 17 00:00:00 2001 From: Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> Date: Sat, 6 Feb 2021 22:33:25 +0100 Subject: :construction: db listener --- src/events/Connection.ts | 7 +++++-- src/listener/listener.ts | 24 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 src/listener/listener.ts (limited to 'src') 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(); + }); +} -- cgit 1.5.1