From 65600f5dbcb7dbf29ade6af0484c547aee091bfe Mon Sep 17 00:00:00 2001 From: Solareon <769465+solareon@users.noreply.github.com> Date: Sat, 9 Dec 2023 06:18:22 +0100 Subject: [PATCH] refactor: use logger module * refactor: use logger module * fix: missing configuration * fix: typo * refactor: use server config for webhook urls * refactor: core events webhook config * Update character.lua * Update commands.lua * Update events.lua * Update functions.lua * Update player.lua * Update player.lua --------- Co-authored-by: Manason Co-authored-by: Matthew <22198949+MafewTM@users.noreply.github.com> --- config/server.lua | 12 ++++++++ server/character.lua | 9 +++++- server/commands.lua | 10 +++++- server/events.lua | 10 +++++- server/functions.lua | 11 ++++++- server/player.lua | 73 ++++++++++++++++++++++++++++++++++---------- 6 files changed, 105 insertions(+), 20 deletions(-) diff --git a/config/server.lua b/config/server.lua index 06da3778c..292766b02 100644 --- a/config/server.lua +++ b/config/server.lua @@ -114,6 +114,18 @@ return { }, }, + -- this configuration is for core events only. putting other webhooks here will have no effect + logging = { + webhook = { + ['default'] = nil, -- default + ['joinleave'] = nil, -- default + ['ooc'] = nil, -- default + ['anticheat'] = nil, -- default + ['playermoney'] = nil, -- default + }, + role = {} -- Role to tag for high priority logs. Roles use <@%roleid> and users/channels are <@userid/channelid> + }, + giveVehicleKeys = function(src, plate) return exports.qbx_vehiclekeys:GiveKeys(src, plate) end, diff --git a/server/character.lua b/server/character.lua index d8c20f99f..5cd72f150 100644 --- a/server/character.lua +++ b/server/character.lua @@ -1,4 +1,5 @@ local config = require 'config.server' +local logger = require 'modules.logger' ---@param license2 string ---@param license? string @@ -46,7 +47,13 @@ lib.callback.register('qbx_core:server:loadCharacter', function(source, citizenI if not player then return end SetPlayerRoutingBucket(source, 0) - TriggerEvent('qb-log:server:CreateLog', 'joinleave', 'Loaded', 'green', '**'.. GetPlayerName(source) .. '** ('..(GetPlayerIdentifierByType(source, 'discord') or 'undefined') ..' | ||' ..(GetPlayerIdentifierByType(source, 'ip') or 'undefined') .. '|| | ' ..(GetPlayerIdentifierByType(source, 'license2') or GetPlayerIdentifierByType(source, 'license') or 'undefined') ..' | ' ..citizenId..' | '..source..') loaded..') + logger.log({ + source = 'qbx_core', + webhook = config.logging.webhook['joinleave'], + event = 'Loaded', + color = 'green', + message = '**'.. GetPlayerName(source) .. '** ('..(GetPlayerIdentifierByType(source, 'discord') or 'undefined') ..' | ||' ..(GetPlayerIdentifierByType(source, 'ip') or 'undefined') .. '|| | ' ..(GetPlayerIdentifierByType(source, 'license2') or GetPlayerIdentifierByType(source, 'license') or 'undefined') ..' | ' ..citizenId..' | '..source..') loaded..' + }) lib.print.info(GetPlayerName(source)..' (Citizen ID: '..citizenId..') has succesfully loaded!') end) diff --git a/server/commands.lua b/server/commands.lua index 5f873682f..39f32e955 100644 --- a/server/commands.lua +++ b/server/commands.lua @@ -1,4 +1,5 @@ local config = require 'config.server' +local logger = require 'modules.logger' GlobalState.PVPEnabled = config.server.pvp @@ -290,7 +291,14 @@ lib.addCommand('ooc', { multiline = true, args = {('Proximity OOC | %s'):format(GetPlayerName(source)), message} }) - TriggerEvent('qb-log:server:CreateLog', 'ooc', 'OOC', 'white', '**' .. GetPlayerName(source) .. '** (CitizenID: ' .. player.PlayerData.citizenid .. ' | ID: ' .. source .. ') **Message:** ' .. message, false) + logger.log({ + source = 'qbx_core', + webhook = 'ooc', + event = 'OOC', + color = 'white', + tags = config.logging.role, + message = '**' .. GetPlayerName(source) .. '** (CitizenID: ' .. player.PlayerData.citizenid .. ' | ID: ' .. source .. ') **Message:** ' .. message + }) end end end diff --git a/server/events.lua b/server/events.lua index 814026e48..cddb4bea5 100644 --- a/server/events.lua +++ b/server/events.lua @@ -1,4 +1,6 @@ local serverConfig = require 'config.server'.server +local loggingConfig = require 'config.server'.logging +local logger = require 'modules.logger' -- Event Handler @@ -33,7 +35,13 @@ AddEventHandler('playerDropped', function(reason) if not QBX.Players[src] then return end GlobalState.PlayerCount -= 1 local player = QBX.Players[src] - TriggerEvent('qb-log:server:CreateLog', 'joinleave', 'Dropped', 'red', '**' .. GetPlayerName(src) .. '** (' .. player.PlayerData.license .. ') left..' ..'\n **Reason:** ' .. reason) + logger.log({ + source = 'qbx_core', + webhook = loggingConfig.webhook['joinleave'], + event = 'Dropped', + color = 'red', + message = '**' .. GetPlayerName(src) .. '** (' .. player.PlayerData.license .. ') left..' ..'\n **Reason:** ' .. reason, + }) player.Functions.Save() QBX.Player_Buckets[player.PlayerData.license] = nil QBX.Players[src] = nil diff --git a/server/functions.lua b/server/functions.lua index db5a9f5f5..8ec7262fb 100644 --- a/server/functions.lua +++ b/server/functions.lua @@ -1,5 +1,7 @@ local serverConfig = require 'config.server'.server local positionConfig = require 'config.shared'.notifyPosition +local logger = require 'modules.logger' +local loggingConfig = require 'config.server'.logging -- Getters -- Get your player first and then trigger a function on them @@ -399,7 +401,14 @@ local function ExploitBan(playerId, origin) }) end) DropPlayer(playerId --[[@as string]], Lang:t('info.exploit_banned', {discord = serverConfig.discord})) - TriggerEvent("qb-log:server:CreateLog", "anticheat", "Anti-Cheat", "red", name .. " has been banned for exploiting " .. origin, true) + logger.log({ + source = 'qbx_core', + webhook = loggingConfig.webhook['anticheat'], + event = 'Anti-Cheat', + color = 'red', + tags = loggingConfig.role, + message = name .. " has been banned for exploiting " .. origin + }) end exports('ExploitBan', ExploitBan) diff --git a/server/player.lua b/server/player.lua index f70872f50..07dc105f5 100644 --- a/server/player.lua +++ b/server/player.lua @@ -1,5 +1,6 @@ local config = require 'config.server' local defaultSpawn = require 'config.shared'.defaultSpawn +local logger = require 'modules.logger' ---@class PlayerData : PlayerEntity ---@field source? Source present if player is online @@ -32,7 +33,14 @@ function LoginV2(source, citizenid, newData) return CheckPlayerData(source, playerData) else DropPlayer(tostring(source), Lang:t("info.exploit_dropped")) - TriggerEvent('qb-log:server:CreateLog', 'anticheat', 'Anti-Cheat', 'white', ('%s Has Been Dropped For Character Joining Exploit'):format(GetPlayerName(source)), false) + logger.log({ + source = 'qbx_core', + webhook = config.logging.webhook['anticheat'], + event = 'Anti-Cheat', + color = 'white', + tags = config.logging.role, + message = ('%s Has Been Dropped For Character Joining Exploit'):format(GetPlayerName(source)) + }) end else local player = CheckPlayerData(source, newData) @@ -343,11 +351,15 @@ function CreatePlayer(playerData, Offline) if not self.Offline then self.Functions.UpdatePlayerData() - if amount > 100000 then - TriggerEvent('qb-log:server:CreateLog', 'playermoney', 'AddMoney', 'lightgreen', '**' .. GetPlayerName(self.PlayerData.source) .. ' (citizenid: ' .. self.PlayerData.citizenid .. ' | id: ' .. self.PlayerData.source .. ')** $' .. amount .. ' (' .. moneytype .. ') added, new ' .. moneytype .. ' balance: ' .. self.PlayerData.money[moneytype] .. ' reason: ' .. reason, true) - else - TriggerEvent('qb-log:server:CreateLog', 'playermoney', 'AddMoney', 'lightgreen', '**' .. GetPlayerName(self.PlayerData.source) .. ' (citizenid: ' .. self.PlayerData.citizenid .. ' | id: ' .. self.PlayerData.source .. ')** $' .. amount .. ' (' .. moneytype .. ') added, new ' .. moneytype .. ' balance: ' .. self.PlayerData.money[moneytype] .. ' reason: ' .. reason) - end + local tags = amount > 100000 and config.logging.role or nil + logger.log({ + source = 'qbx_core', + webhook = config.logging.webhook['playermoney'], + event = 'AddMoney', + color = 'lightgreen', + tags = tags, + message = '**' .. GetPlayerName(self.PlayerData.source) .. ' (citizenid: ' .. self.PlayerData.citizenid .. ' | id: ' .. self.PlayerData.source .. ')** $' .. amount .. ' (' .. moneytype .. ') added, new ' .. moneytype .. ' balance: ' .. self.PlayerData.money[moneytype] .. ' reason: ' .. reason, + }) TriggerClientEvent('hud:client:OnMoneyChange', self.PlayerData.source, moneytype, amount, false) TriggerClientEvent('QBCore:Client:OnMoneyChange', self.PlayerData.source, moneytype, amount, "add", reason) TriggerEvent('QBCore:Server:OnMoneyChange', self.PlayerData.source, moneytype, amount, "add", reason) @@ -376,11 +388,15 @@ function CreatePlayer(playerData, Offline) if not self.Offline then self.Functions.UpdatePlayerData() - if amount > 100000 then - TriggerEvent('qb-log:server:CreateLog', 'playermoney', 'RemoveMoney', 'red', '**' .. GetPlayerName(self.PlayerData.source) .. ' (citizenid: ' .. self.PlayerData.citizenid .. ' | id: ' .. self.PlayerData.source .. ')** $' .. amount .. ' (' .. moneytype .. ') removed, new ' .. moneytype .. ' balance: ' .. self.PlayerData.money[moneytype] .. ' reason: ' .. reason, true) - else - TriggerEvent('qb-log:server:CreateLog', 'playermoney', 'RemoveMoney', 'red', '**' .. GetPlayerName(self.PlayerData.source) .. ' (citizenid: ' .. self.PlayerData.citizenid .. ' | id: ' .. self.PlayerData.source .. ')** $' .. amount .. ' (' .. moneytype .. ') removed, new ' .. moneytype .. ' balance: ' .. self.PlayerData.money[moneytype] .. ' reason: ' .. reason) - end + local tags = amount > 100000 and config.logging.role or nil + logger.log({ + source = 'qbx_core', + webhook = config.logging.webhook['playermoney'], + event = 'RemoveMoney', + color = 'red', + tags = tags, + message = '**' .. GetPlayerName(self.PlayerData.source) .. ' (citizenid: ' .. self.PlayerData.citizenid .. ' | id: ' .. self.PlayerData.source .. ')** $' .. amount .. ' (' .. moneytype .. ') removed, new ' .. moneytype .. ' balance: ' .. self.PlayerData.money[moneytype] .. ' reason: ' .. reason, + }) TriggerClientEvent('hud:client:OnMoneyChange', self.PlayerData.source, moneytype, amount, true) if moneytype == 'bank' then TriggerClientEvent('qb-phone:client:RemoveBankMoney', self.PlayerData.source, amount) @@ -406,7 +422,13 @@ function CreatePlayer(playerData, Offline) if not self.Offline then self.Functions.UpdatePlayerData() - TriggerEvent('qb-log:server:CreateLog', 'playermoney', 'SetMoney', 'green', '**' .. GetPlayerName(self.PlayerData.source) .. ' (citizenid: ' .. self.PlayerData.citizenid .. ' | id: ' .. self.PlayerData.source .. ')** $' .. amount .. ' (' .. moneytype .. ') set, new ' .. moneytype .. ' balance: ' .. self.PlayerData.money[moneytype] .. ' reason: ' .. reason) + logger.log({ + source = 'qbx_core', + webhook = config.logging.webhook['playermoney'], + event = 'SetMoney', + color = 'green', + message = '**' .. GetPlayerName(self.PlayerData.source) .. ' (citizenid: ' .. self.PlayerData.citizenid .. ' | id: ' .. self.PlayerData.source .. ')** $' .. amount .. ' (' .. moneytype .. ') set, new ' .. moneytype .. ' balance: ' .. self.PlayerData.money[moneytype] .. ' reason: ' .. reason, + }) TriggerClientEvent('hud:client:OnMoneyChange', self.PlayerData.source, moneytype, math.abs(difference), difference < 0) TriggerClientEvent('QBCore:Client:OnMoneyChange', self.PlayerData.source, moneytype, amount, "set", reason) TriggerEvent('QBCore:Server:OnMoneyChange', self.PlayerData.source, moneytype, amount, "set", reason) @@ -516,12 +538,25 @@ function DeleteCharacter(source, citizenid) CreateThread(function() local success = DeletePlayerEntity(citizenid) if success then - TriggerEvent('qb-log:server:CreateLog', 'joinleave', 'Character Deleted', 'red', '**' .. GetPlayerName(source) .. '** ' .. license2 .. ' deleted **' .. citizenid .. '**..') + logger.log({ + source = 'qbx_core', + webhook = config.logging.webhook['joinleave'], + event = 'Character Deleted', + color = 'red', + message = '**' .. GetPlayerName(source) .. '** ' .. license2 .. ' deleted **' .. citizenid .. '**..' + }) end end) else DropPlayer(tostring(source), Lang:t("info.exploit_dropped")) - TriggerEvent('qb-log:server:CreateLog', 'anticheat', 'Anti-Cheat', 'white', GetPlayerName(source) .. ' Has Been Dropped For Character Deletion Exploit', true) + logger.log({ + source = 'qbx_core', + webhook = config.logging.webhook['anticheat'], + event = 'Anti-Cheat', + color = 'white', + tags = config.logging.role, + message = GetPlayerName(source) .. ' Has Been Dropped For Character Deletion Exploit', + }) end end @@ -537,7 +572,13 @@ function ForceDeleteCharacter(citizenid) CreateThread(function() local success = DeletePlayerEntity(citizenid) if success then - TriggerEvent('qb-log:server:CreateLog', 'joinleave', 'Character Force Deleted', 'red', 'Character **' .. citizenid .. '** got deleted') + logger.log({ + source = 'qbx_core', + webhook = config.logging.webhook['joinleave'], + event = 'Character Force Deleted', + color = 'red', + message = 'Character **' .. citizenid .. '** got deleted' + }) end end) end @@ -558,4 +599,4 @@ function GenerateUniqueIdentifier(type) return uniqueId end -exports('GenerateUniqueIdentifier', GenerateUniqueIdentifier) \ No newline at end of file +exports('GenerateUniqueIdentifier', GenerateUniqueIdentifier)