diff --git a/api.js b/api.js new file mode 100644 index 0000000..d6f1927 --- /dev/null +++ b/api.js @@ -0,0 +1,43 @@ +// API Server entry point +const path = require('path'); +require('dotenv').config(); + +// Global variable to hold our service +let apiServer; + +async function startServer() { + try { + // Start API server + console.log('Starting API server...'); + apiServer = require('./api/server'); + console.log('API server started successfully'); + console.log('API server fully operational'); + } catch (error) { + console.error('Error starting API server:', error); + process.exit(1); + } +} + +// Handle graceful shutdown +async function shutdown(signal) { + console.log(`Received ${signal}. Shutting down API server gracefully...`); + + // Add API server shutdown logic here if needed + // For example: apiServer.close() + + console.log('API server shutdown complete'); + process.exit(0); +} + +// Register shutdown handlers +process.on('SIGINT', () => shutdown('SIGINT')); +process.on('SIGTERM', () => shutdown('SIGTERM')); + +// Catch uncaught exceptions +process.on('uncaughtException', (error) => { + console.error('Uncaught exception in API server:', error); + process.exit(1); +}); + +// Start server +startServer(); diff --git a/discord.js b/discord.js new file mode 100644 index 0000000..5f5c9f7 --- /dev/null +++ b/discord.js @@ -0,0 +1,60 @@ +// Discord Bot entry point +const path = require('path'); +require('dotenv').config(); + +// Import the Bot class +const Bot = require('./discord/classes/Bot'); + +// Global variable to hold our bot +let discordBot; + +async function startBot() { + try { + // Initialize and start Discord bot + console.log('Starting Discord bot...'); + discordBot = new Bot(); + await discordBot.start(); + console.log('Discord bot started successfully'); + console.log('Discord bot fully operational'); + } catch (error) { + console.error('Error starting Discord bot:', error); + process.exit(1); + } +} + +// Handle graceful shutdown +async function shutdown(signal) { + console.log(`Received ${signal}. Shutting down Discord bot 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); + } + } + + console.log('Discord bot shutdown complete'); + process.exit(0); +} + +// Register shutdown handlers +process.on('SIGINT', () => shutdown('SIGINT')); +process.on('SIGTERM', () => shutdown('SIGTERM')); + +// Catch uncaught exceptions +process.on('uncaughtException', (error) => { + console.error('Uncaught exception in Discord bot:', error); + if (discordBot) { + discordBot.sendShutdownNotification('Uncaught exception', error) + .finally(() => process.exit(1)); + } else { + process.exit(1); + } +}); + +// Start bot +startBot();