Funcion generar QR

Funcion generar QR

Funcion generar qr en zcash explorer

March 25, 2025· 4 min read
3 score

🔎 Transparencia en la generación de códigos QR

Los bots Zexplorer, Texplorer y Rexplorer incluyen una herramienta que genera el código QR de cualquier dirección que se les proporcione mediante comando.

📌 El problema
Entendemos que puede existir desconfianza respecto a que el bot pudiera alterar la dirección o modificar algún dato al momento de generar el código QR.

✅ La solución
Para garantizar total transparencia, ponemos a disposición de todos el código de la función que genera el QR en esta página. De esta forma cualquiera puede auditarlo y verificar que la dirección no se altera en el proceso.


@bot.message_handler(commands=['qr'])def generar_qr_zec(m):    txsb = m.text.split(' ')    if len(txsb) < 2:        bot.reply_to(m, "⚠️ Por favor, proporciona una dirección válida. Ejemplo:\n\n/qr <dirección>")        return    direccion = txsb[1]    try:        qr_data = direccion        qr = qrcode.QRCode(            version=1,            error_correction=qrcode.constants.ERROR_CORRECT_H,             box_size=6,              border=1,        )        qr.add_data(qr_data)        qr.make(fit=True)        if direccion[0] == "u" and len(direccion) == 213:            print(direccion)            icon_url = 'https://free2z.cash/uploadz/public/carover0/zcashcircular.png'            color = "white"            fondo_color = "black"            red = "ZCASH"            activos_soportados = "ZEC"        elif direccion[0] == "t" and len(direccion) == 35:            icon_url = 'https://free2z.cash/uploadz/public/carover0/zcashcircular.png'            color = "white"            fondo_color = "black"            red = "ZCASH"            activos_soportados = "ZEC"            else:            bot.reply_to(m, f"⚠️ Por favor, proporciona una dirección válida que comience con 0 y 42 carcteres para Polygon, T y 34 caracteres para Tron, t y 35 catacteres o u y 213 caracteres para Zcash")            return        response = requests.get(icon_url)        icon = Image.open(BytesIO(response.content)).convert("RGBA")        img_qr = qr.make_image(fill_color=color, back_color=fondo_color).convert('RGB')        img_w, img_h = img_qr.size        factor = 4          size_w = img_w // factor        size_h = img_h // factor        icon = icon.resize((size_w, size_h), Image.LANCZOS)        pos_w = (img_w - size_w) // 2        pos_h = (img_h - size_h) // 2        img_qr.paste(icon, (pos_w, pos_h), icon)        buffer = BytesIO()        img_qr.save(buffer, format="PNG")        buffer.seek(0)        markup = InlineKeyboardMarkup()        cerrar = InlineKeyboardButton(text="❌ Cerrar", callback_data="cerrar_qr")          markup.add(cerrar)        bot.delete_message(m.chat.id, m.message_id)        ad_red = f"⚠️ Deposite solo activos de la red <b>{red}</b> porque en caso contrario se perderan sus fondos."        msg = (              f"Red: <b>{red}</b> - Activos soportados: <b>{activos_soportados}</b>\n\n"              f"Tu direccion de deposito:\n<code>{direccion}</code>\n\n{ad_red}"        )        bot.send_photo(m.chat.id, buffer, caption=msg, parse_mode="html" , reply_markup=markup)    except Exception as e:        bot.reply_to(m, f"❌ Error al generar el código QR: {str(e)}")

Para el caso del explorador de tron (que surge a partir del explorador de zcash) la funcion esta adaptada.

