¡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 .
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
.
- 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:
Tambien muestro como funciona lo de cambiar la API de Hive que usa el bot para conectarse:
Y si le doy al comando de pedir las estadísticas de la cuenta Aliento en Hive me sale así:
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.

