Files
dc-recorder/src/index.ts

85 lines
2.2 KiB
TypeScript
Raw Normal View History

import "./mock-crc";
import "libsodium-wrappers";
import "@snazzah/davey";
import "dotenv/config";
2026-05-12 19:38:23 +07:00
import { Client } from "discord.js-selfbot-v13";
import { config } from "./config";
import { createChildLogger } from "./logger";
import { discordPlayer } from "./player";
import { VoiceController } from "./voiceController";
2026-05-13 15:28:25 +07:00
import { startWebserver } from "./webserver";
import { registerMessageCapture } from "./moderation/messageCapture";
import { getDatabase } from "./muxer-queue";
const logger = createChildLogger("bot");
2026-05-12 19:38:23 +07:00
const token = config.DISCORD_TOKEN;
2026-05-12 19:38:23 +07:00
const client = new Client();
const voiceController = new VoiceController(client);
const db = getDatabase();
2026-05-12 19:38:23 +07:00
let isShuttingDown = false;
async function gracefulShutdown(signal: string) {
if (isShuttingDown) {
logger.warn(`Already shutting down, ignoring ${signal}`);
return;
}
isShuttingDown = true;
logger.info({ signal }, "Graceful shutdown initiated");
try {
logger.info("Stopping voice connection...");
await voiceController.disconnect();
logger.info("Pausing player...");
discordPlayer.pause();
logger.info("Destroying Discord client...");
try {
client.destroy();
} catch (err) {
logger.warn({ error: err }, "Error destroying client");
}
logger.info("Graceful shutdown completed");
process.exit(0);
} catch (err) {
logger.error({ error: err }, "Error during graceful shutdown");
process.exit(1);
}
}
2026-05-12 19:38:23 +07:00
client.on("ready", async () => {
logger.info({ user: client.user?.tag }, "Bot logged in");
registerMessageCapture(client, db);
startWebserver(config.WEBSERVER_PORT, client, voiceController);
2026-05-12 19:38:23 +07:00
});
client.on("error", (err) => {
logger.error({ error: err }, "Client error");
2026-05-12 19:38:23 +07:00
});
process.on("SIGINT", () => {
gracefulShutdown("SIGINT");
2026-05-12 19:38:23 +07:00
});
process.on("SIGTERM", () => {
gracefulShutdown("SIGTERM");
});
process.on("uncaughtException", (err) => {
logger.error({ error: err }, "Uncaught exception");
gracefulShutdown("uncaughtException");
});
process.on("unhandledRejection", (reason, promise) => {
logger.error({ reason, promise }, "Unhandled rejection");
gracefulShutdown("unhandledRejection");
2026-05-12 19:38:23 +07:00
});
client.login(token);