Documentación / Ranking Discord

Ranking Discord

Clasificaciones públicas en Discord (zombies, pesca, ítems…) con botones y paginación. Plan Premium.

Publica hasta 2 paneles por servidor. El mensaje del canal muestra el top; cada jugador pulsa Ver ranking y navega en un mensaje solo suyo. Plan Premium · WebLogs ≥ 9.6.

Setup

  1. 1Mis servidores → DiscordBot → Conectar (mismo bot que VIP, tickets y sorteos).
  2. 2Menú Ranking: categorías (Zombies se crea solo), emoji, reinicio y vistas 24h/7d, estilo del embed.
  3. 3Nuevo panel → canal Discord + categorías → Publicar.
  4. 4En FiveM, suma puntos con el export (o Adictos_Zombies ya lo llama al matar).
Staff: permisos Ver ranking / Gestionar ranking. Flush FiveM → panel: Panel Settings → Flush Ranking (por defecto 5 min).

Periodos, reinicio y eventos

En cada categoría puedes marcar vistas Hoy, 7 días, 30 días e Histórico. Los periodos se calculan sobre días naturales, así que Hoy arranca vacío a medianoche igual que un ranking diario del juego. También puedes poner inicio y fin de un evento: solo cuentan puntos dentro de esas fechas; al acabar se registra el ganador (y top 10) y se limpia la clasificación. El reinicio cada N días limpia el histórico automáticamente (cron del panel).

Dónde se guardan los puntos

Las tablas se crean solas al abrir Ranking o al recibir el primer lote. Con origen Export, los puntos se acumulan en el panel (ranking_scores, licencia Rockstar sin prefijo license:). Con origen ox_inventory o qb_inventory, el ranking se lee en vivo del JSON de inventario en la misma MySQL que el panel. El intervalo del embed público se configura en Panel Settings → Discord.

Tabla / campoPara qué
ranking_categoriesCategorías (clave, emoji o sin emoji, reinicio, vistas, origen)
ranking_scoresTotales históricos del export
ranking_scores_dailyBuckets diarios: una fila por jugador, categoría y día (rankings Hoy / 7d / 30d)
ranking_event_winnersGanador y metadatos al cerrar un evento
ranking_event_standingsTodas las posiciones archivadas; retención = días de logs del plan (Free/Premium)
ranking_panelsHasta 2 mensajes Discord (canal, categorías, refresh)
servers.weblogs_ranking_configJSON: módulo on/off, color, pie, filas por página
Inventario: en la categoría elige ox_inventory o qb_inventory y el objeto del servidor (misma MySQL que el panel). Export: escribe la clave libre o usa un atajo (Zombies, Pesca, Misiones, cultivos, Tala, Minería…). Una categoría export nueva también se crea sola al llegar el primer lote.

Export (Adictos_WebLogs)

Caché en memoria en FiveM y envío al panel cada N segundos (Panel Settings → Flush Ranking; por defecto 60 s). Delta opcional (por defecto 1).

exports['Adictos_WebLogs']:Ranking(source, 'Zombies')
exports['Adictos_WebLogs']:Ranking(source, 'pesca')
exports['Adictos_WebLogs']:Ranking(source, 'MisionesDiarias')
exports['Adictos_WebLogs']:Ranking(source, 'Tomate', cantidad)
exports['Adictos_WebLogs']:Ranking(source, 'Zombies', 1)  -- delta
Adictos_Zombies ya llama al export al matar. Adictos_Quest suma MisionesDiarias/Semanales/Mensuales + MisionesTotales al entregar. En otros scripts (cosecha, fundición, tala…), una línea por evento.

Leer clasificación desde un script (RankingBoard)

Para menús de pausa, HUD o scripts propios puedes pedir el top al panel (misma clasificación que Discord). Requiere WebLogs ≥ 9.6 y que la categoría exista en Ranking → Categorías.

-- Histórico, página 1
exports['Adictos_WebLogs']:RankingBoard('zombies', 1, nil, function(ok, board)
    if not ok or type(board) ~= 'table' then return end
    for _, e in ipairs(board.entries or {}) do
        print(('#%s %s — %s'):format(e.rank, e.player_name, e.score))
    end
end)

-- Ranking 7 días (period: 0=histórico, 1=24h, 7, 30)
exports['Adictos_WebLogs']:RankingBoard('pesca', 1, 7, function(ok, board) ... end)

-- Atajo: solo callback (página 1, histórico)
exports['Adictos_WebLogs']:RankingBoard('zombies', function(ok, board) ... end)

exports['Adictos_WebLogs']:RankingFlush()        -- forzar envío de puntos pendientes
exports['Adictos_WebLogs']:RankingPendingCount() -- cuántos hay en caché
Campo del boardQué trae
entries[]Cada fila: rank, player_name, score, license
total / page / pagesPaginación (filas por página = Ranking → Embed)
period_days0 histórico · 1 24h · 7 · 30
period_labelTexto legible del periodo activo
categoryMetadatos (label, emoji, origen export/inventario)
La clave de categoría es la misma que al sumar puntos (zombies, pesca…). WebLogs la normaliza a minúsculas. El panel cachea el board unos segundos (Panel Settings → Caché RankingBoard, default 15 s) para menús de pausa con muchos jugadores; se invalida al llegar nuevos puntos. Las categorías de inventario (ox/qb) en vivo no se cachean.

Cómo se ve el embed

Mensaje público (categoría por defecto, primera página). Color y pie se editan en Ranking → Embed.

Ranking Semanal — 🧟 Zombies
🥇 Carlos — 1.234
🥈 María — 890
🥉 Luis — 512
#4 Ana — 120
#5 Pedro — 98
24h · Top 10 · Pulsa Ver ranking para paginar (solo tú)
🧟 Zombies🐟 Pesca24h7 díasVer ranking
Al pulsar Ver ranking, otra categoría o un periodo (24h / 7 días), Discord responde con un mensaje efímero (solo tú) y botones ◀ ▶. El mensaje del canal no cambia para el resto.

Si falla

ProblemaQué mirar
No suben puntosWebLogs ≥ 9.6, módulo Ranking ON, export con source del jugador, flush en Panel Settings
Embed no se publicaDiscordBot conectado; canal de texto; el bot puede enviar embeds y botones
Botones sin respuestaInteractions Endpoint URL del bot apuntando al panel (como sorteos)
401 Unauthorized al publicarToken del bot inválido. Panel Settings → Discord: pega el Bot Token (Bot → Reset Token), no la Public Key. Invita el bot en Mis servidores → DiscordBot.
Inventario a 0Elige origen ox_inventory/qb_inventory y el objeto correcto; misma MySQL que el panel. O usa Export y llama Ranking(src, clave).