Skip to content

Discord Logging

Discord Logging

BUPA Chat possède deux fonctionnalités Discord indépendantes. Cette page couvre la journalisation par webhook sortant (chat → Discord). La passerelle de canal entrante (Discord → chat), configurée dans shared/config/discord.lua, est une fonctionnalité distincte décrite à la fin.

Webhook logging (chat → Discord)

Les URL de webhook se trouvent dans server/webhook.lua — un fichier escrow_ignore que vous modifiez directement. Trois clés sont définies :

server/webhook.lua
local webhooks = {
    chatMessage  = "https://.../webhook-proxy/....",
    emoteCommand = "https://.../webhook-proxy/....",
    pmMessage    = "https://.../webhook-proxy/....",
}

Remplacez les URL de proxy fictives par vos propres URL de webhook Discord. Si l'URL d'une clé est vide, rien n'est envoyé pour celle-ci.

Comment les messages sont associés aux webhooks

Les entrées de configuration font référence à un webhook par sa clé via webhookKey :

  • Catégories — chaque catégorie peut définir webhookKey (voir Chat Categories).
  • Messages privésconfig.pm.webhookKey (par défaut chatMessage).
  • Emotes — chaque commande d'emote peut définir webhookKey (/me et /do utilisent emoteCommand).

Chaque message de chat normal est toujours journalisé dans le webhook chatMessage. Lorsqu'une catégorie définit également son propre webhookKey, les messages de cette catégorie sont journalisés à la fois dans le webhook de la catégorie et dans le webhook chatMessage.

La journalisation est gérée par sendDiscordLog(webhookKey, message, src), qui envoie une charge utile JSON autonome à l'URL associée — aucune ressource Discord externe n'est requise :

server/webhook.lua
function sendDiscordLog(webhook, msg, src)
    local url = webhooks[webhook]
    if not url or url == "" then return end
    local payload = type(msg) == "table" and { embeds = { msg } } or { content = tostring(msg) }
    PerformHttpRequest(url, function() end, "POST", json.encode(payload),
        { ["Content-Type"] = "application/json" })
end

Pour ajouter une nouvelle cible de journal, ajoutez une clé à la table webhooks et faites-y référence à partir d'une catégorie, d'un MP ou d'une emote via webhookKey.

Channel bridge (Discord → chat)

Par ailleurs, shared/config/discord.lua (config.discord) peut interroger des salons Discord et relayer leurs messages dans le chat du jeu. Cette fonction est désactivée par défaut.

shared/config/discord.lua
config.discord = {
    active = false,
    pollInterval = 15000,   -- ms entre les requêtes
    channels = {
        {
            channelId = "",   -- Salon Discord à lire
            -- permissions = { "admin" },   -- optionnel : qui peut voir ces messages
            -- jobs  = { police = true },
            -- gangs = { whiteGang = true },
            tags = { { tag = "Discord", textColor = { 51, 51, 51 }, bgColor = { 88, 101, 242 } } },
            color = { 200, 200, 200 },
        },
        -- plus de salons : exemples Discord Admin / LSPD / EMS / Gangs inclus
    },
}

Chaque entrée de salon peut être filtrée par permissions, jobs ou gangs, afin que les messages d'un salon n'apparaissent que pour les joueurs appropriés. La passerelle lit les messages via l'API du bot Discord et nécessite un jeton de bot + un ID de serveur — fournis soit dans config.discord, soit réutilisés à partir de config.adminChatName.discord dans general.lua. Les messages rédigés par des bots sont ignorés.