-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.ts
60 lines (55 loc) · 1.54 KB
/
main.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import { DenoKvLeaderboardClient } from "lc-dailies/lib/leaderboard/denokv/mod.ts";
import * as lc from "lc-dailies/lib/lc/mod.ts";
import * as api from "lc-dailies/lib/api/api.ts";
import { executeDailyWebhook } from "lc-dailies/lib/api/dailies.ts";
if (import.meta.main) {
await main();
}
async function main() {
const kv = await Deno.openKv(Deno.env.get("KV_URL")!);
const lcClient = new lc.LCClient();
const leaderboardClient = new DenoKvLeaderboardClient(
kv,
lcClient,
);
const discordApplicationID = Deno.env.get("DISCORD_APPLICATION_ID")!;
const discordChannelID = Deno.env.get("DISCORD_CHANNEL_ID")!;
const discordPublicKey = Deno.env.get("DISCORD_PUBLIC_KEY")!;
const discordToken = Deno.env.get("DISCORD_TOKEN")!;
const router = await api.makeAPIRouter({
leaderboardClient,
discordApplicationID,
discordChannelID,
discordPublicKey,
discordToken,
});
Deno.cron(
"sync leaderboard",
// Sync at 5 minutes before every hour.
"55 * * * *",
async () => {
await leaderboardClient.sync();
},
);
Deno.cron(
"execute daily webhook",
// Execute every day at 12:00:000 AM UTC.
"0 0 * * *",
async () => {
const webhookURL = Deno.env.get("DISCORD_WEBHOOK_URL")!;
await executeDailyWebhook(
lcClient,
leaderboardClient,
webhookURL,
);
},
);
const port = Number(Deno.env.get("PORT"));
Deno.serve(
{
port,
onListen: api.makeOnListen(port, discordApplicationID),
},
(request) => router.fetch(request),
);
}