Files
btgo-playwright/TELEGRAM_BOT_SETUP.md
Marius Mutu 91021fa530 Permite membrilor grupului sa foloseasca bot-ul in DM prin verificare API
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>
2025-11-12 11:26:48 +02:00

10 KiB

Telegram Trigger Bot - Setup Guide

Prezentare

Telegram Trigger Bot permite declanșarea BTGO Scraper-ului de la distanță prin comenzi Telegram. Perfect pentru VM Windows 11.

⚠️ IMPORTANT: VM-ul Windows 11 TREBUIE să aibă:

  • Remote Desktop session activă (sau user logat)
  • Browser vizibil (HEADLESS=false)
  • WAF-ul BT blochează browsere headless!

Cum Funcționează

Tu (Telegram) → Bot → Rulează scraper → Trimite CSV-uri înapoi

Setup Pas cu Pas

1. Configurare Bot Telegram

Dacă ai deja bot pentru notificări: Poți folosi același bot!

Dacă NU ai bot:

  1. Deschide Telegram și caută @BotFather
  2. Trimite /newbot
  3. Alege nume pentru bot (ex: "BTGO Scraper Bot")
  4. Copiază token-ul primit (ex: 123456789:ABCdefGHIjklMNOpqrs)

2. Obține User ID-ul Tău (OPȚIONAL)

User ID e necesar doar dacă vrei să autorizezi utilizatori care NU sunt în grup.

Dacă folosești grup: Toți membrii grupului pot folosi bot-ul automat (în grup sau DM)!

Pentru whitelist suplimentar:

Opțiunea A - Folosește bot existent:

python get_telegram_chat_id.py

Vei vedea: User ID: 123456789

Opțiunea B - Folosește @userinfobot:

  1. Caută @userinfobot în Telegram
  2. Trimite /start
  3. Copiază User ID-ul

3. Setup pentru Grup Telegram (RECOMANDAT)

Avantaj: Comenzi și rezultate în același grup - mai convenabil decât mesaje directe!

3.1. Adaugă Bot-ul în Grup

  1. Deschide grupul Telegram unde vrei să trimiți comenzi

  2. Adaugă bot-ul:

    • Click pe numele grupului → "Add Members"
    • Caută bot-ul tău (ex: "BTGO Scraper Bot")
    • Adaugă
  3. Configurare Privacy Mode (important!):

    Bot-ul trebuie să vadă comenzile din grup. Ai 2 opțiuni:

    Opțiunea A - Dezactivează Privacy Mode (RECOMANDAT):

    1. Deschide @BotFather în Telegram
    2. Trimite /mybots
    3. Selectează bot-ul tău
    4. Bot Settings → Group Privacy → Turn OFF
    

    Acum bot-ul vede toate mesajele care încep cu / (comenzi)

    Opțiunea B - Fă bot-ul Admin:

    1. În grup: Click nume grup → Administrators
    2. Add Administrator → Selectează bot-ul
    3. Permisiuni minime: nicio permisiune specială necesară
    

    Admin bots văd toate mesajele automat.

3.2. Obține Chat ID al Grupului

Metoda 1 - Cu scriptul helper:

python get_telegram_chat_id.py
  • Trimite /start în grup
  • Script-ul va afișa: Chat ID: -1001234567890 (NEGATIV pentru grupuri!)

Metoda 2 - Manual:

  1. Adaugă @RawDataBot în grupul tău temporar
  2. Bot-ul va afișa informații despre grup
  3. Copiază chat.id (va fi negativ, ex: -1001234567890)
  4. Șterge @RawDataBot din grup

4. Configurare .env

Editează .env și adaugă:

# Bot token (același ca pentru notificări sau nou)
TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrs

# Chat ID GRUP pentru notificări automate + autorizare membri
# IMPORTANT: Negativ pentru grupuri! (ex: -1001234567890)
# TOȚI membrii acestui grup pot folosi bot-ul (în grup sau DM)
TELEGRAM_CHAT_ID=-1001234567890

# User IDs autorizați individual (OPȚIONAL - separați prin virgulă)
# Pentru useri care NU sunt în grup dar vrei să le dai acces
TELEGRAM_ALLOWED_USER_IDS=123456789,987654321

