Skip to content

Discord Logging

Discord Logging

BUPA Chat are două funcții Discord independente. Această pagină acoperă logging-ul prin webhook-uri de ieșire (chat → Discord). Podul pentru canale de intrare (Discord → chat), configurat în shared/config/discord.lua, este o funcție separată descrisă la sfârșit.

Webhook logging (chat → Discord)

URL-urile webhook se află în server/webhook.lua — un fișier escrow_ignore pe care îl editezi direct. Sunt definite trei chei:

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

Înlocuiește URL-urile proxy demonstrative cu propriile URL-uri de webhook Discord. Dacă URL-ul unei chei este gol, nu se va trimite nimic pentru aceasta.

Cum sunt mapate mesajele la webhook-uri

Intrările din configurație fac referire la un webhook prin cheia sa, folosind webhookKey:

  • Categorii — fiecare categorie poate seta webhookKey (vezi Chat Categories).
  • Mesaje privateconfig.pm.webhookKey (valoarea implicită este chatMessage).
  • Emote-uri — fiecare comandă de emote poate seta webhookKey (/me și /do folosesc emoteCommand).

Fiecare mesaj normal din chat este înregistrat întotdeauna în webhook-ul chatMessage. Atunci când o categorie definește și propriul său webhookKey, mesajele din acea categorie sunt înregistrate atât în webhook-ul categoriei, cât și în cel pentru chatMessage.

Logging-ul este gestionat de sendDiscordLog(webhookKey, message, src), care trimite un payload JSON independent către URL-ul mapat — nu este necesară nicio resursă Discord externă:

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

Pentru a adăuga o nouă țintă de log, adaugă o cheie în tabelul webhooks și fă referire la ea dintr-o categorie, mesaj privat (PM) sau emote prin intermediul webhookKey.

Channel bridge (Discord → chat)

Separat, shared/config/discord.lua (config.discord) poate interoga canalele Discord și retransmite mesajele acestora în chatul din joc. Este dezactivat în mod implicit.

shared/config/discord.lua
config.discord = {
    active = false,
    pollInterval = 15000,   -- ms între interogări
    channels = {
        {
            channelId = "",   -- Canalul Discord din care se citește
            -- permissions = { "admin" },   -- opțional: cine poate vedea aceste mesaje
            -- jobs  = { police = true },
            -- gangs = { whiteGang = true },
            tags = { { tag = "Discord", textColor = { 51, 51, 51 }, bgColor = { 88, 101, 242 } } },
            color = { 200, 200, 200 },
        },
        -- mai multe canale: exemple incluse pentru Discord Admin / PD / EMS / Gang
    },
}

Fiecare intrare de canal poate fi restricționată prin permissions, jobs sau gangs, astfel încât mesajele unui canal să apară doar pentru jucătorii potriviți. Podul citește mesajele prin API-ul botului Discord și necesită un token de bot + ID de server (guild ID) — furnizate fie în config.discord, fie preluate din config.adminChatName.discord în general.lua. Mesajele scrise de boți sunt ignorate.