Ir al contenido

Bot de Discord · Beta con el grupo · LoL, trolls, sonidos y puntos

BogaBot

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.

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

En el server

Así se ve en Discord

Capturas reales del server del grupo, sin retoques: lo que postea el bot después de una partida y cuando alguien pide el ranking.

Carreada + /ranking
Cuando alguien se carga al equipo, el bot lo festeja con cada jugada y lo que sumó. Abajo, /ranking con la tabla del día: puntaje, KDA, daño, visión y farm por jugador.
Resumen de partida
Al terminar cada Ranked con gente del grupo: los dos equipos, el cruce línea contra línea y los dos medidores, troll-o-metro y carry-o-metro.

Lo que hace

Un ranking que se arma solo, y un poco más

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.

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

Puntaje configurable

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.

Detector de trolls

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.

Avisos en vivo

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.

Sonidos en voz

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.

Puntos canjeables

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 en caliente

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

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, 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

Trolleadas y papelones

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

Nada aparte

Suma al ranking troll y se ve en el troll-o-metro del aviso de partida.

8+

🤡 Trolleada

En el canal de trolls: una línea con la anécdota etiquetando al jugador, más el detalle.

15+

💀 Papelón

Además, una sola línea en #general: “¡Trolleada histórica! @jugador nos tiraban la base y estaba farmeando…”.

Ver las 25 reglas en la wiki →

Referencia

Comandos

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.

🎮 Ranking LoL

/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. Solo cuentan partidas Ranked (Flex y Solo/Duo).

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

Vincula la cuenta de Riot de otro usuario del server.

/unlink-admin<usuario>rol dev

Desvincula la cuenta de otro usuario del server.

/ingest-nowrol dev

Fuerza una ingesta de partidas. Es idempotente: el dedup por (match_id, discord_id) saltea lo que ya está guardado.

/riot-key[key]rol dev

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.

🤡 Trolls

/trolls[Semana | Semana pasada | Mes | Histórico]todos

Ranking troll por índice (puntos troll promedio por partida): categoría, especialidad, peor partida y tendencia contra el período anterior.

/troll-analizar[usuario] [partida]todos

Juzga una partida (por defecto la última guardada): qué cargos troll tiene, cuántos puntos suma cada uno y por qué.

/trolls-reglastodos

Qué detecta el bot y cuántos puntos suma cada cosa, con la config que está activa.

/trolls-reiniciarrol dev

El ranking troll arranca de cero desde ahora. Las partidas viejas quedan guardadas.

/trolls-recalcularrol dev

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.

🔊 Sonidos

/sonido[nombre]todos

El bot entra a tu canal de voz, tira el sonido (o uno al azar) y se va.

/sonidostodos

Lista los sonidos cargados.

/canjear-sonido<nombre> <audio>rol puntos

Cambiás puntos por subir un sonido tuyo temporal (por defecto 100 puntos, hasta 8 s, dura 7 días).

/sonido-del<nombre>rol puntos

Borra un sonido. El dueño puede borrar el que canjeó; un dev, cualquiera.

/sonido-add<nombre> <audio>rol dev

Sube un sonido permanente (mp3, ogg o wav, hasta 2 MB).

/sonido-forzar[nombre] [canal]rol dev

El bot entra a un canal de voz y tira ese sonido. Si hay otro sonando, espera su turno.

💰 Puntos

/puntos[usuario]todos

Cuántos puntos tenés (o los de otro) y cómo se ganan.

/puntos-toptodos

Ranking de puntos del server.

/puntos-dar<usuario> <cantidad>rol dev

Suma o resta puntos a alguien (cantidad negativa para restar).

ℹ️ Ayuda

/help · /ayudatodos

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

Cómo se calcula el ranking

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

5.0carry_rate — % de partidas carreadas (victoria + KDA ≥ 5)
4.0troll_rate — % de partidas troleadas (KDA < 0.5) (menos es mejor)
3.0kda — (kills + assists) / muertes
2.0win_rate — % de victorias
1.5avg_deaths — muertes promedio por partida (menos es mejor)
1.0damage_per_min — daño a campeones por minuto
0.5avg_vision — vision score promedio

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, además, el recap semanal “Trolls y Pros” de la semana que cerró (solo Ranked Flex) y la corona del Troll de la semana.