Ir al contenido

Bot de Discord · MVP · Módulo 1 (LoL)

BogaBot

Ranking de League of Legends para tu grupo de Discord. Vincula cuentas de Riot, ingiere partidas desde la Riot API, calcula un puntaje configurable por jugador y publica rankings diarios y semanales en Discord. Además avisa en vivo cuando termina una partida y lleva un ranking histórico de trolleadas y papelones.

Leer la wikiCódigo fuente ↗Ver comandos
Python · discord.py · aiohttpLAS (la2 / americas) por defecto, configurable por regiónDiscord como base de datosScoring por YAMLUso libre — clonás el repo y lo levantás en tu server

Lo que hace

Un ranking que se arma solo

El bot vincula las cuentas de Riot del grupo, lee las partidas desde la API una vez al día, calcula un puntaje por jugador y lo postea en Discord. Todo lo demás cuelga de eso.

Ranking diario y semanal

Un job 1×/día ingiere las partidas del grupo y postea el ranking del día. Los lunes, el recap semanal "Trolls y Pros" de la semana que cerró (solo Ranked Flex).

Puntaje configurable

La fórmula vive en config/scoring.yaml: métricas, pesos y normalización. El grupo la ajusta sin tocar código y el cambio se ve en el próximo /ranking.

Avisos en vivo

Cada pocos minutos el bot chequea partidas nuevas y, por cada una jugada con otro vinculado, postea un mensaje etiquetando a los jugadores con su resultado individual.

Trolleadas y papelones

Detecta partidas trolleadas (KDA < 0.5 y FF antes de los 20 min) y papelones (derrota antes de los 25 min) de las últimas 48 h, y lleva un ranking histórico de trolls.

Discord como base de datos

El storage está detrás de una interfaz; hoy guarda mensajes JSON en un canal privado. Migrar a SQLite o Postgres es escribir una clase y cambiar una línea.

Modular por cogs

LoL es el módulo 1. Sumar features (incluido un futuro módulo de IA) es agregar una carpeta en modules/ y registrarla, sin tocar lo que ya anda.

Referencia

Comandos

Slash commands. Los de administración piden el rol dev y, si está configurado, correrse en el canal de admin.

/link<Nombre#TAG>todos

Vincula tu cuenta de Riot con tu Discord. Se valida contra la Riot API; si el Riot ID no existe, no guarda nada.

/unlinktodos

Desvincula tu cuenta. Tus partidas dejan de contar para el ranking.

/ranking[Hoy | Semana]todos

Muestra el ranking del grupo on-demand, sin esperar al posteo automático.

/help · /ayudatodos

Listan los comandos disponibles según tu rol. Son dos nombres para lo mismo.

/link-admin<usuario> <Nombre#TAG>rol dev

Vincula la cuenta de Riot de otro usuario del server. Requiere el rol dev y, si está configurado, correrse en el canal de administración.

/unlink-admin<usuario>rol dev

Desvincula la cuenta de otro usuario del server.

/ingest-nowrol dev

Fuerza una ingesta de partidas manual. Es idempotente: el dedup por (match_id, puuid) saltea lo que ya está guardado, así que correrlo de más no duplica nada.

El puntaje

Cómo se calcula el ranking

Una partida solo cuenta si la jugaste con al menos otro vinculado del grupo — las solitarias se descartan en la ingesta, igual que los remakes. En cada ventana (día, o semana desde el lunes) se agregan las stats por jugador y el motor aplica la fórmula de config/scoring.yaml: normaliza cada métrica con zscore y la pondera.

Pesos por defecto

5.0win_rate % de victorias
3.0kda (kills + assists) / muertes
2.0avg_deaths muertes promedio por partida (menos es mejor)
1.5damage_per_min daño a campeones por minuto
1.0avg_vision vision score promedio
0.5games_played partidas jugadas (premia participación)

Se ajusta sin tocar código: cambiás los pesos en el YAML y el próximo /ranking ya sale con la fórmula nueva.

Job automático 1×/día (recomendado 23:55 hora local): ingesta → ranking del día. Los lunes, recap semanal “Trolls y Pros” de la semana que cerró, contando solo Ranked Flex.