IvanCastl

Telegram Transparencia

Mar 19th, 2025
649
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.13 KB | Cybersecurity | 0 0
  1. import requests
  2. import json
  3. from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
  4. from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes, CallbackQueryHandler
  5.  
  6. # Obtener los datos desde la URL del JSON (usando la URL raw de GitHub)
  7. url = "https://raw.githubusercontent.com/Te-k/telegram-transparency/main/dataset.json"
  8. response = requests.get(url)
  9. data = response.json()
  10.  
  11. # Diccionario de códigos de país Alfa-3 a nombres completos
  12. country_codes = {
  13.     "FRA": "Francia",
  14.     "USA": "Estados Unidos",
  15.     "NLD": "Países Bajos",
  16.     "DEU": "Alemania",
  17.     "ROU": "Rumania",
  18.     "POL": "Polonia",
  19.     "ITA": "Italia",
  20.     "ESP": "España",
  21.     "GBR": "Reino Unido",
  22.     "SVK": "Eslovaquia",
  23.     "CZE": "República Checa",
  24.     "BEL": "Bélgica",
  25.     "CAN": "Canadá",
  26.     "UKR": "Ucrania",
  27.     "COL": "Colombia",
  28.     "URY": "Uruguay",
  29.     "GEO": "Georgia",
  30.     "EGY": "Egipto",
  31.     "SWE": "Suecia",
  32.     "CHE": "Suiza",
  33.     "ARG": "Argentina",
  34.     "AUT": "Austria",
  35.     "ISR": "Israel",
  36.     "IRL": "Irlanda",
  37.     "SVN": "Eslovenia",
  38.     "IND": "India",
  39.     "CHL": "Chile",
  40.     "NOR": "Noruega",
  41.     "NZL": "Nueva Zelanda",
  42.     "GTM": "Guatemala",
  43.     "RUS": "Rusia",
  44.     "PRT": "Portugal",
  45.     "BGR": "Bulgaria",
  46.     "DNK": "Dinamarca",
  47.     "PHL": "Filipinas",
  48.     "IDN": "Indonesia",
  49.     "MYS": "Malasia",
  50.     "MEX": "México",
  51.     "CRI": "Costa Rica",
  52.     "BRA": "Brasil",
  53.     "ARE": "Emiratos Árabes Unidos",
  54.     "UZB": "Uzbekistán",
  55.     "EST": "Estonia",
  56.     "NGA": "Nigeria",
  57.     "SRB": "Serbia",
  58.     "KAZ": "Kazajistán",
  59.     "THA": "Tailandia",
  60.     "LAO": "Laos",
  61.     "ARM": "Armenia",
  62.     "TUR": "Turquía",
  63.     "MLT": "Malta",
  64.     "BLR": "Bielorrusia",
  65.     "LTU": "Lituania",
  66.     "BIH": "Bosnia y Herzegovina",
  67.     "LVA": "Letonia",
  68.     "HRV": "Croacia",
  69.     "KGZ": "Kirguistán",
  70.     "AUS": "Australia",
  71.     "FIN": "Finlandia",
  72.     "HUN": "Hungría",
  73.     "CYP": "Chipre",
  74.     "MNE": "Montenegro",
  75.     "JPN": "Japón",
  76.     "GRC": "Grecia",
  77.     "LBY": "Libia",
  78.     "KOR": "Corea del Sur",
  79.     "NER": "Níger",
  80.     "GRL": "Groenlandia",
  81.     "COK": "Islas Cook",
  82.     "MRT": "Mauritania",
  83.     "BGD": "Bangladés",
  84.     "SLV": "El Salvador",
  85.     "CHN": "China",
  86.     "MDA": "Moldavia",
  87.     "ISL": "Islandia",
  88.     "SGP": "Singapur",
  89.     "ETH": "Etiopía"
  90. }
  91.  
  92. # Función para formatear los datos de un país en un mensaje legible
  93. def format_country_data(country_code, country_data):
  94.     country_name = country_codes.get(country_code, country_code)  # Obtener el nombre del país
  95.     message = f"📊 **Transparency Report for {country_name}**\n\n"
  96.    
  97.     for entry in country_data:
  98.         date_range = f"{entry['from']} to {entry['to']}"
  99.         requests_count = entry['requests']
  100.         users_count = entry['users']
  101.        
  102.         message += f"📅 **Period:** {date_range}\n"
  103.         message += f"📨 **Requests:** {requests_count}\n"
  104.         message += f"👤 **Users:** {users_count}\n"
  105.         message += "----------------------------------------\n"
  106.    
  107.     return message
  108.  
  109. # Comando para manejar el '/start'
  110. async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
  111.     # Mensaje de bienvenida
  112.     welcome_message = (
  113.         "¡Hola! 👋\n\n"
  114.         "Soy un bot diseñado para mostrarte los informes de transparencia de Telegram. "
  115.         "Usa el comando /report para seleccionar un país y obtener los datos más recientes.\n\n"
  116.         "¡Espero que te sea útil! 😊"
  117.     )
  118.     await update.message.reply_text(welcome_message)
  119.  
  120. # Comando para manejar el '/report'
  121. async def report(update: Update, context: ContextTypes.DEFAULT_TYPE):
  122.     # Crear botones para cada país
  123.     keyboard = []
  124.     for country_code in data.keys():
  125.         country_name = country_codes.get(country_code, country_code)  # Obtener el nombre del país
  126.         keyboard.append([InlineKeyboardButton(country_name, callback_data=country_code)])  # Solo mostrar el nombre
  127.    
  128.     reply_markup = InlineKeyboardMarkup(keyboard)
  129.    
  130.     # Enviar el mensaje con los botones
  131.     await update.message.reply_text("Selecciona un país para ver su reporte:", reply_markup=reply_markup)
  132.  
  133. # Manejador para los botones de selección de país
  134. async def button_handler(update: Update, context: ContextTypes.DEFAULT_TYPE):
  135.     query = update.callback_query
  136.     country_code = query.data
  137.    
  138.     # Obtener los datos del país seleccionado
  139.     country_data = data.get(country_code, [])
  140.    
  141.     if country_data:
  142.         # Formatear los datos del país
  143.         formatted_message = format_country_data(country_code, country_data)
  144.         await query.edit_message_text(formatted_message, parse_mode='Markdown')
  145.     else:
  146.         await query.edit_message_text(f"No hay datos disponibles para {country_code}.")
  147.  
  148. # Función principal para ejecutar el bot
  149. def main():
  150.     app = ApplicationBuilder().token("6485736942:AQUIELTOKENDETUBOT").build()
  151.  
  152.     app.add_handler(CommandHandler("start", start))
  153.     app.add_handler(CommandHandler("report", report))
  154.     app.add_handler(CallbackQueryHandler(button_handler))
  155.  
  156.     app.run_polling()
  157.  
  158. if __name__ == '__main__':
  159.     main()
Tags: telegram
Advertisement
Add Comment
Please, Sign In to add comment