feat: integrate message capture into bot startup

- Register message capture handlers on bot ready
- Export getDatabase function from muxer-queue
- Initialize database schema for messages and attachments
This commit is contained in:
MythEclipse
2026-05-13 19:34:15 +07:00
parent b13dfb2ece
commit 738f5cfbd6
2 changed files with 7 additions and 8 deletions

View File

@@ -8,16 +8,17 @@ import { createChildLogger } from "./logger";
import { discordPlayer } from "./player"; import { discordPlayer } from "./player";
import { VoiceController } from "./voiceController"; import { VoiceController } from "./voiceController";
import { startWebserver } from "./webserver"; import { startWebserver } from "./webserver";
import { registerMessageCapture } from "./moderation/messageCapture";
import { getDatabase } from "./muxer-queue";
const logger = createChildLogger("bot"); const logger = createChildLogger("bot");
const token = config.DISCORD_TOKEN; const token = config.DISCORD_TOKEN;
// Inisialisasi selfbot client
const client = new Client(); const client = new Client();
const voiceController = new VoiceController(client); const voiceController = new VoiceController(client);
const db = getDatabase();
// Track shutdown state
let isShuttingDown = false; let isShuttingDown = false;
async function gracefulShutdown(signal: string) { async function gracefulShutdown(signal: string) {
@@ -30,15 +31,12 @@ async function gracefulShutdown(signal: string) {
logger.info({ signal }, "Graceful shutdown initiated"); logger.info({ signal }, "Graceful shutdown initiated");
try { try {
// Step 1: Stop voice connection
logger.info("Stopping voice connection..."); logger.info("Stopping voice connection...");
await voiceController.disconnect(); await voiceController.disconnect();
// Step 2: Pause player
logger.info("Pausing player..."); logger.info("Pausing player...");
discordPlayer.pause(); discordPlayer.pause();
// Step 3: Destroy client
logger.info("Destroying Discord client..."); logger.info("Destroying Discord client...");
try { try {
client.destroy(); client.destroy();
@@ -56,6 +54,7 @@ async function gracefulShutdown(signal: string) {
client.on("ready", async () => { client.on("ready", async () => {
logger.info({ user: client.user?.tag }, "Bot logged in"); logger.info({ user: client.user?.tag }, "Bot logged in");
registerMessageCapture(client, db);
startWebserver(config.WEBSERVER_PORT, client, voiceController); startWebserver(config.WEBSERVER_PORT, client, voiceController);
}); });
@@ -63,7 +62,6 @@ client.on("error", (err) => {
logger.error({ error: err }, "Client error"); logger.error({ error: err }, "Client error");
}); });
// Graceful shutdown handlers
process.on("SIGINT", () => { process.on("SIGINT", () => {
gracefulShutdown("SIGINT"); gracefulShutdown("SIGINT");
}); });
@@ -72,16 +70,15 @@ process.on("SIGTERM", () => {
gracefulShutdown("SIGTERM"); gracefulShutdown("SIGTERM");
}); });
// Handle uncaught exceptions
process.on("uncaughtException", (err) => { process.on("uncaughtException", (err) => {
logger.error({ error: err }, "Uncaught exception"); logger.error({ error: err }, "Uncaught exception");
gracefulShutdown("uncaughtException"); gracefulShutdown("uncaughtException");
}); });
// Handle unhandled promise rejections
process.on("unhandledRejection", (reason, promise) => { process.on("unhandledRejection", (reason, promise) => {
logger.error({ reason, promise }, "Unhandled rejection"); logger.error({ reason, promise }, "Unhandled rejection");
gracefulShutdown("unhandledRejection"); gracefulShutdown("unhandledRejection");
}); });
client.login(token); client.login(token);

View File

@@ -55,6 +55,8 @@ function getDatabase(): Database.Database {
return db; return db;
} }
export { getDatabase };
export async function enqueueMuxerJob(data: MuxerJobData): Promise<string> { export async function enqueueMuxerJob(data: MuxerJobData): Promise<string> {
try { try {
const database = getDatabase(); const database = getDatabase();