2026-05-15 23:03:35 +07:00
|
|
|
import { loadConfig } from "./config";
|
2026-06-06 02:46:38 +07:00
|
|
|
import { createDb } from "./db";
|
2026-05-16 00:06:13 +07:00
|
|
|
import { attachBotHandlers } from "./discord/bot";
|
2026-05-15 23:03:35 +07:00
|
|
|
import { createDiscordClient } from "./discord/client";
|
2026-05-15 23:45:47 +07:00
|
|
|
import { registerGuildCommandsWithToken } from "./discord/registerCommands";
|
2026-06-06 02:46:38 +07:00
|
|
|
import { startBoostCleanup } from "./services/boostCleanupService";
|
|
|
|
|
import { DiscordRoleRepository } from "./services/discordRoleRepository";
|
|
|
|
|
import { DrizzleBoosterRoleStore } from "./services/drizzleBoosterRoleStore";
|
2026-05-21 15:27:10 +07:00
|
|
|
import { logger } from "./logger";
|
2026-05-15 23:03:35 +07:00
|
|
|
|
|
|
|
|
const config = loadConfig();
|
2026-05-21 15:27:10 +07:00
|
|
|
logger.info("Registering guild commands", { guildId: config.discordGuildId });
|
2026-05-15 23:45:47 +07:00
|
|
|
await registerGuildCommandsWithToken(config.discordToken, {
|
|
|
|
|
clientId: config.discordClientId,
|
|
|
|
|
guildId: config.discordGuildId
|
|
|
|
|
});
|
2026-05-21 15:27:10 +07:00
|
|
|
logger.info("Guild commands registered", { guildId: config.discordGuildId });
|
2026-05-15 23:45:47 +07:00
|
|
|
|
2026-05-15 23:03:35 +07:00
|
|
|
const client = createDiscordClient();
|
2026-06-06 02:46:38 +07:00
|
|
|
const db = createDb(config.databaseUrl);
|
|
|
|
|
const store = new DrizzleBoosterRoleStore(db);
|
2026-05-15 23:03:35 +07:00
|
|
|
|
2026-05-15 23:45:47 +07:00
|
|
|
client.once("clientReady", () => {
|
2026-05-21 15:27:10 +07:00
|
|
|
logger.info("Discord client ready", { bot: client.user?.tag ?? "unknown bot" });
|
2026-06-06 02:46:38 +07:00
|
|
|
|
|
|
|
|
// Start periodic cleanup for boost ends missed during downtime
|
|
|
|
|
startBoostCleanup(
|
|
|
|
|
client,
|
|
|
|
|
store,
|
|
|
|
|
(guild) => new DiscordRoleRepository(guild, config.boosterRoleAnchorRoleId),
|
|
|
|
|
{
|
|
|
|
|
intervalMs: config.boostCleanupIntervalMs,
|
|
|
|
|
boosterEligibilityRoleId: config.boosterEligibilityRoleId,
|
|
|
|
|
anchorRoleId: config.boosterRoleAnchorRoleId,
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
logger.info("Boost cleanup started", { intervalMs: config.boostCleanupIntervalMs });
|
2026-05-15 23:03:35 +07:00
|
|
|
});
|
|
|
|
|
|
2026-06-06 02:46:38 +07:00
|
|
|
attachBotHandlers(client, config);
|
|
|
|
|
|
2026-05-21 15:27:10 +07:00
|
|
|
logger.info("Logging in Discord client");
|
2026-05-15 23:03:35 +07:00
|
|
|
await client.login(config.discordToken);
|