Skip to content

Discord Logging

Discord Logging

BUPA Chat memiliki dua fitur Discord yang independen. Halaman ini membahas logging webhook keluar (chat → Discord). Jembatan channel masuk (Discord → chat), yang dikonfigurasi di shared/config/discord.lua, adalah fitur terpisah yang dijelaskan di bagian akhir.

Webhook logging (chat → Discord)

URL webhook berada di server/webhook.lua — file escrow_ignore yang dapat Anda edit secara langsung. Tiga kunci didefinisikan:

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

Ganti URL proxy placeholder dengan URL webhook Discord Anda sendiri. Jika URL suatu kunci kosong, tidak ada yang dikirim untuk kunci tersebut.

Cara pesan dipetakan ke webhook

Entri konfigurasi mereferensikan webhook berdasarkan kunci melalui webhookKey:

  • Kategori — setiap kategori dapat mengatur webhookKey (lihat Chat Categories).
  • Pesan pribadiconfig.pm.webhookKey (defaultnya adalah chatMessage).
  • Emote — setiap perintah emote dapat mengatur webhookKey (/me dan /do menggunakan emoteCommand).

Setiap pesan chat normal selalu dilog ke webhook chatMessage. Ketika sebuah kategori juga mendefinisikan webhookKey-nya sendiri, pesan kategori tersebut akan dilog ke webhook kategori sekaligus webhook chatMessage.

Logging ditangani oleh sendDiscordLog(webhookKey, message, src), yang mengirimkan payload JSON mandiri ke URL yang dipetakan — tidak memerlukan resource Discord eksternal:

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

Untuk menambahkan target log baru, tambahkan kunci ke tabel webhooks dan referensikan dari kategori, PM, atau emote via webhookKey.

Channel bridge (Discord → chat)

Secara terpisah, shared/config/discord.lua (config.discord) dapat melakukan polling channel Discord dan merelai pesan mereka ke dalam chat game. Fitur ini dinonaktifkan secara default.

shared/config/discord.lua
config.discord = {
    active = false,
    pollInterval = 15000,   -- ms antar polling
    channels = {
        {
            channelId = "",   -- Channel Discord untuk dibaca
            -- permissions = { "admin" },   -- opsional: siapa yang dapat melihat pesan ini
            -- jobs  = { police = true },
            -- gangs = { whiteGang = true },
            tags = { { tag = "Discord", textColor = { 51, 51, 51 }, bgColor = { 88, 101, 242 } } },
            color = { 200, 200, 200 },
        },
        -- channel lainnya: contoh Discord Admin / PD / EMS / Gang disertakan
    },
}

Setiap entri channel dapat dibatasi oleh permissions, jobs, atau gangs, sehingga pesan suatu channel hanya akan muncul bagi pemain yang tepat. Jembatan ini membaca pesan melalui API bot Discord dan memerlukan token bot + ID guild — yang disediakan di config.discord atau digunakan kembali dari config.adminChatName.discord di general.lua. Pesan yang dibuat oleh bot akan diabaikan.