/** * server.ts * Web server for the scoreboard page. */ import { Database as Database3 } from 'sqlite3'; import { Database, open } from 'sqlite'; import express = require('express'); import 'dotenv/config'; import { logInfo } from './logging'; import { ScoreboardMessageRow, ScoreboardUserRow } from './models'; const app = express(); app.use(express.static('public')); app.set('view engine', 'pug'); const port = process.env.PORT; let db: Database = null; async function openDb() { return open({ filename: 'discord/db.sqlite', driver: Database3 }); } app.get('/', async (req, res) => { const msg1 = await db.all<[ScoreboardMessageRow]>('SELECT * FROM messages ORDER BY reaction_1_count DESC LIMIT 5'); const msg2 = await db.all<[ScoreboardMessageRow]>('SELECT * FROM messages ORDER BY reaction_2_count DESC LIMIT 5'); const msg3 = await db.all<[ScoreboardMessageRow]>('SELECT * FROM messages ORDER BY reaction_3_count DESC LIMIT 5'); const bestMsg = await db.all<[ScoreboardMessageRow]>('SELECT *, SUM(reaction_1_count)+SUM(reaction_2_count)+SUM(reaction_3_count) AS all_reacts FROM messages GROUP BY id ORDER BY all_reacts DESC LIMIT 5'); const funniest = await db.all<[ScoreboardUserRow]>('SELECT * FROM users ORDER BY reaction_1_total DESC'); const realest = await db.all<[ScoreboardUserRow]>('SELECT * FROM users ORDER BY reaction_2_total DESC'); const cunniest = await db.all<[ScoreboardUserRow]>('SELECT * FROM users ORDER BY reaction_3_total DESC'); res.render('index', { funniest, realest, cunniest, msg1, msg2, msg3, bestMsg }); }); app.listen(port, async () => { logInfo('[web] Opening database...'); db = await openDb(); logInfo('[web] Database ready.'); logInfo(`[web] Listening on port ${port}`); });