/[sudobot]/trunk/extensions/archiver/src/server/ArchiveServer.ts
ViewVC logotype

Contents of /trunk/extensions/archiver/src/server/ArchiveServer.ts

Parent Directory Parent Directory | Revision Log Revision Log


Revision 632 - (show annotations)
Thu Oct 10 17:53:11 2024 UTC (5 months, 2 weeks ago) by rakinar2
File MIME type: application/typescript
File size: 2098 byte(s)
chore: synchronize

1 import express from "express";
2 import path from "path";
3 import { MessageType } from "../types/MessageType";
4
5 class ArchiveServer {
6 private readonly app: express.Application;
7 private readonly port: number;
8 private readonly db: import("bun:sqlite").Database | import("better-sqlite3").Database;
9
10 public constructor(
11 db: import("bun:sqlite").Database | import("better-sqlite3").Database,
12 port: number = +(process.env.ARCHIVE_SERVER_PORT ?? 7575) || 7575
13 ) {
14 this.db = db;
15 this.app = express();
16 this.port = port;
17 }
18
19 private setup() {
20 this.app.set("view engine", "ejs");
21 this.app.set("views", path.join(__dirname, "../html"));
22 this.app.use(express.static(path.join(__dirname, "../../public")));
23 this.app.get(
24 "/guilds/:guildId/channels/:channelId/messages",
25 this.handleGetMessages.bind(this)
26 );
27 }
28
29 private prepare(query: string, params: string[] = [], results = true) {
30 const db = this.db as unknown as import("bun:sqlite").Database;
31 const compiled = db.prepare(query, params);
32
33 if (results) {
34 return compiled.all();
35 }
36
37 compiled.run();
38 }
39
40 private handleGetMessages(
41 request: express.Request<{
42 guildId: string;
43 channelId: string;
44 }>,
45 response: express.Response
46 ) {
47 const messages = this.prepare(
48 "SELECT * FROM messages JOIN users ON users.id = messages.userId WHERE guildId = ? AND channelId = ? ORDER BY timestamp DESC;",
49 [request.params.guildId, request.params.channelId]
50 );
51
52 response.render("messages", {
53 guildId: request.params.guildId,
54 channelId: request.params.channelId,
55 messages
56 });
57 }
58
59 public start() {
60 this.setup();
61 this.app.listen(this.port, () => {
62 process.send?.({
63 type: MessageType.ServerReady,
64 port: this.port
65 });
66 });
67 }
68 }
69
70 export default ArchiveServer;

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26