// Main application entry point const path = require('path'); require('dotenv').config(); // Import the Bot class const Bot = require('./discord/classes/Bot'); // Global variables to hold our services let apiServer; let discordBot; async function startServices() { try { // Start API server console.log('Starting API server...'); apiServer = require('./api/server'); console.log('API server started successfully'); // Initialize and start Discord bot console.log('Starting Discord bot...'); discordBot = new Bot(); await discordBot.start(); console.log('Discord bot started successfully'); console.log('All services started - System fully operational'); } catch (error) { console.error('Error starting services:', error); process.exit(1); } } // Handle graceful shutdown async function shutdown(signal) { console.log(`Received ${signal}. Shutting down gracefully...`); // Shutdown Discord bot if it exists if (discordBot) { try { await discordBot.sendShutdownNotification(`Manual shutdown triggered by ${signal}`); await discordBot.stop(); console.log('Discord bot shutdown complete'); } catch (error) { console.error('Error shutting down Discord bot:', error); } } // Add any API server shutdown logic here if needed console.log('Shutdown complete'); process.exit(0); } // Register shutdown handlers process.on('SIGINT', async () => { console.log('Received SIGINT. Shutting down gracefully...'); try { // If you have the bot instance available, call shutdown method if (global.discordBot) { await global.discordBot.sendShutdownNotification("SIGINT received"); } } catch (error) { console.error("Error shutting down Discord bot:", error); } process.exit(0); }); process.on('SIGTERM', async () => { console.log('Received SIGTERM. Shutting down gracefully...'); try { // If you have the bot instance available, call shutdown method if (global.discordBot) { await global.discordBot.sendShutdownNotification("SIGTERM received"); } } catch (error) { console.error("Error shutting down Discord bot:", error); } process.exit(0); }); // Catch uncaught exceptions process.on('uncaughtException', (error) => { console.error('Uncaught exception:', error); if (discordBot) { discordBot.sendShutdownNotification('Uncaught exception', error) .finally(() => process.exit(1)); } else { process.exit(1); } }); // Start all services startServices();