load(); } catch (Exception $e) { die('Error al cargar el archivo de entorno: ' . $e->getMessage()); } // Validar variables requeridas $dotenv->required([ 'DB_HOST', 'DB_NAME', 'DB_USER', 'DB_PASS', 'JWT_SECRET', 'APP_URL' ]); // Environment Configuration define('ENVIRONMENT', $_ENV['APP_ENV'] ?? 'production'); // 'development' or 'production' // Detectar si se ejecuta desde la línea de comandos $is_cli = (php_sapi_name() === 'cli' || defined('STDIN')); // Configurar la URL base y el protocolo if ($is_cli) { // En CLI, usar siempre la APP_URL del .env y no necesitamos protocolo define('BOT_BASE_URL', $_ENV['APP_URL']); $protocol = 'http'; // Valor por defecto, no se usa realmente } else { // En entorno web, detectar protocolo dinámicamente $protocol = 'http'; if ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') || (!empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] === 'on') || (!empty($_SERVER['HTTP_CF_VISITOR']) && strpos($_SERVER['HTTP_CF_VISITOR'], 'https' ) !== false)) { $protocol = 'https'; $_SERVER['HTTPS'] = 'on'; $_SERVER['SERVER_PORT'] = 443; } define('BOT_BASE_URL', $_ENV['APP_URL'] ?? ($protocol . '://' . $_SERVER['HTTP_HOST'])); $_SERVER['REQUEST_SCHEME'] = $protocol; } define('BASE_PATH', dirname(__DIR__)); // Database Configuration define('DB_HOST', $_ENV['DB_HOST']); define('DB_USER', $_ENV['DB_USER']); define('DB_PASS', $_ENV['DB_PASS']); define('DB_NAME', $_ENV['DB_NAME']); define('DB_DIALECT', $_ENV['DB_DIALECT']); define('DB_PORT', $_ENV['DB_PORT']); // Session Configuration define('SESSION_SECRET', $_ENV['JWT_SECRET']); // Discord API Configuration define('DISCORD_GUILD_ID', $_ENV['DISCORD_GUILD_ID']); define('DISCORD_CLIENT_ID', $_ENV['DISCORD_CLIENT_ID']); define('DISCORD_CLIENT_SECRET', $_ENV['DISCORD_CLIENT_SECRET']); define('DISCORD_BOT_TOKEN', $_ENV['DISCORD_BOT_TOKEN']); // Telegram API Configuration define('TELEGRAM_BOT_TOKEN', $_ENV['TELEGRAM_BOT_TOKEN']); define('TELEGRAM_WEBHOOK_TOKEN', $_ENV['TELEGRAM_WEBHOOK_TOKEN']); // Error Reporting if (defined('ENVIRONMENT')) { switch (ENVIRONMENT) { case 'development': error_reporting(E_ALL); ini_set('display_errors', '1'); ini_set('log_errors', '1'); ini_set('error_log', dirname(__DIR__) . '/logs/php_errors.log'); break; case 'production': error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT); ini_set('display_errors', '0'); ini_set('log_errors', '1'); ini_set('error_log', dirname(__DIR__) . '/logs/php_errors.log'); break; default: error_reporting(E_ALL); ini_set('display_errors', '1'); ini_set('log_errors', '1'); ini_set('error_log', dirname(__DIR__) . '/logs/php_errors.log'); break; } } // Helper function to get full URL function url($path = '') { $path = ltrim($path, '/'); return BOT_BASE_URL . '/' . $path; } // Helper function to get full asset URL function asset_url($path = '') { $path = ltrim($path, '/'); return BOT_BASE_URL . '/assets/' . $path; }