Adaugă comanda /scrape_zip în Telegram bot

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>
This commit is contained in:
2025-11-06 21:22:48 +02:00
parent f088308323
commit 463b51da99

View File

@@ -57,6 +57,7 @@ class TelegramTriggerBot:
url = f"{self.base_url}/setMyCommands" url = f"{self.base_url}/setMyCommands"
commands = [ commands = [
{"command": "scrape", "description": "Rulează scraper-ul BTGO"}, {"command": "scrape", "description": "Rulează scraper-ul BTGO"},
{"command": "scrape_zip", "description": "Rulează scraper + trimite ZIP"},
{"command": "zip", "description": "Trimite ultimele fișiere ca ZIP"}, {"command": "zip", "description": "Trimite ultimele fișiere ca ZIP"},
{"command": "status", "description": "Status sistem"}, {"command": "status", "description": "Status sistem"},
{"command": "help", "description": "Ajutor comenzi"} {"command": "help", "description": "Ajutor comenzi"}
@@ -100,10 +101,11 @@ class TelegramTriggerBot:
return True return True
return user_id in self.allowed_users return user_id in self.allowed_users
def run_scraper(self, chat_id, reply_to_message_id=None): def run_scraper(self, chat_id, reply_to_message_id=None, send_as_zip=False):
"""Execută scraper-ul""" """Execută scraper-ul"""
# Trimite mesaj inițial și salvează message_id pentru editare ulterioară # Trimite mesaj inițial și salvează message_id pentru editare ulterioară
response = self.send_message(chat_id, "*BTGO Scraper pornit*\n\nAsteapta 2FA pe telefon.", reply_to_message_id) zip_msg = " (arhiva ZIP)" if send_as_zip else ""
response = self.send_message(chat_id, f"*BTGO Scraper pornit{zip_msg}*\n\nAsteapta 2FA pe telefon.", reply_to_message_id)
message_id = None message_id = None
try: try:
message_id = response.json()['result']['message_id'] message_id = response.json()['result']['message_id']
@@ -113,12 +115,17 @@ class TelegramTriggerBot:
try: try:
# Rulează scraper-ul # Rulează scraper-ul
logging.info("Pornire scraper...") logging.info(f"Pornire scraper (send_as_zip={send_as_zip})...")
# Prepare environment with global playwright path + Telegram progress info # Prepare environment with global playwright path + Telegram progress info
env = os.environ.copy() env = os.environ.copy()
env['PLAYWRIGHT_BROWSERS_PATH'] = 'C:\\playwright-browsers' env['PLAYWRIGHT_BROWSERS_PATH'] = 'C:\\playwright-browsers'
if message_id:
# Dacă send_as_zip, dezactivează notificările - bot-ul va trimite ZIP-ul manual
if send_as_zip:
env['ENABLE_NOTIFICATIONS'] = 'false'
logging.info("Notificări dezactivate - bot va trimite ZIP manual")
elif message_id:
env['TELEGRAM_CHAT_ID'] = str(chat_id) env['TELEGRAM_CHAT_ID'] = str(chat_id)
env['TELEGRAM_MESSAGE_ID'] = str(message_id) env['TELEGRAM_MESSAGE_ID'] = str(message_id)
logging.info(f"Setting environment: TELEGRAM_CHAT_ID={chat_id}, TELEGRAM_MESSAGE_ID={message_id}") logging.info(f"Setting environment: TELEGRAM_CHAT_ID={chat_id}, TELEGRAM_MESSAGE_ID={message_id}")
@@ -135,9 +142,14 @@ class TelegramTriggerBot:
) )
if result.returncode == 0: if result.returncode == 0:
# Succes - mesajul final va fi editat de notifications.py
logging.info("Scraper finalizat cu succes") logging.info("Scraper finalizat cu succes")
# Dacă send_as_zip, trimite ZIP manual
if send_as_zip:
logging.info("Trimitere rezultate ca ZIP...")
self.send_zip_files(chat_id, reply_to_message_id)
# Altfel, mesajul final va fi editat de notifications.py
else: else:
# Eroare # Eroare
logging.error(f"Scraper eșuat cu cod {result.returncode}") logging.error(f"Scraper eșuat cu cod {result.returncode}")
@@ -302,6 +314,7 @@ class TelegramTriggerBot:
welcome_msg += ( welcome_msg += (
"Comenzi disponibile:\n" "Comenzi disponibile:\n"
"`/scrape` - Ruleaza scraper-ul\n" "`/scrape` - Ruleaza scraper-ul\n"
"`/scrape_zip` - Ruleaza scraper + trimite ZIP\n"
"`/zip` - Trimite ultimele fisiere ca ZIP\n" "`/zip` - Trimite ultimele fisiere ca ZIP\n"
"`/status` - Status sistem\n" "`/status` - Status sistem\n"
"`/help` - Ajutor" "`/help` - Ajutor"
@@ -312,6 +325,10 @@ class TelegramTriggerBot:
logging.info(f"Comandă /scrape primită în {context}") logging.info(f"Comandă /scrape primită în {context}")
self.run_scraper(chat_id, message_id) self.run_scraper(chat_id, message_id)
elif text == '/scrape_zip':
logging.info(f"Comandă /scrape_zip primită în {context}")
self.run_scraper(chat_id, message_id, send_as_zip=True)
elif text == '/zip': elif text == '/zip':
logging.info(f"Comandă /zip primită în {context}") logging.info(f"Comandă /zip primită în {context}")
self.send_zip_files(chat_id, message_id) self.send_zip_files(chat_id, message_id)
@@ -343,19 +360,23 @@ class TelegramTriggerBot:
help_msg += "IN GRUP: Toti membrii vad comenzile si rezultatele\n\n" help_msg += "IN GRUP: Toti membrii vad comenzile si rezultatele\n\n"
help_msg += ( help_msg += (
"*COMENZI:*\n" "*COMENZI:*\n"
"`/scrape` - Ruleaza scraper-ul + trimite fisiere\n" "`/scrape` - Ruleaza scraper + trimite fisiere individuale\n"
"`/zip` - Trimite ultimele fisiere ca arhiva ZIP\n" "`/scrape_zip` - Ruleaza scraper + trimite arhiva ZIP\n"
"`/zip` - Trimite ultimele fisiere ca arhiva ZIP (fara scraping)\n"
"`/status` - Informatii sistem\n" "`/status` - Informatii sistem\n"
"`/help` - Acest mesaj\n\n" "`/help` - Acest mesaj\n\n"
"*GHID SCRAPER:*\n" "*GHID SCRAPER:*\n"
"1. Trimite `/scrape`\n" "1. Trimite `/scrape` sau `/scrape_zip`\n"
"2. Asteapta notificarea de 2FA pe telefon\n" "2. Asteapta notificarea de 2FA pe telefon\n"
"3. Aproba in aplicatia George\n" "3. Aproba in aplicatia George\n"
"4. Primesti fisierele automat\n\n" "4. Primesti fisierele automat\n\n"
"*DIFERENTE:*\n"
"• `/scrape` - Fisiere individuale (CSV + JSON)\n"
"• `/scrape_zip` - Un singur ZIP cu toate fisierele\n"
"• `/zip` - Rapid, foloseste datele existente\n\n"
"*NOTE:*\n" "*NOTE:*\n"
"- Scraper-ul ruleaza ~2-3 minute\n" "- Scraper-ul ruleaza ~2-3 minute\n"
"- VM-ul trebuie sa aiba browser vizibil\n" "- VM-ul trebuie sa aiba browser vizibil"
"- `/zip` trimite datele existente (fara scraping)"
) )
self.send_message(chat_id, help_msg, message_id) self.send_message(chat_id, help_msg, message_id)