Autorizare:

  • Orice membru al grupului TELEGRAM_CHAT_ID poate folosi bot-ul (în grup SAU în DM)
  • SAU useri din TELEGRAM_ALLOWED_USER_IDS (chiar dacă nu sunt în grup)
  • Dacă ambele sunt goale = bot deschis pentru oricine (NESIGUR!)

4. Pornire Bot

Opțiunea 1 - Manual (Test):

deployment\windows\scripts\run_telegram_bot_manual.ps1

Opțiunea 2 - Windows Service (RECOMANDAT pentru VM):

# Deploy complet
deployment\windows\scripts\deploy.ps1

# SAU meniu interactiv
deployment\windows\scripts\menu.ps1

Opțiunea 3 - Manual Python:

.venv\Scripts\activate
python telegram_trigger_bot.py

Bot-ul va afișa:

Bot inițializat. Useri autorizați: [123456789]
Bot pornit. Așteaptă comenzi...

Utilizare

Comenzi Disponibile

În grupul Telegram (sau DM către bot):

/start          - Pornește bot-ul și vezi comenzile
/scrape         - ⭐ Rulează scraper-ul (2-3 minute)
/status         - Vezi status sistem (ultima rulare, fișiere)
/help           - Ajutor utilizare

Autorizare: Membri ai grupului TELEGRAM_CHAT_ID SAU useri din TELEGRAM_ALLOWED_USER_IDS pot rula comenzi!

Flow Tipic în Grup

  1. Scrii în grup: /scrape
  2. Bot răspunde: "🤖 BTGO Scraper pornit... Așteaptă 2FA!"
  3. Pe VM: Browser-ul se deschide, face login automat
  4. Pe telefon: Aprobă notificarea George 2FA
  5. Scraper trimite fișiere: Prin notificări automate (email + grup)
  6. Bot confirmă: " Finalizat! Fișierele au fost trimise automat."

Notă: Fișierele sunt trimise de scraper (ENABLE_NOTIFICATIONS=true), NU de bot. Bot-ul doar declanșează execuția și confirmă finalizarea.

Exemplu Output în Grup

Tu: /scrape

Bot: 🤖 BTGO Scraper pornit...
     Așteaptă 2FA pe telefon!

[După 2 minute - mesaje de la scraper prin notificări]

Bot: 📧 BTGO Scraper - Sold conturi actualizat

     📄 solduri_2025-11-06.csv
     📄 tranzactii_Colector_01.csv
     📄 tranzactii_Antreprenor_04.csv
     ... (toate fișierele)

Bot: ✅ Scraper finalizat cu succes!
     📧 Fișierele au fost trimise automat prin notificări.

Important: Mesajele cu fișiere vin din scraper (prin notifications.py), nu din bot! Bot-ul doar declanșează și confirmă.

Setup VM Windows 11

Cerințe Critice

⚠️ Browser TREBUIE să fie vizibil! WAF-ul BT blochează headless.

Metoda Recomandată - Windows Service

# Deploy ca serviciu Windows (auto-start, auto-restart)
deployment\windows\scripts\deploy.ps1

Avantaje:

  • Pornire automată cu Windows
  • Auto-restart la crash
  • Management prin Services.msc
  • Logging centralizat
  • Nu necesită RDP conectată

Management:

# Meniu interactiv
deployment\windows\scripts\menu.ps1

# SAU comenzi directe
deployment\windows\scripts\start_service.ps1
deployment\windows\scripts\stop_service.ps1
deployment\windows\scripts\restart_service.ps1
deployment\windows\scripts\status.ps1

Alternativă - Task Scheduler

Doar dacă nu vrei Windows Service:

  1. Deschide Task Scheduler
  2. Create Task
  3. General:
    • Name: "BTGO Telegram Bot"
    • Run only when user is logged on:
  4. Triggers:
    • At log on (Specific user)
  5. Actions:
    • Action: Start a program
    • Program: C:\path\to\btgo-playwright\deployment\windows\scripts\run_telegram_bot_manual.ps1
    • Start in: C:\path\to\btgo-playwright
  6. Conditions:
    • Dezactivează "Start task only if computer is on AC power"

