Moderation System

Full featured moderation system plugin. MySQL is optional !


Features

  • Full async ban checks (No game thread blocks aka server is not responding for x seconds)
  • Validate steam players account age, account level and if account is limited (spent less than $5 USD in steam store)
  • Steam Id, IP and HwId bans support
  • Both investigate and checkowner commands supports getting the steam player profile link
  • Command that clears all bans that are irrelevant
  • Detection of alt accounts
  • Works with any other plugin that ban players
  • All webhooks can be translated and modified
  • MySQL is optional ! We provide LiteDB provider in case you don't want to set up MySQL
  • All messages & translations support Rich Text and Smart Format

Configuration Explained

  • DatabaseType
    • Select LiteDB to use LiteDB or MySql to use MySql. If you choose MySql make sure you filled MySqlConfiguration
  • AllowAlternativeAccounts
    • If alt accounts are allowed to join or not the server
  • ValidateSteamAccountAge
    • If the plugin should validate the steam account age of the player
  • SteamWebAPIKey
    • The staem web api key that the plugin will use to check the steam account age of a player. You can get one for free here
  • SteamAccounMinimumAgeInDays
    • How many days must pass from the moment the account was created

Permissions

Bypass the alt account check moderation.alt.bypass

Bypass the steam account age check moderation.steam.age.bypass


Commands

Command Syntax Explanation Example
/ban player id or name Bans a player permanently /ban feli
/ban <player id or name> [reason] Bans a player permanently with a reason /ban feli "test reason"
/ban <player id or name> [reason] [time] Bans a player for x time with a reason /ban feli "test reason" 1m 1d 1m 1s
/ban <player id or name> [reason] permanently Bans a player permanently with a reason /ban feli "test reason" permanently
/ban <player id or name> [reason] [time] -g Bans a player and group members for x time with a reason /ban feli "bad group" 30m -g
/bans player id or name Displays all bans of a player /bans feli
/bans <player id or name> [amount] Displays the last x amount of bans of a player /bans feli 5
/checkowner Checks information of a buildable or vehicle /checkowner
/checkowner <player id or name> [profile|p] Opens the steam profile of the buildable or vehicle owner /checkowner p
/clearbans Clears all the bans that expired /clearbans
/investigate player id or name Displays information of a player /investigate feli
/investigate <player id or name> [profile|p] Opens the steam profile of a player /investigate feli profile
/unban player id Deactivates all the non expired bans of a player /unban 76561198829616065
/findalts player id Displays all the alts of a player /findalts 76561198829616065
/findalts <player id> [index] Opens the steam profile of the specified alt /findalts 76561198829616065 0

Configuration

<?xml version="1.0" encoding="utf-8"?>
<ModerationSystemPluginConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <DatabaseType>LiteDB</DatabaseType>
  <MySqlConfiguration>
    <ServerAddress>127.0.0.1</ServerAddress>
    <ServerPort>3306</ServerPort>
    <Username>root</Username>
    <Password>password</Password>
    <DatabaseName>unturned</DatabaseName>
    <ConnectionString />
  </MySqlConfiguration>
  <DiscordWebhooks>
    <DiscordWebhook type="Ban" url="https://discord.com/api/webhooks/xxxx/xxxx" />
    <DiscordWebhook type="Block" url="https://discord.com/api/webhooks/xxxx/xxxx" />
    <DiscordWebhook type="Evading" url="https://discord.com/api/webhooks/xxxx/xxxx" />
  </DiscordWebhooks>
  <AllowInvalidHardwareIds>false</AllowInvalidHardwareIds>
  <AllowAlternativeAccounts>true</AllowAlternativeAccounts>
  <AllowSteamLimitedAccount>true</AllowSteamLimitedAccount>
  <ValidateSteamAccountAge>false</ValidateSteamAccountAge>
  <ValidateSteamAccountLevel>false</ValidateSteamAccountLevel>
  <SteamWebAPIKey>xxxx</SteamWebAPIKey>
  <SteamAccountMinimumAgeInDays>30</SteamAccountMinimumAgeInDays>
  <SteamAccountMinimumLevel>1</SteamAccountMinimumLevel>
</ModerationSystemPluginConfiguration>

Translatation

<?xml version="1.0" encoding="utf-8"?>
<Translations xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Translation Id="DatabasePlayerNotFound" Value="The player was not found in the database" />
  <Translation Id="ObjectNotFound" Value="You are not lookin at any vehicle, barricade or structure" />
  <Translation Id="ObjectInformation" Value="[{Object.Type}] {Object.Name} ({Object.Id}) is owned by {PlayerName}. Check steam profile with /checkowner profile" />
  <Translation Id="BanSyntax" Value="Correct Usage: /ban &lt;player | id&gt; [reason] [time] [-g]" />
  <Translation Id="PlayerNotFound" Value="Player {0} was not found" />
  <Translation Id="PlayerBan" Value="Successfully banned {Player.CharacterName}" />
  <Translation Id="PlayerBanGroup" Value="Successfully banned {Player.CharacterName} and group members {GroupMembers}" />
  <Translation Id="BanReason" Value="{Ban.Reason} | Appeal on our discord discord.gg/4FF2548" />
  <Translation Id="BanDefaultReason" Value="No reason specified" />
  <Translation Id="BanEvadingReason" Value="Alt account detected. Original ban reason: {Ban.Reason}" />
  <Translation Id="UnbanSyntax" Value="Correct Usage: /unban &lt;playerId&gt;" />
  <Translation Id="PlayerUnban" Value="Successfully deactivated {Bans} bans of {Player.CharacterName}" />
  <Translation Id="BansSyntax" Value="Correct Usage: /bans &lt;player | id&gt;" />
  <Translation Id="BansInfo" Value="{Player.CharacterName} has been banned {Bans} times" />
  <Translation Id="BansRow" Value="- Reason: {Ban.Reason} | Date {Ban.BanDate} | Moderator: {Moderator.CharacterName} | For: {BanTime}" />
  <Translation Id="YoungAccount" Value="Your account is too young to play on this server" />
  <Translation Id="AlternativeAccount" Value="Using muliple accounts is not allowed on this server" />
  <Translation Id="InvestigateSyntax" Value="Correct Usage: /investigate &lt;player | id&gt; [profile|p]" />
  <Translation Id="InvestigateResult" Value="Name: {Player.CharacterName} | Last Login: {Player.LastLogin} | TotalPlaytime: {TotalPlaytime} | IPAddress: {Player.IPAddress}" />
  <Translation Id="ClearBansResult" Value="Successfully removed a total of {Total} junk bans" />
  <Translation Id="FindAltsSyntax" Value="Correct Usage: /findalts &lt;playerId&gt; [index]" />
  <Translation Id="NoAltsFound" Value="No alts were found for {Player.CharacterName}" />
  <Translation Id="AltsInfo" Value="{Player.CharacterName} has {Alts} alts" />
  <Translation Id="AltsRow" Value="- {Index} {Player.CharacterName} ({Player.Id})" />
  <Translation Id="InvalidHardwareIds" Value="This server does not allow the use of external programs that modify the game behavior" />
  <Translation Id="AccountLevel" Value="Your account is too low to play on this server" />
  <Translation Id="AccountLimited" Value="Limited steam accounts are not allowed on this server. To access this server you will need to spend at least $5.00 USD within the Steam store" />
</Translations>