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).
Bot de Discord · MVP · Módulo 1 (LoL)
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.
Lo que hace
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.
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).
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.
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.
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.
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.
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
Slash commands. Los de administración piden el rol dev y, si está configurado, correrse en el canal de admin.
Vincula tu cuenta de Riot con tu Discord. Se valida contra la Riot API; si el Riot ID no existe, no guarda nada.
Desvincula tu cuenta. Tus partidas dejan de contar para el ranking.
Muestra el ranking del grupo on-demand, sin esperar al posteo automático.
Listan los comandos disponibles según tu rol. Son dos nombres para lo mismo.
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.
Desvincula la cuenta de otro usuario del server.
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
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
win_rate — % de victoriaskda — (kills + assists) / muertesavg_deaths — muertes promedio por partida (menos es mejor)damage_per_min — daño a campeones por minutoavg_vision — vision score promediogames_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.