Skip to main content
sh-reports gives your players a structured, in-game way to submit Player Reports, Bug Reports, and Suggestions without leaving the server. Opening the /report command displays a multi-tab NUI form; when a player submits a report, sh-reports automatically captures a screenshot, formats a Discord embed, and sends everything to the appropriate webhook channel. Admins with the configured ACE permission receive an instant in-game alert so they can respond without monitoring Discord continuously. Role pings, image hosting via Fivemerr, and a server-wide toggle command are all configurable from a single config file.

Dependencies

ResourceRequiredPurpose
screenshot-basicRequiredCaptures and attaches screenshots to Discord embeds
sh-notifyRecommendedDefault in-game notification handler
Fivemerr accountOptionalExternal image hosting for screenshots
Start screenshot-basic before sh-reports in your server.cfg. If screenshot-basic is not running when sh-reports loads, no screenshots will be captured and the Discord embeds will be sent without images.

Installation

1

Install screenshot-basic

Download screenshot-basic and place it in your resources directory. Add ensure screenshot-basic to server.cfg above sh-reports.
2

Add sh-reports to your server

Place the sh-reports folder inside your resources directory.
resources/
├── screenshot-basic/
├── sh-notify/
└── sh-reports/
    ├── fxmanifest.lua
    └── shared/
        └── config.lua
3

Configure sh-reports

Open shared/config.lua and set your Discord webhooks, ACE permission, and any optional features. See the Configuration section below for the full reference.
4

Start sh-reports in server.cfg

server.cfg
ensure screenshot-basic
ensure sh-notify
ensure sh-reports
5

Add ACE permissions for admins

Grant the admin ACE permission (or whichever permission you set in Config.Permission) to the groups that should receive in-game report alerts.
server.cfg
add_ace group.admin admin allow

Configuration

All options are contained in shared/config.lua.
shared/config.lua
Config.Command  = 'report'              -- Player command to open the report UI

Config.Commands = {
    Report = 'report',                  -- Alias for the report command
    Toggle = 'togglereports',           -- Admin command to disable reports globally
}

Config.Permission = 'admin'             -- ACE permission for in-game admin alerts

Config.Mention = {
    Discord = false,                    -- Ping Discord roles on submission
    InGame  = true,                     -- Alert in-game admins on submission
}

Config.Notify = 'sh'                    -- 'sh' for sh-notify, or 'custom'

Config.EmbedOptions = {
    Color                = 15611494,   -- Discord embed accent colour (decimal format)
    UseFivemerr          = false,      -- Use Fivemerr for image hosting
    fivemerrApiKey       = '',         -- Fivemerr API key if UseFivemerr is true
    PlayerReportWebHook  = '',         -- Discord webhook for player reports
    BugReportWebHook     = '',         -- Discord webhook for bug reports
    SuggestionWebHook    = '',         -- Discord webhook for suggestions
    Storage              = '',         -- Fallback webhook for screenshot hosting
}

General Options

Config.Command
string
default:"'report'"
The chat command players type to open the report UI. Change this to any single word without the leading slash.
Config.Commands.Toggle
string
default:"'togglereports'"
The admin command that enables or disables the report system server-wide. Admins with the configured ACE permission can run this from the chat or server console.
Config.Permission
string
default:"'admin'"
The ACE permission node checked to determine who receives in-game report alerts and who can run the toggle command.
Config.Notify
string
default:"'sh'"
The notification handler used for player-facing messages. Set to 'sh' to use sh-notify, or 'custom' if you have integrated your own notification resource.

Alert Options

Config.Mention.Discord
boolean
default:"false"
When true, sh-reports pings the Discord roles defined in Config.Roles each time a report is submitted. Requires valid role IDs and a webhook with permission to mention roles.
Config.Mention.InGame
boolean
default:"true"
When true, all in-game players holding the ACE permission defined in Config.Permission receive an instant notification whenever a report is submitted.

Webhook and Embed Options

Config.EmbedOptions.Color
number
default:"15611494"
The accent colour of the Discord embed, expressed as a decimal integer. Use a colour converter such as convertingcolors.com to convert HEX or RGB values to the decimal format Discord requires.
Config.EmbedOptions.PlayerReportWebHook
string
required
The full Discord webhook URL for Player Report submissions. Each report type sends to its own channel to keep your Discord organised.
Config.EmbedOptions.BugReportWebHook
string
required
The full Discord webhook URL for Bug Report submissions.
Config.EmbedOptions.SuggestionWebHook
string
required
The full Discord webhook URL for Suggestion submissions.
Config.EmbedOptions.UseFivemerr
boolean
default:"false"
When true, screenshots are uploaded to Fivemerr and the hosted URL is embedded in the Discord message. Requires a valid fivemerrApiKey.
Config.EmbedOptions.fivemerrApiKey
string
default:"''"
Your Fivemerr API key. Only required when UseFivemerr is set to true.
Config.EmbedOptions.Storage
string
default:"''"
A fallback Discord webhook used to host screenshot attachments when Fivemerr is disabled. Discord’s CDN URL from this upload is then embedded in the report webhook message.

Discord Role Mentions

When Config.Mention.Discord is true, sh-reports pings specific Discord roles depending on the report type. Set each role ID to the numeric Discord Role ID for the role you want pinged.
shared/config.lua
Config.Roles = {
    PlayerReport = 1234567890,  -- Discord Role ID to ping on player reports
    BugReport    = 1234567890,  -- Discord Role ID to ping on bug reports
}
Suggestions do not have a dedicated role ping field. If you want pings for suggestions, assign the same role ID used for BugReport or extend the config with a custom entry.

Report Types

sh-reports organises all submissions into three tabs inside the NUI form. Each tab sends to its own configured Discord webhook.
Players use this tab to report another player for rule-breaking behaviour. The submitted embed includes the reporter’s server ID, the reported player’s server ID, a reason field, and an automatic screenshot of the reporter’s current view.
Players use this tab to describe a technical issue or broken feature on the server. The embed includes the reporter’s details, a description of the bug, and a screenshot for visual context.
Players use this tab to submit ideas or feature requests. Suggestions are sent to the dedicated Suggestion webhook without a screenshot by default, keeping that channel free of image clutter.

Admin Commands

CommandPermission RequiredDescription
/togglereportsConfig.Permission ACEToggles the entire report system on or off server-wide. Players attempting to submit while reports are disabled receive a notification informing them that reports are currently unavailable.
Disable reports temporarily during maintenance windows using /togglereports so players are not confused by missing feedback when staff are unavailable to act on submissions.