Skip to content

Discord Logging

Discord Logging

BUPA Chat hat zwei unabhängige Discord-Funktionen. Diese Seite behandelt das ausgehende Webhook-Logging (Chat → Discord). Die einkommende Kanalbrücke (Discord → Chat), die in shared/config/discord.lua konfiguriert wird, ist eine separate Funktion, die am Ende beschrieben wird.

Webhook-Logging (chat → Discord)

Webhook-URLs befinden sich in server/webhook.lua – einer escrow_ignore-Datei, die du direkt bearbeitest. Es sind drei Schlüssel definiert:

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

Ersetze die Platzhalter-Proxy-URLs durch deine eigenen Discord-Webhook-URLs. Wenn die URL eines Schlüssels leer ist, wird dafür nichts gesendet.

Wie Nachrichten auf Webhooks abgebildet werden

Konfigurationseinträge verweisen über webhookKey anhand ihres Schlüssels auf einen Webhook:

  • Kategorien – jede Kategorie kann einen webhookKey festlegen (siehe Chat Categories).
  • Private Nachrichtenconfig.pm.webhookKey (standardmäßig chatMessage).
  • Emotes – jeder Emote-Befehl kann einen webhookKey festlegen (/me und /do verwenden emoteCommand).

Jede normale Chatnachricht wird immer im chatMessage-Webhook protokolliert. Wenn eine Kategorie zusätzlich ihren eigenen webhookKey definiert, werden die Nachrichten dieser Kategorie sowohl an den Kategorie-Webhook als auch an den chatMessage-Webhook gesendet.

Das Logging wird von sendDiscordLog(webhookKey, message, src) verarbeitet, das eine eigenständige JSON-Nutzlast an die zugeordnete URL sendet – es wird keine externe Discord-Ressource benötigt:

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

Um ein neues Protokollierungsziel hinzuzufügen, füge der webhooks-Tabelle einen Schlüssel hinzu und verweise von einer Kategorie, PM oder einem Emote über webhookKey darauf.

Kanalbrücke (Discord → chat)

Unabhängig davon kann shared/config/discord.lua (config.discord) Discord-Kanäle abfragen und deren Nachrichten in den In-Game-Chat weiterleiten. Sie ist standardmäßig deaktiviert.

shared/config/discord.lua
config.discord = {
    active = false,
    pollInterval = 15000,   -- ms zwischen Abfragen
    channels = {
        {
            channelId = "",   -- Zu lesender Discord-Kanal
            -- permissions = { "admin" },   -- optional: wer diese Nachrichten sehen kann
            -- jobs  = { police = true },
            -- gangs = { whiteGang = true },
            tags = { { tag = "Discord", textColor = { 51, 51, 51 }, bgColor = { 88, 101, 242 } } },
            color = { 200, 200, 200 },
        },
        -- weitere Kanäle: Beispiele für Discord Admin / PD / EMS / Gang enthalten
    },
}

Jeder Kanaleintrag kann durch permissions, jobs oder gangs eingeschränkt werden, sodass die Nachrichten eines Kanals nur für die entsprechenden Spieler angezeigt werden. Die Brücke liest Nachrichten über die Discord-Bot-API und erfordert ein Bot-Token + Guild-ID – diese werden entweder in config.discord angegeben oder aus config.adminChatName.discord in general.lua übernommen. Von Bots verfasste Nachrichten werden ignoriert.