Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import logging
- import requests
- from telegram import Update
- from telegram.ext import CommandHandler, MessageHandler
- from telegram.ext import ApplicationBuilder, filters
- from pyzbar.pyzbar import decode
- from PIL import Image
- import io
- import base64
- # Configura el token de tu bot
- API_KEY_BOT = '6485736000:AAFmLqJtt30rzuZyHJHBJYFtgyGzXVeSMcxh_6w'
- # Tu clave API de VirusTotal
- API_KEY_VIRUSTOTAL = 'e8a8asa1a71d181d17b7a252f0a00idkadjkadjadhk0a968c55a8408e017'
- # Configuración del logging
- logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
- logger = logging.getLogger(__name__)
- # Función para decodificar QR
- def decode_qr(image_data):
- image = Image.open(io.BytesIO(image_data))
- decoded_objects = decode(image)
- if decoded_objects:
- return decoded_objects[0].data.decode("utf-8")
- else:
- return None
- # Función para consultar la URL en VirusTotal
- def check_url(url):
- # Codificar la URL
- encoded_url = base64.urlsafe_b64encode(url.encode()).decode().strip("=")
- # Hacer la solicitud GET a la API de VirusTotal
- headers = {
- 'x-apikey': API_KEY_VIRUSTOTAL
- }
- response = requests.get(f'https://www.virustotal.com/api/v3/urls/{encoded_url}', headers=headers)
- if response.status_code == 200:
- data = response.json()
- stats = data['data']['attributes']['last_analysis_stats']
- return stats
- else:
- return None
- # Comando para comenzar el bot
- async def start(update: Update, context):
- await update.message.reply_text("¡Hola! Envíame una imagen QR y te diré si es una URL segura o solo un texto.")
- # Función que maneja los mensajes de texto
- async def handle_message(update: Update, context):
- await update.message.reply_text("Por favor, envíame una imagen QR para analizarla.")
- # Función que maneja las imágenes enviadas
- async def handle_image(update, context):
- if update.message.photo:
- # Get the file object
- file = await update.message.photo[-1].get_file()
- # Download the file to a local path
- await file.download_to_drive('qr_image.jpg')
- else:
- await update.message.reply_text("No photo found in the message.")
- # Abrimos la imagen descargada y la procesamos
- with open('qr_image.jpg', 'rb') as f:
- qr_text = decode_qr(f.read())
- if qr_text:
- if qr_text.startswith("http") or qr_text.startswith("www"):
- # Si es una URL, consultamos VirusTotal
- stats = check_url(qr_text)
- if stats:
- # Crear un mensaje bonito dependiendo del análisis
- message = f"URL decodificada: {qr_text}\n"
- message += f"Análisis realizado:\n"
- message += f"Maliciosa: {stats['malicious']}\n"
- message += f"Sospechosa: {stats['suspicious']}\n"
- message += f"Segura: {stats['harmless']}\n"
- message += f"No detectada: {stats['undetected']}\n"
- if stats['malicious'] > 0:
- message += "⚠️ ¡Esta URL podría ser peligrosa! ⚠️"
- else:
- message += "✅ ¡La URL parece segura! ✅"
- else:
- message = "No se pudo obtener los datos de la URL. Por favor, intenta de nuevo."
- else:
- # Si es solo texto
- message = f"El QR contiene el siguiente texto: {qr_text}\n\nEsto no es una URL, solo texto."
- await update.message.reply_text(message)
- else:
- await update.message.reply_text("Lo siento, no pude detectar un código QR válido en la imagen. Por favor, envíame una imagen QR válida.")
- def main():
- # Crear la aplicación con ApplicationBuilder
- application = ApplicationBuilder().token(API_KEY_BOT).build()
- # Manejar comandos
- application.add_handler(CommandHandler("start", start))
- # Manejar imágenes
- application.add_handler(MessageHandler(filters.PHOTO, handle_image)) # Cambio aquí
- # Manejar mensajes de texto
- application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message)) # Cambio aquí
- # Iniciar el bot (sin usar asyncio.run())
- application.run_polling()
- if __name__ == '__main__':
- main()
Add Comment
Please, Sign In to add comment