Ranking diario y semanal
Un job 1×/día ingiere las partidas del grupo y postea el ranking del día, contando solo Ranked (Flex y Solo/Duo). Los lunes, el recap semanal "Trolls y Pros" de la semana que cerró (solo Ranked Flex).
Bot de Discord · Beta con el grupo · LoL, trolls, sonidos y puntos
Ranking de League of Legends, detector de trolls y sonidos para tu grupo de Discord. Vincula cuentas de Riot, ingiere partidas desde la Riot API y publica rankings diarios y semanales de Ranked en Discord. Juzga cada partida con ~25 reglas para detectar trolleadas, avisa en vivo cuando termina una partida, tira sonidos en los canales de voz y reparte puntos canjeables.
Producto de bogalabs — un grupo de amigos programadores construyendo cosas para divertirse.
En el server
Capturas reales del server del grupo, sin retoques: lo que postea el bot después de una partida y cuando alguien pide el ranking.
/ranking con la tabla del día: puntaje, KDA, daño, visión y farm por jugador.Lo que hace
El bot vincula las cuentas de Riot del grupo, lee las partidas desde la API, calcula un puntaje por jugador y lo postea en Discord. Encima de eso: juzga cada partida para encontrar a los trolls, tira sonidos en los canales de voz y reparte puntos que se canjean.
Un job 1×/día ingiere las partidas del grupo y postea el ranking del día, contando solo Ranked (Flex y Solo/Duo). Los lunes, el recap semanal "Trolls y Pros" de la semana que cerró (solo Ranked Flex).
La fórmula vive en config/scoring.yaml: premia el % de partidas carreadas y castiga el de troleadas, más KDA, victorias, muertes, daño y visión. Se ajusta sin tocar código.
Cada partida se juzga con ~25 reglas, del timeline y de las stats: AFK, feeder, items vendidos, "nos tiraban la base", throws… Hace falta una señal fuerte: una partida floja no es una trolleada.
Cada pocos minutos el bot busca partidas nuevas y postea el cuadro de los 10 jugadores con el troll-o-metro, etiquetando a los del grupo. Los papelones históricos caen en #general.
El bot entra a un canal de voz, tira un audio corto y se va: a pedido con /sonido o al azar cada tanto, con cooldown y horario configurables.
Quienes tienen el rol de puntos suman por estar en voz y por jugar LoL (más si ganan), y los canjean por subir su propio sonido por unos días.
/riot-key valida y aplica una key nueva sin reiniciar, y el bot avisa en el canal de admin antes de que venza. Con la Personal API Key, no hay que tocar nada.
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, sonidos, puntos y ayuda son cogs separados. Sumar una feature es agregar una carpeta en modules/ y registrarla, sin tocar lo que ya anda.
El detector
Después de cada partida, cada jugador del grupo se juzga con ~25 reglas: unas miran el timeline (qué pasó y cuándo), otras las stats. Cada cargo suma puntos troll; en ranked pesan ×1,25 y si igual ganaron, ×0,5. Una partida floja no alcanza: los cargos menores suman como mucho 4, así que para trollear hace falta una señal fuerte.
< 8
Suma al ranking troll y se ve en el troll-o-metro del aviso de partida.
8+
En el canal de trolls: una línea con la anécdota etiquetando al jugador, más el detalle.
15+
Además, una sola línea en #general: “¡Trolleada histórica! @jugador nos tiraban la base y estaba farmeando…”.
Referencia
Slash commands, agrupados por módulo. Los de rol dev piden el rol de administración (y los de admin, además, el canal de admin); los de rol puntos, el rol que junta puntos.
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. Solo cuentan partidas Ranked (Flex y Solo/Duo).
Vincula la cuenta de Riot de otro usuario del server.
Desvincula la cuenta de otro usuario del server.
Fuerza una ingesta de partidas. Es idempotente: el dedup por (match_id, discord_id) saltea lo que ya está guardado.
Carga una RIOT_API_KEY nueva sin reiniciar el bot (la valida y la guarda). Sin key, muestra cuándo vence la actual. La respuesta es efímera: la key no queda visible.
Ranking troll por índice (puntos troll promedio por partida): categoría, especialidad, peor partida y tendencia contra el período anterior.
Juzga una partida (por defecto la última guardada): qué cargos troll tiene, cuántos puntos suma cada uno y por qué.
Qué detecta el bot y cuántos puntos suma cada cosa, con la config que está activa.
El ranking troll arranca de cero desde ahora. Las partidas viejas quedan guardadas.
Vuelve a pedirle a Riot las partidas guardadas con un análisis viejo para completarles stats y timeline. Corre solo al arrancar; esto lo fuerza a mano, en silencio.
El bot entra a tu canal de voz, tira el sonido (o uno al azar) y se va.
Lista los sonidos cargados.
Cambiás puntos por subir un sonido tuyo temporal (por defecto 100 puntos, hasta 8 s, dura 7 días).
Borra un sonido. El dueño puede borrar el que canjeó; un dev, cualquiera.
Sube un sonido permanente (mp3, ogg o wav, hasta 2 MB).
El bot entra a un canal de voz y tira ese sonido. Si hay otro sonando, espera su turno.
Cuántos puntos tenés (o los de otro) y cómo se ganan.
Ranking de puntos del server.
Suma o resta puntos a alguien (cantidad negativa para restar).
Listan los comandos que podés usar según tus roles. Son dos nombres para lo mismo y la respuesta la ves solo vos.
El puntaje
Solo cuentan partidas Ranked (Flex y Solo/Duo) jugadas con al menos otro vinculado del grupo; las solitarias y los remakes se descartan. En cada ventana (día, o semana desde el lunes) el motor aplica la fórmula de config/scoring.yaml: normaliza cada métrica con zscore y la pondera. Todo es promedio o porcentaje por partida: calidad sobre cantidad.
Pesos por defecto
carry_rate — % de partidas carreadas (victoria + KDA ≥ 5)troll_rate — % de partidas troleadas (KDA < 0.5) (menos es mejor)kda — (kills + assists) / muerteswin_rate — % de victoriasavg_deaths — muertes promedio por partida (menos es mejor)damage_per_min — daño a campeones por minutoavg_vision — vision score promedioSe ajusta sin tocar código: cambiás los pesos en el YAML y el próximo /ranking ya sale con la fórmula nueva.