Skip to content

Discord Logging

Discord Логування

BUPA Chat має дві незалежні функції Discord. Ця сторінка охоплює виходяче логування через вебхуки (чат → Discord). Вхідний міст каналів (Discord → чат), налаштований у shared/config/discord.lua, є окремою функцією, описаною в кінці.

Вебхук-логування (чат → Discord)

URL-адреси вебхуків знаходяться в server/webhook.lua — файлі escrow_ignore, який ви редагуєте напряму. Визначено три ключі:

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

Замініть початкові URL-адреси проксі на власні URL-адреси вебхуків Discord. Якщо URL-адреса ключа порожня, для нього нічого не надсилається.

Як повідомлення зіставляються з вебхуками

Записи конфігурації посилаються на вебхук за його ключем через webhookKey:

  • Категорії — кожна категорія може встановлювати webhookKey (див. Категорії чату).
  • Приватні повідомленняconfig.pm.webhookKey (за замовчуванням chatMessage).
  • Емоції — кожна команда емоцій може встановлювати webhookKey (/me та /do використовують emoteCommand).

Кожне звичайне повідомлення чату завжди логується у вебхук chatMessage. Коли категорія також визначає власний webhookKey, повідомлення цієї категорії логуються як у вебхук категорії, так і у вебхук chatMessage.

Логування обробляється за допомогою функції sendDiscordLog(webhookKey, message, src), яка надсилає автономний JSON-пейлоад на зіставлену URL-адресу — жодних зовнішніх ресурсів 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.

Міст каналів (Discord → чат)

Окремо, shared/config/discord.lua (config.discord) може опитувати канали Discord та передавати їхні повідомлення в ігровий чат. За замовчуванням цю функцію вимкнено.

shared/config/discord.lua
config.discord = {
    active = false,
    pollInterval = 15000,   -- мс між опитуваннями
    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, тож повідомлення каналу з'являються лише у потрібних гравців. Міст читає повідомлення через API бота Discord і вимагає токен бота + ID гільдії, які надаються або в config.discord, або повторно використовуються з config.adminChatName.discord у файлі general.lua. Повідомлення, створені ботами, ігноруються.