Discord Logging
Discord Logging
BUPA Chat possède deux fonctionnalités Discord indépendantes. Cette page couvre la journalisation par webhook sortant (chat → Discord). La passerelle de canal entrante (Discord → chat), configurée dans shared/config/discord.lua, est une fonctionnalité distincte décrite à la fin.
Webhook logging (chat → Discord)
Les URL de webhook se trouvent dans server/webhook.lua — un fichier escrow_ignore que vous modifiez directement. Trois clés sont définies :
local webhooks = {
chatMessage = "https://.../webhook-proxy/....",
emoteCommand = "https://.../webhook-proxy/....",
pmMessage = "https://.../webhook-proxy/....",
}Remplacez les URL de proxy fictives par vos propres URL de webhook Discord. Si l'URL d'une clé est vide, rien n'est envoyé pour celle-ci.
Comment les messages sont associés aux webhooks
Les entrées de configuration font référence à un webhook par sa clé via webhookKey :
- Catégories — chaque catégorie peut définir
webhookKey(voir Chat Categories). - Messages privés —
config.pm.webhookKey(par défautchatMessage). - Emotes — chaque commande d'emote peut définir
webhookKey(/meet/doutilisentemoteCommand).
Chaque message de chat normal est toujours journalisé dans le webhook chatMessage. Lorsqu'une catégorie définit également son propre webhookKey, les messages de cette catégorie sont journalisés à la fois dans le webhook de la catégorie et dans le webhook chatMessage.
La journalisation est gérée par sendDiscordLog(webhookKey, message, src), qui envoie une charge utile JSON autonome à l'URL associée — aucune ressource Discord externe n'est requise :
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" })
endPour ajouter une nouvelle cible de journal, ajoutez une clé à la table webhooks et faites-y référence à partir d'une catégorie, d'un MP ou d'une emote via webhookKey.
Channel bridge (Discord → chat)
Par ailleurs, shared/config/discord.lua (config.discord) peut interroger des salons Discord et relayer leurs messages dans le chat du jeu. Cette fonction est désactivée par défaut.
config.discord = {
active = false,
pollInterval = 15000, -- ms entre les requêtes
channels = {
{
channelId = "", -- Salon Discord à lire
-- permissions = { "admin" }, -- optionnel : qui peut voir ces messages
-- jobs = { police = true },
-- gangs = { whiteGang = true },
tags = { { tag = "Discord", textColor = { 51, 51, 51 }, bgColor = { 88, 101, 242 } } },
color = { 200, 200, 200 },
},
-- plus de salons : exemples Discord Admin / LSPD / EMS / Gangs inclus
},
}Chaque entrée de salon peut être filtrée par permissions, jobs ou gangs, afin que les messages d'un salon n'apparaissent que pour les joueurs appropriés. La passerelle lit les messages via l'API du bot Discord et nécessite un jeton de bot + un ID de serveur — fournis soit dans config.discord, soit réutilisés à partir de config.adminChatName.discord dans general.lua. Les messages rédigés par des bots sont ignorés.