Configuration
DupeDetector is configured through a single config.json in the plugin folder:
A second file, config_commented.json, ships alongside it. It is the same
config with // comments — read it, but don't rename it over config.json
(comments are not valid JSON).
The keys LicenseKey, Verbose, LogToFile, and Database are shared by every
Bytemart plugin and are documented on the
Common Configuration page. This page covers only
the DupeDetection block, which is unique to DupeDetector.
💡 Validate before you start. Always validate your JSON after editing (e.g. with JSONLint). A load error code of
1114means a JSON syntax error.
DupeDetection
| Field | Type | Default | Description |
|---|---|---|---|
AlertWebhook |
string | "" |
Discord webhook for detections — one message per detection, naming the player involved. Empty means detections are still counted, but nothing is posted. |
Punishment
What happens once a player has accumulated enough detections. Every field is
optional: leave Command empty and ClearInventory false and DupeDetector
becomes report-only.
| Field | Type | Default | Description |
|---|---|---|---|
PunishmentWebhook |
string | "" |
Discord webhook for punishments. Kept separate from AlertWebhook so you can route the (much rarer) punishments to an admin-only channel. Empty means nothing is posted. |
Command |
string | "" |
A server console command to run against the offender when the threshold is reached — for example banplayer {steamid} or kickplayer {steamid}. Empty means no command is run. |
ClearInventory |
boolean | false |
Wipe the offender's inventory as part of the punishment. |
After.Min |
number | 1 |
Lower bound of the detection threshold. |
After.Max |
number | 1 |
Upper bound of the detection threshold. |
The After threshold
Min and Max bound how many detections a player may accumulate before the
punishment fires. Giving them different values leaves the exact threshold
unpredictable, which is the recommended setting — a fixed, known number is
something an offender can work around.
"Min": 1, "Max": 1— punish on the first detection (the default)."Min": 2, "Max": 5— punish somewhere in that range.
Values are range-checked on load, so you cannot accidentally configure a threshold that never fires.
💡 Start report-only. Leave
Commandempty andClearInventoryfalse for the first few days, watch what lands inAlertWebhook, and only then decide what a punishment should be.
Webhooks
Both webhook fields must be Discord webhook URLs. These prefixes are accepted:
Anything else — including an empty string — is dropped, with a line in the plugin log saying so. An empty webhook is never an error; it just means "send nothing".
🔒 A webhook URL is a credential. Anyone who has it can post to your channel. Keep
config.jsonout of public repositories and screenshots.
Full example
Next steps:
- Overview — what the plugin covers, installation, and commands.
- Common Configuration —
LicenseKey,Database,LogToFile,Verbose.