mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2025-12-27 03:25:23 +09:00
108 lines
5.1 KiB
Lua
108 lines
5.1 KiB
Lua
--[[-- Commands - Reports
|
|
Adds a commands that allow players to report other players
|
|
]]
|
|
|
|
local Commands = require("modules/exp_commands")
|
|
local format_player_name = Commands.format_player_name_locale
|
|
local parse_input = Commands.parse_input
|
|
|
|
local Roles = require("modules.exp_legacy.expcore.roles")
|
|
local player_has_flag = Roles.player_has_flag
|
|
|
|
local Reports = require("modules.exp_legacy.modules.control.reports") --- @dep modules.control.reports
|
|
|
|
--- @type Commands.InputParser
|
|
local function reportable_player(input, player)
|
|
local success, status, result = parse_input(input, player, Commands.types.player)
|
|
if not success then return status, result end
|
|
--- @cast result LuaPlayer
|
|
|
|
if player_has_flag(input, "report-immune") then
|
|
return Commands.status.invalid_input{ "exp-commands_reports.player-immune" }
|
|
elseif player == input then
|
|
return Commands.status.invalid_input{ "exp-commands_reports.self-report" }
|
|
else
|
|
return Commands.status.success(result)
|
|
end
|
|
end
|
|
|
|
--- Reports a player and notifies admins
|
|
Commands.new("create-report", { "exp-commands_reports.description-create" })
|
|
:argument("player", { "exp-commands_reports.arg-player-create" }, reportable_player)
|
|
:argument("reason", { "exp-commands_reports.arg-reason" }, Commands.types.string)
|
|
:enable_auto_concatenation()
|
|
:add_aliases{ "report" }
|
|
:register(function(player, other_player, reason)
|
|
--- @cast other_player LuaPlayer
|
|
--- @cast reason string
|
|
local player_name = format_player_name(player)
|
|
local other_player_name = format_player_name(other_player)
|
|
if Reports.report_player(other_player, player.name, reason) then
|
|
local user_message = { "exp-commands_reports.response", other_player_name, reason }
|
|
local admin_message = { "exp-commands_reports.response-admin", other_player_name, player_name, reason }
|
|
for _, player in ipairs(game.connected_players) do
|
|
if player.admin then
|
|
player.print(admin_message)
|
|
else
|
|
player.print(user_message)
|
|
end
|
|
end
|
|
else
|
|
return Commands.status.invalid_input{ "exp-commands_reports.already-reported" }
|
|
end
|
|
end)
|
|
|
|
--- Gets a list of all reports that a player has on them. If no player then lists all players and the number of reports on them.
|
|
Commands.new("get-reports", { "exp-commands_reports.description-get" })
|
|
:optional("player", { "exp-commands_reports.arg-player-get" }, Commands.types.player)
|
|
:add_aliases{ "reports" }
|
|
:add_flags{ "admin_only" }
|
|
:register(function(player, other_player)
|
|
--- @cast other_player LuaPlayer?
|
|
if other_player then
|
|
local reports = Reports.get_reports(other_player)
|
|
local other_player_name = format_player_name(other_player)
|
|
Commands.print{ "exp-commands_reports.player-title", other_player_name, #reports }
|
|
for by_player_name, reason in pairs(reports) do
|
|
local by_player_name_formatted = format_player_name(by_player_name)
|
|
Commands.print{ "exp-commands_reports.list-element", by_player_name_formatted, reason }
|
|
end
|
|
else
|
|
local reports = Reports.user_reports
|
|
Commands.print{ "exp-commands_reports.reports-title" }
|
|
for player_name in pairs(reports) do
|
|
local player_name_formatted = format_player_name(player_name)
|
|
local report_count = Reports.count_reports(player_name)
|
|
Commands.print{ "exp-commands_reports.list-element", player_name_formatted, report_count }
|
|
end
|
|
end
|
|
end)
|
|
|
|
--- Clears all reports from a player or just the report from one player.
|
|
Commands.new("clear-reports", { "exp-commands_reports.description-clear" })
|
|
:argument("player", { "exp-commands_reports.arg-player-clear" }, Commands.types.player)
|
|
:optional("from-player", { "exp-commands_reports.arg-from-player" }, Commands.types.player)
|
|
:add_flags{ "admin_only" }
|
|
:register(function(player, other_player, from_player)
|
|
--- @cast other_player LuaPlayer
|
|
--- @cast from_player LuaPlayer?
|
|
local player_name = format_player_name(player)
|
|
local other_player_name = format_player_name(other_player)
|
|
if from_player then
|
|
if not Reports.remove_report(other_player, from_player.name, player.name) then
|
|
local from_player_name = format_player_name(other_player)
|
|
return Commands.status.invalid_input{ "exp-commands_reports.not-reported-by", from_player_name }
|
|
else
|
|
game.print{ "exp-commands_reports.removed", other_player_name, player_name }
|
|
return Commands.status.success()
|
|
end
|
|
else
|
|
if not Reports.remove_all(other_player, player.name) then
|
|
return Commands.status.invalid_input{ "exp-commands_reports.not-reported" }
|
|
else
|
|
game.print{ "exp-commands_reports.removed-all", other_player_name, player_name }
|
|
return Commands.status.success()
|
|
end
|
|
end
|
|
end)
|