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:
13
src/index.ts
13
src/index.ts
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user