Discord Logging
Discord Logging
BUPA Chat имеет две независимые функции Discord. На этой странице рассматривается исходящее логирование через вебхуки (чат → Discord). Входящий мост каналов (Discord → чат), настраиваемый в shared/config/discord.lua, является отдельной функцией, описанной в конце.
Вебхук-логирование (чат → Discord)
URL-адреса вебхуков находятся в server/webhook.lua — файле escrow_ignore, который вы редактируете напрямую. Определены три ключа:
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 не требуется:
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 и передавать их сообщения в игровой чат. По умолчанию эта функция отключена.
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. Сообщения, созданные ботами, игнорируются.