Nuevos cambios al bot de Aliento.Pay

in Aliento29 days ago

image.png


¡Hola, Hivers!

Durante los últimos dos meses, he dedicado los miércoles a mejorar el código de aliento.pay, un bot diseñado para gestionar los bonos de recompensas delegados a la cuenta de @aliento.

Estoy convencido de que, si me dedicara dos días completos, podría perfeccionar y corregir todos los errores que han surgido durante las pruebas.

¿Qué actualizaciones he implementado durante estos dos meses?

  • Actualización de Discord.py: He actualizado la librería de Discord utilizada para desarrollar en Python.
  • Eliminación de dependencias innecesarias: Quité la dependencia de varias librerías y la de HiveSQL para obtener las cuentas que delegan a @aliento.
  • Flexibilidad en el uso de API: Añadí la función para cambiar la API de Hive y obtener las estadísticas de la cuenta.
  • Mejoras en la configuración de la base de datos: Realicé cambios para registrar mejor los datos de los delegados.
  • Función de actualización: Añadí una función que permite ejecutar actualizaciones de manera eficiente.
  • Corrección de errores en tiempo real: Corregí los problemas en la función que muestra el voting power en tiempo real.

Quiero compartir contigo parte de la implementación que he realizado para extraer las delegaciones directamente a través de las APIs de Hive.

PREDEFINED_HIVE_NODES = [
    'https://hive-api.dlux.io',
    'https://api.hive.blog',
    'https://api.openhive.network',
    'https://hived.emre.sh',
    'https://anyx.io',
    'https://api.deathwing.me'
]

session = requests.Session()  # Uso de una sesión global para optimizar las solicitudes

def get_node(api_urls: Optional[List[str]] = None) -> Optional[str]:
    urls_to_use = api_urls or PREDEFINED_HIVE_NODES
    for url in urls_to_use:
        try:
            response = session.get(url, timeout=1)
            response.raise_for_status()
            print(f"Conexión exitosa a {url}")
            return url
        except requests.RequestException as e:
            print(f"Error conectando a la API {url}: {e}")
    return None

def get_account_history_paginated(account: str, start: int = -1, limit: int = 1000, include_reversible: bool = False, api_urls: Optional[List[str]] = None) -> List[dict]:
    node_url = PREDEFINED_HIVE_NODES[0] or get_node(api_urls)  # Uso de nodo predeterminado mejorado
    payload = {
        "jsonrpc": "2.0",
        "method": "account_history_api.get_account_history",
        "params": {
            "account": account,
            "start": start,
            "limit": limit,
            "include_reversible": include_reversible,
            "operation_filter_low": 1 << 40,
        },
        "id": 1
    }
    try:
        response = session.post(node_url, json=payload)
        response.raise_for_status()
        return response.json().get('result', {}).get('history', [])
    except requests.RequestException as e:
        print(f"Error conectando a la API {node_url}: {e}")
    return []



También quiero mostrar como el Bot de Aliento muestra el Voting Power:

image.png

Tambien muestro como funciona lo de cambiar la API de Hive que usa el bot para conectarse:

image.png

image.png


Y si le doy al comando de pedir las estadísticas de la cuenta Aliento en Hive me sale así:

image.png


Espero seguir actualizando este código y actualizar el repositorio en Github para que otras comunidades puedan reutilizar el código, ahora sin depender de HiveSQL.

Seguiré desarrollando este bot, con el propósito de escalarlo más adelante a una Dapp donde las comunidades puedan crear sus propias configuraciones y pagarle a sus contribuyentes.

Sort:  

Esas APIs de Hive dando muchos problemas, pero que bueno que se ha encontrado la solución.

Ya cada vez este bot tiene más funciones que facilitan su uso.

Si, me imagino que son pruebas que están realizando

Wow, it sounds like you have been quite busy! Those are a lot of great updates from what I can tell. I guess I never realized everything that your community does. That just goes to show you how big Hive actually is!

Excelente amigo, que siga mejorando, yo leeré más sobre esto para ver de que trata el proyecto