Skip to content

Discord Logging

Discord ログ機能

BUPA Chat には2つの独立した Discord 機能があります。このページでは送信 Webhook ログ機能(チャット → Discord)について説明します。shared/config/discord.lua で設定する受信チャンネルブリッジ機能(Discord →チャット)は、最後に説明する別の機能です。

Webhook ログ機能(チャット → Discord)

Webhook URL は server/webhook.lua に記述します(直接編集可能な escrow_ignore ファイルです)。3つのキーが定義されています:

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

プレースホルダーのプロキシ URL をご自身の Discord Webhook URL に置き換えてください。キーの URL が空の場合、そのログは送信されません。

メッセージと Webhook の紐付け方法

設定エントリは webhookKey を介してキーで Webhook を参照します:

  • カテゴリ — 各カテゴリで webhookKey を設定できます(チャットカテゴリを参照)。
  • プライベートメッセージconfig.pm.webhookKey(デフォルトは chatMessage)。
  • エモート — 各エモートコマンドで webhookKey を設定できます(/me および /doemoteCommand を使用します)。

すべての通常のチャットメッセージは常に chatMessage の Webhook にログとして送信されます。カテゴリが独自の webhookKey も定義している場合、そのカテゴリのメッセージはカテゴリ用 Webhook と chatMessage Webhookの両方にログ記録されます。

ログ記録は 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 テーブルにキーを追加し、カテゴリ、PM、またはエモートから webhookKey を経由してそれを参照します。

チャンネルブリッジ機能(Discord → チャット)

これとは別に、shared/config/discord.lua (config.discord) を使用して Discord チャンネルをポーリングし、そのメッセージをゲーム内チャットに中継することができます。デフォルトでは無効になっています。

shared/config/discord.lua
config.discord = {
    active = false,
    pollInterval = 15000,   -- ms between polls
    channels = {
        {
            channelId = "",   -- Discord channel to read from
            -- permissions = { "admin" },   -- optional: who can see these messages
            -- jobs  = { police = true },
            -- gangs = { whiteGang = true },
            tags = { { tag = "Discord", textColor = { 51, 51, 51 }, bgColor = { 88, 101, 242 } } },
            color = { 200, 200, 200 },
        },
        -- more channels: Discord Admin / PD / EMS / Gang examples included
    },
}

各チャンネルのエントリは permissionsjobs、または gangs で制限できるため、権限を持つプレイヤーにのみチャンネルのメッセージが表示されます。ブリッジは Discord ボット API を介してメッセージを読み取るため、config.discord で指定するか、general.luaconfig.adminChatName.discord から流用したボットトークンとギルド ID が必要になります。ボットによって送信されたメッセージは無視されます。