93 lines
2.5 KiB
JavaScript
93 lines
2.5 KiB
JavaScript
// 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();
|