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')