Connexion

Panel de logs

Configurez la surface de logs staff publique servie sur /logs/<votre-clé-projet>.

Mis à jour le 2 mai 2026

Panel de logs

Le panel de logs vit sur unbbound.com/logs/<votre-clé-projet> et c'est le dashboard que votre staff visite pour lire les événements game-server.

L'authentification utilise votre propre application Discord — Unbbound ne voit jamais les tokens de votre staff.

Assistant de configuration

L'assistant fait six étapes guidées :

  1. Application — créez une app Discord sur le developer portal.
  2. Client — collez le Client ID + le Client Secret.
  3. Bot — collez le bot token (révélé une seule fois via Reset Token).
  4. URL de redirection — copiez l'URL qu'on affiche et collez-la sous OAuth2 → Redirects.
  5. Invite — invitez le bot sur votre serveur Discord avec le scope bot et la permission Administrator.
  6. Serveur — collez l'ID du serveur Discord. On lance ensuite la vérification, et tout check qui échoue vous renvoie directement sur l'étape concernée.

Rôles autorisés

Une fois la vérification passée, Unbbound récupère chaque rôle de votre serveur Discord. Cochez ceux qui doivent voir le panel — le reste de votre communauté tombe sur une page polie qui leur dit qu'ils ne font pas partie du staff.

URL publique

Le slug est dérivé de votre identifiant projet (défini lors de l'assistant d'onboarding). Pour le renommer, changez d'abord la clé projet.

Émettre une ligne de log

Depuis n'importe quel script server-side, poussez vos événements via l'API logs Unbbound. L'agent batch les appels et POST toutes les 2 secondes :

lua
local Unbbound = exports['unbbound']

RegisterNetEvent('shop:purchase', function(itemId, price)
  local src = source
  local player = ESX.GetPlayerFromId(src)

  Unbbound:log({
    script   = 'shop',
    author   = player.getName(),
    uniqueId = player.identifier,
    message  = ('A acheté %sx %s pour $%d'):format(1, itemId, price),
    metadata = { itemId = itemId, price = price },
  })
end)

Chaque appel apparaît sous /logs/<votre-slug> en temps réel. Le filtrage sur script, author ou uniqueId est server-side, donc même un historique d'un million de lignes reste fluide.

js
// Ou depuis un script JS-bundled (txAdmin, monitors, etc.)
const res = await fetch(`https://api.unbbound.com/log-panel/${slug}/ingest`, {
  method: "POST",
  headers: {
    "content-type": "application/json",
    "x-unbbound-token": INGEST_TOKEN,
  },
  body: JSON.stringify({
    script: "monitor",
    author: "system",
    uniqueId: "node-1",
    message: "Tiède du serveur terminé",
  }),
});