Skip to content

Discord Logging

Discord 로깅

BUPA Chat에는 두 개의 독립적인 Discord 기능이 있습니다. 이 페이지에서는 발신 웹훅 로깅 (채팅 → Discord)에 대해 다룹니다. shared/config/discord.lua에 설정되는 수신 채널 브리지 (Discord → 채팅)는 끝부분에 설명되어 있는 별도의 기능입니다.

웹훅 로깅 (채팅 → Discord)

웹훅 URL은 직접 수정하는 escrow_ignore 파일인 server/webhook.lua에 위치합니다. 세 가지 키가 정의되어 있습니다:

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

플레이스홀더 프록시 URL을 본인의 Discord 웹훅 URL로 교체하세요. 키의 URL이 비어 있는 경우, 해당 항목에 대해 아무것도 전송되지 않습니다.

메시지가 웹훅에 매핑되는 방식

설정 항목은 webhookKey를 통해 로 웹훅을 참조합니다:

  • 카테고리 — 각 카테고리는 webhookKey를 설정할 수 있습니다 (채팅 카테고리 참고).
  • 귓속말config.pm.webhookKey (기본값은 chatMessage).
  • 이모트 — 각 이모트 명령어는 webhookKey를 설정할 수 있습니다 (/me/doemoteCommand 사용).

모든 일반 채팅 메시지는 항상 chatMessage 웹훅에 로깅됩니다. 카테고리가 자체 webhookKey를 추가로 정의하는 경우, 해당 카테고리의 메시지는 카테고리 웹훅과 chatMessage 웹훅 모두에 로깅됩니다.

로깅은 sendDiscordLog(webhookKey, message, src)에 의해 처리되며, 이는 매핑된 URL로 독립형 JSON 페이로드를 전송합니다 — 외부 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

새로운 로그 대상을 추가하려면 webhooks 테이블에 키를 추가하고 webhookKey를 통해 카테고리, PM 또는 이모트에서 이를 참조하세요.

채널 브리지 (Discord → 채팅)

별도로, shared/config/discord.lua (config.discord)는 Discord 채널을 폴링하고 해당 메시지를 게임 채팅으로 중계할 수 있습니다. 기본적으로 비활성화되어 있습니다.

shared/config/discord.lua
config.discord = {
    active = false,
    pollInterval = 15000,   -- 폴링 간격 (ms)
    channels = {
        {
            channelId = "",   -- 읽어올 Discord 채널
            -- permissions = { "admin" },   -- 선택 사항: 이 메시지를 볼 수 있는 사람
            -- jobs  = { police = true },
            -- gangs = { whiteGang = true },
            tags = { { tag = "Discord", textColor = { 51, 51, 51 }, bgColor = { 88, 101, 242 } } },
            color = { 200, 200, 200 },
        },
        -- 추가 채널: Discord Admin / PD / EMS / Gang 예시 포함
    },
}

각 채널 항목은 permissions, jobs 또는 gangs로 제한할 수 있으므로, 권한이 있는 플레이어에게만 채널 메시지가 표시됩니다. 이 브리지는 Discord 봇 API를 통해 메시지를 읽어오며, config.discord에 제공되거나 general.luaconfig.adminChatName.discord에서 재사용되는 봇 토큰 + 길드 ID가 필요합니다. 봇이 작성한 메시지는 무시됩니다.