#Requires -RunAsAdministrator <# .SYNOPSIS BTGO Telegram Bot - Complete Deployment Script .DESCRIPTION Deployment complet pentru bot-ul Telegram pe Windows VM Verifica dependente, instaleaza requirements, configureaza serviciul .NOTES Rulare: Right-click → "Run with PowerShell" (ca Administrator) #> # Error handling $ErrorActionPreference = "Stop" # ============================================================================ # FUNCTIONS # ============================================================================ function Write-ColorOutput { param( [string]$Message, [string]$Color = "White", [string]$Prefix = "" ) $prefixColor = switch ($Prefix) { "[OK]" { "Green" } "[INFO]" { "Cyan" } "[EROARE]" { "Red" } "[AVERTIZARE]" { "Yellow" } default { "White" } } if ($Prefix) { Write-Host $Prefix -ForegroundColor $prefixColor -NoNewline Write-Host " $Message" -ForegroundColor $Color } else { Write-Host $Message -ForegroundColor $Color } } function Write-Separator { param([string]$Title = "") Write-Host "" Write-Host "=" * 80 -ForegroundColor Cyan if ($Title) { Write-Host $Title -ForegroundColor Yellow Write-Host "=" * 80 -ForegroundColor Cyan } } # ============================================================================ # CONFIGURATION # ============================================================================ $ScriptDir = Split-Path -Parent $PSCommandPath $ProjectDir = Resolve-Path (Join-Path $ScriptDir "..\..\..") | Select-Object -ExpandProperty Path $ServiceName = "BTGOTelegramBot" Write-Separator "BTGO TELEGRAM BOT - DEPLOYMENT COMPLET" Write-Host "" Write-ColorOutput "Director proiect: $ProjectDir" -Prefix "[INFO]" Write-Host "" # ============================================================================ # [1/6] VERIFICARE PYTHON # ============================================================================ Write-Separator "[1/6] VERIFICARE PYTHON" try { $pythonVersion = python --version 2>&1 if ($LASTEXITCODE -ne 0) { throw } Write-ColorOutput "Python gasit: $pythonVersion" -Prefix "[OK]" } catch { Write-ColorOutput "Python nu este instalat sau nu este in PATH!" -Prefix "[EROARE]" Write-Host "" Write-Host "Instaleaza Python 3.11+ de la: https://www.python.org/downloads/" Write-Host "Asigura-te ca bifezi 'Add Python to PATH' la instalare" Read-Host "`nApasa Enter pentru a inchide" exit 1 } # ============================================================================ # [2/6] VERIFICARE FISIERE PROIECT # ============================================================================ Write-Separator "[2/6] VERIFICARE FISIERE PROIECT" $criticalFiles = @( "telegram_trigger_bot.py", "btgo_scraper.py", "requirements.txt" ) $filesOk = $true foreach ($file in $criticalFiles) { $filePath = Join-Path $ProjectDir $file if (Test-Path $filePath) { Write-ColorOutput "$file - OK" -Prefix "[OK]" } else { Write-ColorOutput "$file - LIPSESTE!" -Prefix "[EROARE]" $filesOk = $false } } if (-not $filesOk) { Write-ColorOutput "Fisiere critice lipsesc din proiect!" -Prefix "[EROARE]" Read-Host "`nApasa Enter pentru a inchide" exit 1 } # ============================================================================ # [3/6] VERIFICARE/CREARE .env # ============================================================================ Write-Separator "[3/6] VERIFICARE CONFIGURARE (.env)" $envFile = Join-Path $ProjectDir ".env" $envExample = Join-Path $ProjectDir ".env.example" if (-not (Test-Path $envFile)) { if (Test-Path $envExample) { Write-ColorOutput ".env nu exista. Copiem .env.example..." -Prefix "[INFO]" Copy-Item $envExample $envFile Write-ColorOutput ".env creat din .env.example" -Prefix "[OK]" Write-Host "" Write-ColorOutput "IMPORTANT: Editeaza .env si configureaza:" -Prefix "[AVERTIZARE]" Write-Host " - TELEGRAM_BOT_TOKEN" Write-Host " - TELEGRAM_ALLOWED_USER_IDS" Write-Host " - TELEGRAM_CHAT_ID (optional)" Write-Host " - LOGIN_ID si PAROLA pentru BTGO" Write-Host "" Read-Host "Apasa Enter dupa ce ai configurat .env" } else { Write-ColorOutput ".env si .env.example lipsesc!" -Prefix "[EROARE]" Write-Host "Creaza manual .env cu variabilele necesare" Read-Host "`nApasa Enter pentru a inchide" exit 1 } } # Verifică variabile critice $envContent = Get-Content $envFile -Raw if ($envContent -notmatch "TELEGRAM_BOT_TOKEN=(?!your_).+") { Write-ColorOutput "TELEGRAM_BOT_TOKEN nu este configurat in .env!" -Prefix "[EROARE]" Write-Host "Editeaza .env si adauga token-ul de la @BotFather" Read-Host "`nApasa Enter pentru a inchide" exit 1 } if ($envContent -notmatch "LOGIN_ID=(?!your_).+") { Write-ColorOutput "LOGIN_ID nu este configurat in .env!" -Prefix "[AVERTIZARE]" Write-Host "Scraper-ul nu va functiona fara credentiale BTGO" } Write-ColorOutput ".env exista si pare configurat" -Prefix "[OK]" # ============================================================================ # [4/6] INSTALARE DEPENDENTE PYTHON # ============================================================================ Write-Separator "[4/6] INSTALARE DEPENDENTE PYTHON" try { Write-ColorOutput "Upgrade pip..." -Prefix "[INFO]" python -m pip install --upgrade pip --quiet Write-ColorOutput "Instalare requirements.txt..." -Prefix "[INFO]" $requirementsFile = Join-Path $ProjectDir "requirements.txt" python -m pip install -r $requirementsFile if ($LASTEXITCODE -ne 0) { throw } Write-ColorOutput "Dependente instalate cu succes" -Prefix "[OK]" } catch { Write-ColorOutput "Instalarea dependentelor a esuat!" -Prefix "[EROARE]" Read-Host "`nApasa Enter pentru a inchide" exit 1 } # ============================================================================ # [5/6] INSTALARE PLAYWRIGHT BROWSERS (GLOBAL) # ============================================================================ Write-Separator "[5/6] INSTALARE PLAYWRIGHT BROWSERS (GLOBAL)" # Setează locație globală pentru browsere (accesibilă pentru serviciul SYSTEM) $globalBrowserPath = "C:\playwright-browsers" Write-ColorOutput "Configurare locatie globala browsere: $globalBrowserPath" -Prefix "[INFO]" # Creează directorul dacă nu există if (-not (Test-Path $globalBrowserPath)) { New-Item -ItemType Directory -Path $globalBrowserPath -Force | Out-Null Write-ColorOutput "Director creat: $globalBrowserPath" -Prefix "[OK]" } # Acordă permisiuni SYSTEM la director Write-ColorOutput "Acordare permisiuni SYSTEM..." -Prefix "[INFO]" icacls $globalBrowserPath /grant "SYSTEM:(OI)(CI)F" /T 2>&1 | Out-Null # Setează environment variable la nivel de sistem [System.Environment]::SetEnvironmentVariable("PLAYWRIGHT_BROWSERS_PATH", $globalBrowserPath, [System.EnvironmentVariableTarget]::Machine) $env:PLAYWRIGHT_BROWSERS_PATH = $globalBrowserPath Write-ColorOutput "Environment variable setata: PLAYWRIGHT_BROWSERS_PATH" -Prefix "[OK]" # Instalează browserele try { Write-ColorOutput "Instalare browsere Playwright in $globalBrowserPath..." -Prefix "[INFO]" Write-Host "Aceasta poate dura 1-2 minute..." -ForegroundColor Gray python -m playwright install chromium if ($LASTEXITCODE -ne 0) { throw } Write-ColorOutput "Playwright browsere instalate cu succes!" -Prefix "[OK]" } catch { Write-ColorOutput "Instalarea browserelor Playwright a esuat!" -Prefix "[AVERTIZARE]" Write-Host "Scraper-ul poate sa nu functioneze corect" } # ============================================================================ # CREARE DIRECTOARE NECESARE # ============================================================================ $dataDir = Join-Path $ProjectDir "data" $logsDir = Join-Path $ProjectDir "logs" if (-not (Test-Path $dataDir)) { New-Item -ItemType Directory -Path $dataDir -Force | Out-Null } if (-not (Test-Path $logsDir)) { New-Item -ItemType Directory -Path $logsDir -Force | Out-Null } Write-ColorOutput "Directoare create: data, logs" -Prefix "[OK]" # ============================================================================ # [6/6] INSTALARE/RESTART SERVICIU # ============================================================================ Write-Separator "[6/6] INSTALARE SERVICIU WINDOWS" # Verifică dacă serviciul există $service = Get-Service -Name $ServiceName -ErrorAction SilentlyContinue if ($service) { Write-ColorOutput "Serviciul exista deja. Reinstalam..." -Prefix "[INFO]" & "$ScriptDir\uninstall_service.ps1" Start-Sleep -Seconds 3 } Write-ColorOutput "Rulare install_service.ps1..." -Prefix "[INFO]" & "$ScriptDir\install_service.ps1" if ($LASTEXITCODE -ne 0) { Write-ColorOutput "Instalarea serviciului a esuat!" -Prefix "[EROARE]" Read-Host "`nApasa Enter pentru a inchide" exit 1 } # ============================================================================ # FINALIZARE # ============================================================================ Write-Separator "[SUCCES] DEPLOYMENT FINALIZAT!" Write-Host "" Write-Host "Serviciul BTGO Telegram Bot este acum instalat si ruleaza." -ForegroundColor Green Write-Host "" Write-Host "Comenzi utile:" -ForegroundColor Yellow Write-Host " - Status: Get-Service $ServiceName" Write-Host " - Logs: Get-Content '$logsDir\telegram_bot_stdout.log' -Tail 20" Write-Host " - Opreste: Stop-Service $ServiceName" Write-Host " - Porneste: Start-Service $ServiceName" Write-Host " - Restart: Restart-Service $ServiceName" Write-Host " - Dezinstala: .\uninstall_service.ps1" Write-Host "" Write-Host "Teste bot Telegram:" -ForegroundColor Yellow Write-Host " 1. Deschide Telegram si cauta bot-ul tau" Write-Host " 2. Trimite /start pentru a vedea comenzile" Write-Host " 3. Trimite /scrape pentru a testa scraper-ul" Write-Host "" Write-Host "Verificare logs in timp real:" -ForegroundColor Yellow Write-Host " Get-Content '$logsDir\telegram_bot_stdout.log' -Wait" Write-Host "" Write-Separator Read-Host "`nApasa Enter pentru a inchide"