304 lines
14 KiB
Lua
304 lines
14 KiB
Lua
------------------------------------
|
|
------------------------------------
|
|
---- DONT TOUCH ANY OF THIS IF YOU DON'T KNOW WHAT YOU ARE DOING
|
|
---- THESE ARE **NOT** CONFIG VALUES, USE THE CONVARS IF YOU WANT TO CHANGE SOMETHING
|
|
----
|
|
----
|
|
---- If you are a developer and want to change something, consider writing a plugin instead:
|
|
---- https://easyadmin.readthedocs.io/en/latest/plugins/
|
|
----
|
|
------------------------------------
|
|
------------------------------------
|
|
|
|
AddEventHandler('playerDropped', function (reason)
|
|
for i, report in pairs(reports) do
|
|
if report.reporter == source or (report.reported and report.reported == source) then
|
|
removeReport(report.id)
|
|
end
|
|
end
|
|
if cooldowns[source] then
|
|
cooldowns[source] = nil
|
|
end
|
|
end)
|
|
|
|
cooldowns = {} -- DO NOT TOUCH THIS
|
|
|
|
Citizen.CreateThread(function()
|
|
|
|
PlayerReports = {}
|
|
|
|
if GetConvar("ea_enableCallAdminCommand", "true") == "true" then
|
|
RegisterCommand(GetConvar("ea_callAdminCommandName", "calladmin"), function(source, args, rawCommand)
|
|
if args[1] then
|
|
local time = os.time()
|
|
local cooldowntime = GetConvarInt("ea_callAdminCooldown", 60)
|
|
if cooldowns[source] and cooldowns[source] > (time - cooldowntime) then
|
|
TriggerClientEvent("EasyAdmin:showNotification", source, GetLocalisedText("waitbeforeusingagain"))
|
|
return
|
|
end
|
|
local reportTime = os.time()
|
|
local reason = string.gsub(rawCommand, GetConvar("ea_callAdminCommandName", "calladmin").." ", "")
|
|
local reportid = addNewReport(0, source, _, reason, reportTime)
|
|
|
|
for i,_ in pairs(OnlineAdmins) do
|
|
local notificationText = string.format(
|
|
string.gsub(GetLocalisedText("playercalledforadmin"), "```", ""),
|
|
getName(source, true, false), reason, reportid, reportTime
|
|
)
|
|
TriggerClientEvent("EasyAdmin:showNotification", i, notificationText)
|
|
end
|
|
|
|
local preferredWebhook = (reportNotification ~= "false") and reportNotification or moderationNotification
|
|
SendWebhookMessage(preferredWebhook,string.format(GetLocalisedText("playercalledforadmin"), getName(source, true, true), reason, reportid, reportTime), "calladmin", 16776960)
|
|
--TriggerClientEvent('chatMessage', source, "^3EasyAdmin^7", {255,255,255}, GetLocalisedText("admincalled"))
|
|
TriggerClientEvent("EasyAdmin:showNotification", source, GetLocalisedText("admincalled"))
|
|
|
|
time = os.time()
|
|
cooldowns[source] = time
|
|
else
|
|
TriggerClientEvent("EasyAdmin:showNotification", source, GetLocalisedText("invalidreport"))
|
|
end
|
|
end, false)
|
|
end
|
|
|
|
|
|
if GetConvar("ea_enableReportCommand", "true") == "true" then
|
|
RegisterCommand(GetConvar("ea_reportCommandName", "report"), function(source, args, rawCommand)
|
|
if args[2] then
|
|
local id = args[1]
|
|
local valid = false
|
|
local reportTime = os.time()
|
|
local minimumreports = GetConvarInt("ea_defaultMinReports", 3)
|
|
|
|
if GetConvar("ea_MinReportModifierEnabled", "true") == "true" then
|
|
if #GetPlayers() > GetConvarInt("ea_MinReportPlayers", 12) then
|
|
minimumreports = math.round(#GetPlayers()/GetConvarInt("ea_MinReportModifier", 4),0)
|
|
end
|
|
end
|
|
|
|
if id and not GetPlayerIdentifier(id, 1) then
|
|
for i, player in pairs(GetPlayers()) do
|
|
if string.find(string.lower(getName(player, true)), string.lower(id)) then
|
|
id = player
|
|
valid = true
|
|
break
|
|
end
|
|
end
|
|
if not valid then
|
|
valid = true
|
|
end
|
|
end
|
|
|
|
if id and valid then
|
|
local reason = string.gsub(rawCommand, GetConvar("ea_reportCommandName", "report").." " ..args[1].." ", "")
|
|
if not PlayerReports[id] then
|
|
PlayerReports[id] = { }
|
|
end
|
|
|
|
local addReport = true
|
|
for i, report in pairs(PlayerReports[id]) do
|
|
if report.source == source or report.sourceName == getName(source, true) then
|
|
addReport = false
|
|
end
|
|
end
|
|
|
|
if addReport then
|
|
table.insert(PlayerReports[id], {source = source, sourceName = getName(source, true), reason = reason, reportTime = reportTime})
|
|
local reportid = addNewReport(1, source, id, reason, reportTime)
|
|
|
|
local preferredWebhook = (reportNotification ~= "false") and reportNotification or moderationNotification
|
|
SendWebhookMessage(preferredWebhook, string.format(
|
|
GetLocalisedText("playerreportedplayer"),
|
|
getName(source, false, true), getName(id, true, true), reason, #PlayerReports[id], minimumreports, reportid, reportTime
|
|
), "report", 16776960)
|
|
|
|
if GetConvar("ea_enableReportScreenshots", "true") == "true" then
|
|
TriggerEvent("EasyAdmin:TakeScreenshot", id)
|
|
end
|
|
|
|
for i,_ in pairs(OnlineAdmins) do
|
|
local notificationText = string.format(
|
|
string.gsub(GetLocalisedText("playerreportedplayer"), "```", ""),
|
|
getName(source, false, false), getName(id, true, false), reason, #PlayerReports[id], minimumreports, reportid, reportTime
|
|
)
|
|
TriggerClientEvent("EasyAdmin:showNotification", i, notificationText)
|
|
end
|
|
|
|
TriggerClientEvent("EasyAdmin:showNotification", source, GetLocalisedText("successfullyreported"))
|
|
|
|
if #PlayerReports[id] >= minimumreports then
|
|
TriggerEvent("EasyAdmin:addBan", id, string.format(GetLocalisedText("reportbantext"), minimumreports), os.time()+GetConvarInt("ea_ReportBanTime", 86400))
|
|
end
|
|
else
|
|
TriggerClientEvent("EasyAdmin:showNotification", source, GetLocalisedText("alreadyreported"))
|
|
end
|
|
else
|
|
TriggerClientEvent("EasyAdmin:showNotification", source, GetLocalisedText("reportedusageerror"))
|
|
end
|
|
else
|
|
TriggerClientEvent("EasyAdmin:showNotification", source, GetLocalisedText("invalidreport"))
|
|
end
|
|
end, false)
|
|
end
|
|
|
|
|
|
function timeAgo(timestamp)
|
|
local diff = os.time() - timestamp
|
|
local minutes = math.floor(diff / 60)
|
|
|
|
if minutes < 1 then
|
|
return "1m ago"
|
|
elseif minutes < 120 then
|
|
return string.format("%dm ago", minutes)
|
|
end
|
|
end
|
|
|
|
function addNewReport(type, reporter, reported, reason, reportTime)
|
|
local t = {}
|
|
local timestamp = os.time()
|
|
|
|
if type == 1 then
|
|
t = {type = type, reporter = reporter, reporterName = getName(reporter, true), reported = reported, reportedName = getName(reported, true), reason = reason, reportTime = timestamp}
|
|
else
|
|
t = {type = type, reporter = reporter, reporterName = getName(reporter, true), reason = reason, reportTime = timestamp}
|
|
end
|
|
t.id = #reports + 1
|
|
reports[t.id] = t
|
|
|
|
t.reportTimeFormatted = timeAgo(t.reportTime)
|
|
|
|
for i,_ in pairs(OnlineAdmins) do
|
|
TriggerLatentClientEvent("EasyAdmin:NewReport", i, 10000, t)
|
|
end
|
|
TriggerEvent("EasyAdmin:reportAdded", t)
|
|
|
|
return t.id
|
|
end
|
|
|
|
Citizen.CreateThread(function()
|
|
while true do
|
|
Citizen.Wait(60000)
|
|
|
|
for _, report in pairs(reports) do
|
|
local time = os.time()
|
|
local diff = time - report.reportTime
|
|
local minutes = math.floor(diff / 60)
|
|
|
|
if minutes < 1 then
|
|
report.reportTimeFormatted = "1m ago"
|
|
elseif minutes < 120 then
|
|
report.reportTimeFormatted = string.format("%dm ago", minutes)
|
|
else
|
|
report.reportTimeFormatted = string.format("%dh ago", math.floor(minutes / 60))
|
|
end
|
|
|
|
for i,_ in pairs(OnlineAdmins) do
|
|
TriggerLatentClientEvent("EasyAdmin:NewReport", i, 10000, report)
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
function removeReport(index,reporter,reported,reason)
|
|
for i, report in pairs(reports) do
|
|
if (index and i == index) then
|
|
for admin,_ in pairs(OnlineAdmins) do
|
|
TriggerLatentClientEvent("EasyAdmin:RemoveReport", admin, 10000, report)
|
|
end
|
|
TriggerEvent("EasyAdmin:reportRemoved", report)
|
|
reports[i] = nil
|
|
elseif (reporter and reporter == report.reporter) then
|
|
for admin,_ in pairs(OnlineAdmins) do
|
|
TriggerLatentClientEvent("EasyAdmin:RemoveReport", admin, 10000, report)
|
|
end
|
|
TriggerEvent("EasyAdmin:reportRemoved", report)
|
|
reports[i] = nil
|
|
elseif (reported and reported == report.reported) then
|
|
for admin,_ in pairs(OnlineAdmins) do
|
|
TriggerLatentClientEvent("EasyAdmin:RemoveReport", admin, 10000, report)
|
|
end
|
|
TriggerEvent("EasyAdmin:reportRemoved", report)
|
|
reports[i] = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
function removeSimilarReports(report)
|
|
for i, r in pairs(reports) do
|
|
if (report.reporter and report.reported) and (report.reporter == r.reporter and report.reported == r.reported) then
|
|
for admin,_ in pairs(OnlineAdmins) do
|
|
TriggerLatentClientEvent("EasyAdmin:RemoveReport", admin, 10000, r)
|
|
end
|
|
TriggerEvent("EasyAdmin:reportRemoved", r)
|
|
reports[i] = nil
|
|
end
|
|
if (report.reason and report.reporter) and (report.reason == r.reason and report.reporter == r.reporter) then
|
|
for admin,_ in pairs(OnlineAdmins) do
|
|
TriggerLatentClientEvent("EasyAdmin:RemoveReport", admin, 10000, r)
|
|
end
|
|
TriggerEvent("EasyAdmin:reportRemoved", r)
|
|
reports[i] = nil
|
|
end
|
|
if (report.reported) and (report.reported == r.reported) then
|
|
for admin,_ in pairs(OnlineAdmins) do
|
|
TriggerLatentClientEvent("EasyAdmin:RemoveReport", admin, 10000, r)
|
|
end
|
|
TriggerEvent("EasyAdmin:reportRemoved", r)
|
|
reports[i] = nil
|
|
end
|
|
if (report.reporter) and (report.reporter == r.reporter) then
|
|
for admin,_ in pairs(OnlineAdmins) do
|
|
TriggerLatentClientEvent("EasyAdmin:RemoveReport", admin, 10000, r)
|
|
end
|
|
TriggerEvent("EasyAdmin:reportRemoved", r)
|
|
reports[i] = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
---Returns a table containing all reports.
|
|
---@return table @A table of all reports.
|
|
function getAllReports()
|
|
return reports
|
|
end
|
|
exports('getAllReports', getAllReports)
|
|
|
|
RegisterServerEvent("EasyAdmin:RemoveReport", function(report)
|
|
if DoesPlayerHavePermission(source, "player.reports.process") then
|
|
SendWebhookMessage(moderationNotification,string.format(GetLocalisedText("adminclosedreport"), getName(source, false, true), report.id), "reports", 16777214)
|
|
removeReport(report.id)
|
|
end
|
|
end)
|
|
|
|
RegisterServerEvent("EasyAdmin:RemoveSimilarReports", function(report)
|
|
if DoesPlayerHavePermission(source, "player.reports.process") then
|
|
SendWebhookMessage(moderationNotification,string.format(GetLocalisedText("adminclosedreport"), getName(source, false, true), report.id), "reports", 16777214)
|
|
removeSimilarReports(report)
|
|
end
|
|
end)
|
|
|
|
RegisterServerEvent("EasyAdmin:ClaimReport", function(reportId)
|
|
if DoesPlayerHavePermission(source, "player.reports.claim") then
|
|
local report = reports[reportId]
|
|
if report then
|
|
if not report.claimed then
|
|
report.claimed = true
|
|
report.claimedBy = source
|
|
report.claimedName = getName(source, true)
|
|
|
|
SendWebhookMessage(moderationNotification, string.format(GetLocalisedText("adminclaimedreport"), getName(source, false, true), report.id), "reports", 16776960)
|
|
|
|
for i,_ in pairs(OnlineAdmins) do
|
|
TriggerLatentClientEvent("EasyAdmin:ClaimedReport", i, 10000, report)
|
|
end
|
|
|
|
TriggerEvent("EasyAdmin:reportClaimed", report)
|
|
else
|
|
TriggerClientEvent("EasyAdmin:showNotification", source, GetLocalisedText("reportalreadyclaimed"))
|
|
end
|
|
else
|
|
TriggerClientEvent("EasyAdmin:showNotification", source, GetLocalisedText("invalidreport"))
|
|
end
|
|
end
|
|
end)
|
|
end) |