Your phone script and your evidence script both write to Discord webhooks today. They lose attachments to channel retention, and you cannot tell which script burned the bandwidth. ServerOps gives each script its own token and its own usage line.
Server-side logs in a plain text file, in 47 Discord channels, and in three people's heads. Search for a player's name and you get nothing. Send chat, bans, kills, and admin actions to ServerOps and search them in under a second.
Players DM moderators on Discord; mods forward to staff; nothing has state. ServerOps Cases gives every appeal a state, a timeline, an attached evidence file from MEDIA, and the staff member who touched it.
Players apply via Google Forms today and your staff reviews them in a spreadsheet. ServerOps gives you a custom-domain form, a Discord webhook on submission, auto-flagging for duplicate IPs, and one-click escalation into a Case.
-- Drop-in for your existing Discord-webhook upload script.
-- Same source image, same server-side handler, one line different.
local serverops = exports['serverops']
local url = serverops:upload({
token = "sops_live_...",
file = sourceImage,
project = "rp-main",
tags = { "evidence", "appeal-1284" },
})
-- Log it too. Same token, different module.
serverops:log("ban", {
target_id = "license:abcd1234",
case_id = 1284,
reason = "weapon dupe (qb-inventory exploit)",
})