Adauga logica de autorizare flexibila:
- Useri in TELEGRAM_ALLOWED_USER_IDS (whitelist explicit)
- SAU membrii grupului TELEGRAM_CHAT_ID (verificare getChatMember API)
- Membrii grupului pot folosi bot-ul atat in grup cat si in DM individual
Modificari:
- telegram_trigger_bot.py: metoda is_member_of_group() cu verificare API
- telegram_trigger_bot.py: is_user_allowed() cu logica OR pentru whitelist + grup
- .env.example: comentarii actualizate pentru noua logica
- TELEGRAM_BOT_SETUP.md: documentatie completa pentru autorizare
Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
La comenzile /scrape* se sterg automat fisierele CSV, JSON, ZIP si PNG anterioare pentru a preveni acumularea de date vechi.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- /scrape_zip trimite ZIP pe ambele canale (Telegram + email)
- /zip trimite ZIP și pe email, nu doar pe Telegram
- Elimină emoji-uri din mesajele Telegram user-facing
- Adaugă ghid "NO EMOJIS" în CLAUDE.md
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implementează logica de restart inline în loc să apeleze restart_service.ps1
pentru a evita 2 confirmări consecutive (Read-Host).
Îmbunătățiri:
- Restart serviciu inline (stop + start direct în funcție)
- Un singur prompt la final pentru revenire în meniu
- Mesaje de status detaliate pentru fiecare pas
- Gestionare erori pentru stop și start serviciu
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Nouă funcționalitate pentru actualizare automată:
- Opțiunea [G] în meniul principal
- Funcția Invoke-GitPullRestart care rulează git pull
- Restart automat al serviciului dacă este instalat
- Validare exit code și gestionare erori
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Problema:
- Logging eșua cu UnicodeEncodeError când scria caractere românești (ă, î, ș)
- Windows cmd.exe folosește cp1252 implicit, nu UTF-8
Soluție:
- Forțare encoding UTF-8 pentru stdout și stderr
- Folosește io.TextIOWrapper cu encoding='utf-8'
- errors='replace' pentru caractere care nu pot fi encodate
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Modificări:
- telegram_trigger_bot.py:
- Păstrează TELEGRAM_CHAT_ID și TELEGRAM_MESSAGE_ID pentru progress
- Setează flag SEND_AS_ZIP=true în environment
- NU mai dezactivează notificările
- notifications.py:
- Verifică flag SEND_AS_ZIP din environment
- Dacă SEND_AS_ZIP=true, trimite ZIP cu progress updates
- Mesajul de progres e editat la fel ca /scrape normal
Comportament /scrape_zip:
1. Bot trimite "Scraper pornit (arhiva ZIP)"
2. Scraper rulează și editează mesajul cu progress
3. notifications.py detectează flag-ul SEND_AS_ZIP
4. Trimite ZIP cu solduri în loc de fișiere individuale
5. Editează mesajul final cu detalii despre ZIP
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Funcționalitate:
- /scrape_zip - Rulează scraper + trimite rezultatele ca ZIP
- Dezactivează notificările automate din scraper
- Bot trimite manual ZIP-ul după scraping
Logică:
- run_scraper() primește parametru send_as_zip
- Dacă send_as_zip=True:
- Setează ENABLE_NOTIFICATIONS=false în env
- După scraping, apelează send_zip_files()
- Rezultat: un singur ZIP în loc de fișiere individuale
Comenzi disponibile:
- /scrape - Fisiere individuale (comportament original)
- /scrape_zip - Un singur ZIP (nou)
- /zip - Trimite fișierele existente ca ZIP (fără scraping)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Funcționalitate:
- /zip - Trimite ultimele fișiere ca arhivă ZIP
- Găsește automat fișierele din ultima sesiune
- Include solduri per cont + total RON în caption
- Verifică limita Telegram (50 MB)
- Șterge automat ZIP-ul temporar după trimitere
Avantaje:
- Mai rapid decât /scrape (nu rulează scraper-ul)
- Un singur fișier în loc de mai multe
- Include toate datele (CSV + JSON)
- Afișează solduri complete în mesaj
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- EmailNotifier primește lista de conturi (nu doar count)
- _create_email_body afișează solduri per cont + total RON
- Format tabel HTML frumos cu styling
- send_notifications.py citește date din JSON
- Sincronizare cu TelegramNotifier (deja avea solduri)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>