Verificare Funcționare

# Pe VM, verifică că bot-ul rulează
tasklist | findstr python

# Ar trebui să vezi:
# python.exe    12345 Console    1    45,678 K

Troubleshooting

Bot nu răspunde la comenzi

Cauză: Token greșit sau bot nestartă.

Soluție:

# Verifică token-ul
python telegram_trigger_bot.py

# Ar trebui să vezi:
# Bot inițializat. Useri autorizați: [123456789]

" Acces interzis!"

Cauză: User ID-ul tău nu e în TELEGRAM_ALLOWED_USER_IDS.

Soluție:

# Verifică User ID-ul tău
python get_telegram_chat_id.py

# Adaugă-l în .env
TELEGRAM_ALLOWED_USER_IDS=123456789

"Access Denied" la scraping

Cauză: Browser-ul rulează în headless mode sau VM nu are GUI activă.

Soluție:

  • Conectează-te prin RDP și LASĂ sesiunea deschisă
  • Verifică .env: HEADLESS=false
  • Asigură-te că desktop-ul Windows este vizibil

Scraper timeout (> 10 minute)

Cauză: Probabil blocat la 2FA sau browser nu răspunde.

Soluție:

  • Verifică logs pe VM: logs\scraper_*.log
  • Mărește timeout în bot: timeout=900 (15 min)
  • Asigură-te că aprobați 2FA în < 2 minute

Bot se oprește singur

Cauză: Sesiune RDP deconectată sau VM suspended.

Soluție:

  • Folosește Task Scheduler pentru restart automat
  • Configurează VM să nu intre în sleep/hibernate
  • Verifică că desktop-ul rămâne activ

Securitate

⚠️ ATENȚIE:

  • Bot-ul are acces la credentials din .env
  • TELEGRAM_CHAT_ID sau TELEGRAM_ALLOWED_USER_IDS TREBUIE configurat pentru securitate!
  • Nu partaja token-ul botului
  • VM-ul trebuie securizat (firewall, VPN)

Best Practices:

# ✅ Bun - grup autorizat + whitelist individual
TELEGRAM_CHAT_ID=-1001234567890
TELEGRAM_ALLOWED_USER_IDS=123456789,987654321

# ❌ Rău - ambele goale (oricine are acces)
TELEGRAM_CHAT_ID=
TELEGRAM_ALLOWED_USER_IDS=

# ✅ Bun - notificări separate de trigger
TELEGRAM_BOT_TOKEN=bot_trigger_token
TELEGRAM_CHAT_ID=group_chat_id

Logs și Monitoring

Logs bot:

[2025-11-06 17:30:00] [INFO] Bot inițializat. Useri autorizați: [123456789]
[2025-11-06 17:30:05] [INFO] Mesaj de la username (ID: 123456789): /scrape
[2025-11-06 17:30:05] [INFO] Comandă /scrape primită
[2025-11-06 17:30:05] [INFO] Pornire scraper...
[2025-11-06 17:32:45] [INFO] Scraper finalizat cu succes
[2025-11-06 17:32:50] [INFO] Trimit: solduri_2025-11-06.csv

Logs scraper:

logs\scraper_2025-11-06.log

Alternative Trigger Methods

1. HTTP API (simplă)

from flask import Flask, request
app = Flask(__name__)

@app.route('/scrape', methods=['POST'])
def trigger_scrape():
    # Verifică token secret
    subprocess.run(['python', 'btgo_scraper.py'])

2. Cron Job (periodicitate fixă)

Task Scheduler → Daily la 9:00 AM

3. File Watcher

# Detectează fișier "trigger.txt"
# Rulează scraper automat

Performance

Timpi tipici:

  • Bot startup: < 5 secunde
  • Scraper execution: 2-3 minute
  • File upload: 5-10 secunde
  • Total: ~3-4 minute de la /scrape la fișiere primite

Resource usage (VM):

  • RAM: 500MB (bot) + 800MB (browser)
  • CPU: 5-10% idle, 30-40% during scrape
  • Network: ~5MB download (CSV-uri)