Nuevos cambios al bot de Aliento.Pay

Words
295
Reading
2 min
Listen
Play
2y

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@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@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.

Nuevos cambios al bot de Aliento.Pay | Ecency