Skip to content

Installation ​

Follow the steps below in order: dependencies → SQL → permissions → ensure order → configure.

1. Install required dependencies ​

Make sure these resources are installed and up to date:

ResourceRequired
oxmysqlYes
ox_libYes
screenshot-basicYes
ESX (es_extended) or QBCore/QBox (qb-core / qbx_core)Yes (runtime)

Optional inventory resources can be auto-detected with Config.Inventory = 'auto'. Select an optional notification backend explicitly with Config.Notify. See Dependencies.

2. Add the resource ​

Place the leno_reports folder in your server resources directory (for example inside a [leno] group).

Do not rename the resource folder — anti-cheat whitelists and state bags use the name leno_reports.

3. Import the database ​

Run sql/install.sql once against the same database your oxmysql connection uses (HeidiSQL, phpMyAdmin, etc.).

WARNING

Core report tables are not auto-created at runtime. If you skip this step, create/queue queries will fail. Staff-chat tables can self-heal, but the main schema cannot.

This creates:

  • leno_reports
  • leno_report_messages
  • leno_report_participants
  • leno_report_player_snapshots
  • leno_report_timeline_events
  • leno_report_reads
  • leno_staff_chat_messages
  • leno_staff_chat_reads
  • leno_staff_duty

Use the supplied sql/install.sql; there is no separate sql/staff_chat.sql in this package. Staff-chat tables can also be created at runtime as described above.

4. Configure ACE permissions ​

Add to server.cfg (adjust group / identifiers to match your server):

cfg
add_ace group.admin reports.admin allow
add_principal identifier.license:YOUR_LICENSE group.admin

Default ACE string: reports.admin (Config.Permissions.admin).

Staff is also granted if the framework reports admin (QB god/admin, ESX group admin/superadmin). Override via ReportsHooks if needed — see Exports and Events.

Webhook URLs must live in server.cfg convars, never in config.lua:

cfg
set leno:discord_webhook "https://discord.com/api/webhooks/..."
set leno:discord_images_webhook "https://discord.com/api/webhooks/..."
ConvarPurpose
leno:discord_webhookAction logs (created, claimed, closed, goto, …)
leno:discord_images_webhookScreenshot uploads

Then enable/tune events in Config.Discord — see Configuration.

6. Start order in server.cfg ​

cfg
ensure oxmysql
ensure ox_lib
ensure screenshot-basic
ensure es_extended
# optional inventory / notify resources...
ensure leno_reports

INFO

This example uses ESX. For QBCore replace ensure es_extended with ensure qb-core; for QBox use ensure qbx_core. Start your selected framework and optional inventory/notification resources before leno_reports. framework is a placeholder, not a resource name to copy into server.cfg.

7. Configure and restart ​

  1. Edit config.lua (escrow-ignored) — categories, limits, UI commands, Discord event flags, actions.
  2. Restart the server (or ensure leno_reports after dependencies).
  3. In-game: /report (player) and /reports (staff) — defaults; see Commands.

Anti-cheat note ​

Staff goto / bring / freeze teleport and freeze the player entity. Whitelist the resource name leno_reports in your anti-cheat panel (ElectronAC, WaveShield, FiveGuard, etc.). Teleports are server-validated; the client applies coords/freeze only after the server says so.

Verify install ​

CheckExpected
Resource startsNo framework / SQL errors in console
/reportOpens player UI
/reports as staffOpens staff UI
Create a test reportRow appears in leno_reports
Screenshot (if enabled)Image appears via Discord images webhook

If something fails, see FAQ / Troubleshooting.

Continue with the User Guide. Staff should switch On Duty in the sidebar to receive report notifications with the default settings. See Customization for languages, categories, theme changes, and integrations.