Skip to content

Discord Logging

Discord Logging

BUPA Chat má dvě nezávislé Discord funkce. Tato stránka se věnuje odchozímu webhook logování (chat → Discord). Příchozí kanálový můstek (Discord → chat), který se nastavuje v shared/config/discord.lua, je samostatná funkce popsaná na konci.

Webhook logování (chat → Discord)

URL adresy webhooků se nacházejí v server/webhook.lua — souboru typu escrow_ignore, který upravujete přímo. Jsou zde definovány tři klíče:

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

Nahraďte zástupné proxy URL adresy svými vlastními URL adresami Discord webhooků. Pokud je URL adresa nějakého klíče prázdná, nic se pro něj neodesílá.

Jak se zprávy mapují na webhooky

Položky konfiguračního souboru odkazují na webhook pomocí svého klíče přes webhookKey:

  • Kategorie — každá kategorie může mít nastavený webhookKey (viz Chat Categories).
  • Soukromé zprávyconfig.pm.webhookKey (výchozí hodnota je chatMessage).
  • Emoty — každý příkaz pro emot může mít nastavený webhookKey (/me a /do používají emoteCommand).

Každá běžná zpráva v chatu se vždy zaznamenává do webhooku chatMessage. Pokud kategorie definuje také vlastní webhookKey, zprávy této kategorie se zaznamenávají jak do webhooku kategorie, tak do webhooku chatMessage.

Logování je zajištěno funkcí sendDiscordLog(webhookKey, message, src), která odesílá samostatný JSON payload na namapovanou URL adresu — není vyžadován žádný externí Discord zdroj:

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

Chcete-li přidat nový cíl logování, přidejte klíč do tabulky webhooks a odkažte se na něj z kategorie, soukromé zprávy nebo emotu pomocí webhookKey.

Kanálový můstek (Discord → chat)

Soubor shared/config/discord.lua (config.discord) navíc dokáže načítat zprávy z Discord kanálů a přeposílat je do herního chatu. Ve výchozím nastavení je tato funkce deaktivována.

shared/config/discord.lua
config.discord = {
    active = false,
    pollInterval = 15000,   -- ms mezi jednotlivými načteními
    channels = {
        {
            channelId = "",   -- Discord kanál, ze kterého se má číst
            -- permissions = { "admin" },   -- volitelné: kdo může tyto zprávy vidět
            -- jobs  = { police = true },
            -- gangs = { whiteGang = true },
            tags = { { tag = "Discord", textColor = { 51, 51, 51 }, bgColor = { 88, 101, 242 } } },
            color = { 200, 200, 200 },
        },
        -- další kanály: jsou zde přiloženy příklady pro Discord Admin / PD / EMS / Gang
    },
}

Každou položku kanálu lze omezit pomocí permissions, jobs nebo gangs, takže se zprávy z daného kanálu zobrazí pouze správným hráčům. Můstek čte zprávy prostřednictvím API Discord bota a vyžaduje token bota + ID serveru (guild ID) — které se zadávají buď v config.discord, nebo se přebírají z config.adminChatName.discord v souboru general.lua. Zprávy vytvořené boty jsou ignorovány.