Skip to content

Discord Logging

Discord Logging

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 (см. Chat Categories).
  • Личные сообщения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. Сообщения, созданные ботами, игнорируются.