forked from Simnation/Main
149 lines
5.1 KiB
Lua
149 lines
5.1 KiB
Lua
![]() |
local QBCore = exports['qb-core']:GetCoreObject()
|
||
|
|
||
|
local Webhooks = {
|
||
|
['default'] = '',
|
||
|
['testwebhook'] = '',
|
||
|
['playermoney'] = '',
|
||
|
['playerinventory'] = '',
|
||
|
['robbing'] = '',
|
||
|
['cuffing'] = '',
|
||
|
['drop'] = '',
|
||
|
['trunk'] = '',
|
||
|
['stash'] = '',
|
||
|
['glovebox'] = '',
|
||
|
['banking'] = '',
|
||
|
['vehicleshop'] = '',
|
||
|
['vehicleupgrades'] = '',
|
||
|
['shops'] = '',
|
||
|
['dealers'] = '',
|
||
|
['storerobbery'] = '',
|
||
|
['bankrobbery'] = '',
|
||
|
['powerplants'] = '',
|
||
|
['death'] = '',
|
||
|
['joinleave'] = '',
|
||
|
['ooc'] = '',
|
||
|
['report'] = '',
|
||
|
['me'] = '',
|
||
|
['pmelding'] = '',
|
||
|
['112'] = '',
|
||
|
['bans'] = '',
|
||
|
['anticheat'] = '',
|
||
|
['weather'] = '',
|
||
|
['moneysafes'] = '',
|
||
|
['bennys'] = '',
|
||
|
['bossmenu'] = '',
|
||
|
['robbery'] = '',
|
||
|
['casino'] = '',
|
||
|
['traphouse'] = '',
|
||
|
['911'] = '',
|
||
|
['palert'] = '',
|
||
|
['house'] = '',
|
||
|
['qbjobs'] = '',
|
||
|
}
|
||
|
|
||
|
local colors = { -- https://www.spycolor.com/
|
||
|
['default'] = 14423100,
|
||
|
['blue'] = 255,
|
||
|
['red'] = 16711680,
|
||
|
['green'] = 65280,
|
||
|
['white'] = 16777215,
|
||
|
['black'] = 0,
|
||
|
['orange'] = 16744192,
|
||
|
['yellow'] = 16776960,
|
||
|
['pink'] = 16761035,
|
||
|
['lightgreen'] = 65309,
|
||
|
}
|
||
|
|
||
|
local logQueue = {}
|
||
|
|
||
|
RegisterNetEvent('qb-log:server:CreateLog', function(name, title, color, message, tagEveryone, imageUrl)
|
||
|
local tag = tagEveryone or false
|
||
|
|
||
|
if Config.Logging == 'discord' then
|
||
|
if not Webhooks[name] then
|
||
|
print('Tried to call a log that isn\'t configured with the name of ' .. name)
|
||
|
return
|
||
|
end
|
||
|
local webHook = Webhooks[name] ~= '' and Webhooks[name] or Webhooks['default']
|
||
|
local embedData = {
|
||
|
{
|
||
|
['title'] = title,
|
||
|
['color'] = colors[color] or colors['default'],
|
||
|
['footer'] = {
|
||
|
['text'] = os.date('%c'),
|
||
|
},
|
||
|
['description'] = message,
|
||
|
['author'] = {
|
||
|
['name'] = 'QBCore Logs',
|
||
|
['icon_url'] = 'https://raw.githubusercontent.com/GhzGarage/qb-media-kit/main/Display%20Pictures/Logo%20-%20Display%20Picture%20-%20Stylized%20-%20Red.png',
|
||
|
},
|
||
|
['image'] = imageUrl and imageUrl ~= '' and { ['url'] = imageUrl } or nil,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if not logQueue[name] then logQueue[name] = {} end
|
||
|
logQueue[name][#logQueue[name] + 1] = { webhook = webHook, data = embedData }
|
||
|
|
||
|
if #logQueue[name] >= 10 then
|
||
|
local postData = { username = 'QB Logs', embeds = {} }
|
||
|
|
||
|
if tag then
|
||
|
postData.content = '@everyone'
|
||
|
end
|
||
|
|
||
|
for i = 1, #logQueue[name] do postData.embeds[#postData.embeds + 1] = logQueue[name][i].data[1] end
|
||
|
PerformHttpRequest(logQueue[name][1].webhook, function() end, 'POST', json.encode(postData), { ['Content-Type'] = 'application/json' })
|
||
|
logQueue[name] = {}
|
||
|
end
|
||
|
elseif Config.Logging == 'fivemanage' then
|
||
|
local FiveManageAPIKey = GetConvar('FIVEMANAGE_LOGS_API_KEY', 'false')
|
||
|
if FiveManageAPIKey == 'false' then
|
||
|
print('You need to set the FiveManage API key in your server.cfg')
|
||
|
return
|
||
|
end
|
||
|
local extraData = {
|
||
|
level = tagEveryone and 'warn' or 'info', -- info, warn, error or debug
|
||
|
message = title, -- any string
|
||
|
metadata = { -- a table or object with any properties you want
|
||
|
description = message,
|
||
|
playerId = source,
|
||
|
playerLicense = GetPlayerIdentifierByType(source, 'license'),
|
||
|
playerDiscord = GetPlayerIdentifierByType(source, 'discord')
|
||
|
},
|
||
|
resource = GetInvokingResource(),
|
||
|
}
|
||
|
PerformHttpRequest('https://api.fivemanage.com/api/logs', function(statusCode, response, headers)
|
||
|
-- Uncomment the following line to enable debugging
|
||
|
-- print(statusCode, response, json.encode(headers))
|
||
|
end, 'POST', json.encode(extraData), {
|
||
|
['Authorization'] = FiveManageAPIKey,
|
||
|
['Content-Type'] = 'application/json',
|
||
|
})
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
Citizen.CreateThread(function()
|
||
|
local timer = 0
|
||
|
while true do
|
||
|
Wait(1000)
|
||
|
timer = timer + 1
|
||
|
if timer >= 60 then -- If 60 seconds have passed, post the logs
|
||
|
timer = 0
|
||
|
for name, queue in pairs(logQueue) do
|
||
|
if #queue > 0 then
|
||
|
local postData = { username = 'QB Logs', embeds = {} }
|
||
|
for i = 1, #queue do
|
||
|
postData.embeds[#postData.embeds + 1] = queue[i].data[1]
|
||
|
end
|
||
|
PerformHttpRequest(queue[1].webhook, function() end, 'POST', json.encode(postData), { ['Content-Type'] = 'application/json' })
|
||
|
logQueue[name] = {}
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
QBCore.Commands.Add('testwebhook', 'Test Your Discord Webhook For Logs (God Only)', {}, false, function()
|
||
|
TriggerEvent('qb-log:server:CreateLog', 'testwebhook', 'Test Webhook', 'default', 'Webhook setup successfully')
|
||
|
end, 'god')
|