@bot.message_handler(commands=['qr'])def generar_qr_zec(m):    txsb = m.text.split(' ')    if len(txsb) < 2:        bot.reply_to(m, "⚠️ Por favor, proporciona una dirección válida. Ejemplo:\n\n/qr <dirección>")        return    direccion = txsb[1]    try:        qr_data = direccion        qr = qrcode.QRCode(            version=1,            error_correction=qrcode.constants.ERROR_CORRECT_H,             box_size=6,              border=1,        )        qr.add_data(qr_data)        qr.make(fit=True)        if direccion[0] == "T" and len(direccion) == 34:            icon_url = 'https://free2z.cash/uploadz/public/carover0/trx_l-modified.png'            color = "white"            fondo_color = "black"            red = "Tron"            activos_soportados = "TRX, USDT"        else:            bot.reply_to(m, f"⚠️ Por favor, proporciona una dirección válida que comience con 0 y 42 carcteres para Polygon, T y 34 caracteres para Tron, t y 35 catacteres o u y 213 caracteres para Zcash")            return        response = requests.get(icon_url)        icon = Image.open(BytesIO(response.content)).convert("RGBA")        img_qr = qr.make_image(fill_color=color, back_color=fondo_color).convert('RGB')        img_w, img_h = img_qr.size        factor = 4          size_w = img_w // factor        size_h = img_h // factor        icon = icon.resize((size_w, size_h), Image.LANCZOS)        pos_w = (img_w - size_w) // 2        pos_h = (img_h - size_h) // 2        img_qr.paste(icon, (pos_w, pos_h), icon)        buffer = BytesIO()        img_qr.save(buffer, format="PNG")        buffer.seek(0)        markup = InlineKeyboardMarkup()        cerrar = InlineKeyboardButton(text="❌ Cerrar", callback_data="cerrar_qr")          markup.add(cerrar)        bot.delete_message(m.chat.id, m.message_id)        ad_red = f"⚠️ Deposite solo activos de la red <b>{red}</b> porque en caso contrario se perderan sus fondos."        msg = (              f"Red: <b>{red}</b> - Activos soportados: <b>{activos_soportados}</b>\n\n"              f"Tu direccion de deposito:\n<code>{direccion}</code>\n\n{ad_red}"        )        bot.send_photo(m.chat.id, buffer, caption=msg, parse_mode="html" , reply_markup=markup)    except Exception as e:        bot.reply_to(m, f"❌ Error al generar el código QR: {str(e)}")

@bot.message_handler(commands=['qr'])def generar_qr_zec(m):    txsb = m.text.split(' ')    if len(txsb) < 2:        bot.reply_to(m, "⚠️ Por favor, proporciona una dirección válida. Ejemplo:\n\n/qr <dirección>")        return    direccion = txsb[1]    try:        qr_data = direccion        qr = qrcode.QRCode(            version=1,            error_correction=qrcode.constants.ERROR_CORRECT_H,             box_size=6,              border=1,        )        qr.add_data(qr_data)        qr.make(fit=True)        if direccion[0] == "R" and len(direccion) == 34:            print(direccion)            icon_url = 'https://free2z.cash/uploadz/public/carover0/circu_rvn.png'            color = "white"            fondo_color = "black"            red = "Ravencoin"            activos_soportados = "RVN"        else:            bot.reply_to(m, f"⚠️ Por favor, proporciona una dirección válida que comience con 0 y 42 carcteres para Polygon, T y 34 caracteres para Tron, t y 35 catacteres o u y 213 caracteres para Ravencoin")            return        response = requests.get(icon_url)        icon = Image.open(BytesIO(response.content)).convert("RGBA")        img_qr = qr.make_image(fill_color=color, back_color=fondo_color).convert('RGB')        img_w, img_h = img_qr.size        factor = 4  # Cambia este valor para ajustar el tamaño del ícono        size_w = img_w // factor        size_h = img_h // factor        icon = icon.resize((size_w, size_h), Image.LANCZOS)        pos_w = (img_w - size_w) // 2        pos_h = (img_h - size_h) // 2        img_qr.paste(icon, (pos_w, pos_h), icon)        buffer = BytesIO()        img_qr.save(buffer, format="PNG")        buffer.seek(0)        markup = InlineKeyboardMarkup()        cerrar = InlineKeyboardButton(text="❌ Cerrar", callback_data="cerrar_qr")          markup.add(cerrar)        bot.delete_message(m.chat.id, m.message_id)        ad_red = f"⚠️ Deposite solo activos de la red <b>{red}</b> porque en caso contrario se perderan sus fondos."        msg = (              f"Red: <b>{red}</b> - Activos soportados: <b>{activos_soportados}</b>\n\n"              f"Tu direccion de deposito:\n<code>{direccion}</code>\n\n{ad_red}"        )        bot.send_photo(m.chat.id, buffer, caption=msg, parse_mode="html" , reply_markup=markup)    except Exception as e:        bot.reply_to(m, f"❌ Error al generar el código QR: {str(e)}")

Related Articles