Skip to content

Discord Logging

Discord Logging

BUPA Chat posiada dwie niezależne funkcje Discord. Ta strona omawia wychodzące logowanie przez webhooki (chat → Discord). Przychodzący mostek kanałów (Discord → chat), skonfigurowany w shared/config/discord.lua, to osobna funkcja opisana na końcu.

Webhook logging (chat → Discord)

Adresy URL webhooków znajdują się w pliku server/webhook.lua — jest to plik escrow_ignore, który edytujesz bezpośrednio. Zdefiniowano w nim trzy klucze:

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

Zastąp przykładowe adresy URL proxy własnymi adresami URL webhooków Discord. Jeśli adres URL dla danego klucza jest pusty, nic nie zostanie dla niego wysłane.

How messages map to webhooks

Wpisy konfiguracyjne odwołują się do webhooka za pomocą jego klucza poprzez webhookKey:

  • Kategorie — każda kategoria może ustawić webhookKey (zobacz Chat Categories).
  • Prywatne wiadomościconfig.pm.webhookKey (domyślnie chatMessage).
  • Emotki — każda komenda emotki może ustawić webhookKey (/me i /do używają emoteCommand).

Każda zwykła wiadomość czatu jest zawsze logowana do webhooka chatMessage. Gdy kategoria definiuje również własny webhookKey, wiadomości z tej kategorii są logowane zarówno do webhooka kategorii, jak i webhooka chatMessage.

Logowanie jest obsługiwane przez funkcję sendDiscordLog(webhookKey, message, src), która wysyła samodzielny ładunek JSON pod przypisany adres URL — nie są wymagane żadne zewnętrzne zasoby Discord:

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

Aby dodać nowy cel logowania, dodaj klucz do tabeli webhooks i odwołaj się do niego z poziomu kategorii, PW lub emotki za pomocą webhookKey.

Channel bridge (Discord → chat)

Niezależnie od tego, plik shared/config/discord.lua (config.discord) może odpytywać kanały Discord i przekazywać ich wiadomości na czat w grze. Funkcja ta jest domyślnie wyłączona.

shared/config/discord.lua
config.discord = {
    active = false,
    pollInterval = 15000,   -- ms between polls
    channels = {
        {
            channelId = "",   -- Discord channel to read from
            -- permissions = { "admin" },   -- optional: who can see these messages
            -- jobs  = { police = true },
            -- gangs = { whiteGang = true },
            tags = { { tag = "Discord", textColor = { 51, 51, 51 }, bgColor = { 88, 101, 242 } } },
            color = { 200, 200, 200 },
        },
        -- more channels: Discord Admin / PD / EMS / Gang examples included
    },
}

Każdy wpis kanału może być ograniczony przez permissions, jobs lub gangs, dzięki czemu wiadomości z danego kanału pojawiają się tylko dla odpowiednich graczy. Mostek odczytuje wiadomości poprzez API bota Discord i wymaga tokenu bota + ID serwera (guild ID) — dostarczonych w config.discord lub pobranych z config.adminChatName.discord w pliku general.lua. Wiadomości napisane przez boty są ignorowane.