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:
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ści —
config.pm.webhookKey(domyślniechatMessage). - Emotki — każda komenda emotki może ustawić
webhookKey(/mei/douż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:
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" })
endAby 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.
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.