Files
Mr.Crowley ad8788bbfd Invoking can return nil
Added fallback for current resource, future proofing against require and fixing entities target property
2026-08-14 17:38:09 -05:00

109 lines
3.5 KiB
Lua

Logs = Logs or {}
local BridgeServerConfig = BridgeServerConfig or Require('settings/serverConfig.lua')
local pendingLogs = {}
local sendTimer = nil
local function sendBufferedLogsToDiscord()
if #pendingLogs == 0 then
sendTimer = nil
return
end
local embeds = {}
for _, log in ipairs(pendingLogs) do
table.insert(embeds, {
color = '15769093',
title = log.resource,
thumbnail = { url = BridgeServerConfig.EmbedLogo },
fields = {
{
name = 'Log Message',
value = '```' .. log.message .. '```',
inline = false,
}
},
timestamp = log.timestamp,
})
end
PerformHttpRequest(BridgeServerConfig.WebhookURL, function(err, text, headers) end, 'POST', json.encode({
username = 'Community_Bridge Logger',
avatar_url = 'https://avatars.githubusercontent.com/u/192999457?s=400&u=da632e8f64c85def390cfd1a73c3b664d6882b38&v=4',
embeds = embeds
}), { ['Content-Type'] = 'application/json' })
pendingLogs = {}
sendTimer = nil
end
local function queueLogForDiscord(message)
table.insert(pendingLogs, {
message = tostring(message),
resource = GetInvokingResource() or GetCurrentResourceName(),
timestamp = os.date('!%Y-%m-%dT%H:%M:%S')
})
if not sendTimer then
sendTimer = true
SetTimeout(3000, sendBufferedLogsToDiscord)
end
end
local logHandlers = {
fivemerr = function(message)
local fivemerrData = {
level = 'info',
message = tostring(message),
resource = GetInvokingResource() or GetCurrentResourceName(),
}
PerformHttpRequest('https://api.fivemerr.com/v1/logs', function(code, text, headers)
if code ~= 200 then
print(('Failed to send log to Fivemerr API (HTTP %d): Please verify your API key is correct and the service is available.'):format(code))
end
end, 'POST', json.encode(fivemerrData), {
['Content-Type'] = 'application/json',
['Authorization'] = BridgeServerConfig.FivemerrApiKey
})
end,
fivemanage = function(message)
if GetResourceState("fmsdk") == "missing" then return print('^1Error:^0 fivemanage log system selected but fmsdk resource is missing.') end
exports.fmsdk:LogMessage('info', message)
end,
qb = function(message)
TriggerEvent('qb-log:server:CreateLog', GetCurrentResourceName(), GetInvokingResource() or GetCurrentResourceName(), 'green', message, false)
end,
ox_lib = function(message)
lib.logger(GetInvokingResource() or GetCurrentResourceName(), GetCurrentResourceName(), message)
end,
['built-in'] = function(message)
queueLogForDiscord(message)
end
}
---@deprecated Use Logs.CreateLog instead (deprecated 9/1/25)
Logs.Send = function(src, message)
print('^1Deprecated^0 function Logs.Send called. Please use Logs.CreateLog instead.')
Logs.CreateLog(message)
end
---@deprecated Use Logs.CreateLog instead (deprecated 9/1/25)
Logs.Notify = function(src, url, image, message)
print('^1Deprecated^0 function Logs.Notify called. Please use Logs.CreateLog instead.')
Logs.CreateLog(message)
end
Logs.CreateLog = function(message)
local handler = logHandlers[BridgeServerConfig.LogSystem]
if not handler then return end
handler(message)
end
exports('Logs', Logs)
return Logs