Shrubbot and User Database
What Is Shrubbot
Shrubbot is an invention of Ryan Mannion. Shrubbot is an admin system that identifies the admin leveled players from silEnT and PunkBuster GUIDs without the need for passwords. Shrubbot is also very flexible and allows creating many different admin levels with entirely different command sets. silEnT shrubbot is based on the work of the ETPub team. silEnT extends the functionality of the shrubbot where ever it is needed. Including user database that holds all the players that have visited the server. To access this database, new commands have been added to the original shrubbot command set. Some commands have been renamed to ease their use and so that they resemble commands from other ET mods that have advanced admin systems.
If you want to use shrubbot, the cvar g_dbDirectory must be set. If it is not set, the shrubbot will not be in use. If you want to edit the default levels, you must create or copy existing shrubbot.cfg file to the directory defined by the g_dbDirectory setting. In case shrubbot command like !ban is used against a player and a shrubbot.cfg file does not already exist, a new shrubbot.cfg file is created to store the needed data.
The created file will also have the default level settings written to it. This file can be freely edited by hand and then, after !readconfig command has been issued, the changes take effect on the server.
Shrubbot Commands
!admintest
Prints out player's current shrubbot admin level in global chat. When the NAME or SLOT are added and the user has the right shrubbot permission, the level of another player will be shown. However, if the target has incognito shrubbot flag, then 0 level is displayed regardless who does !admintest on him/her.
Syntax: !admintest [NAME|SLOT]
Permission Flag: a
Requires g_tyranny: No
Minimum required version: 0.2.0
!aliases
Prints out player's stored aliases. Aliases are printed in the last seen first order.If there are more stored aliases than fit on one page, optional page parameter can be used to access different pages. The number of stored aliases depends of the g_dbMaxAliases cvar.
Syntax: !alises [NAME|SLOT]
Permission Flag: e
Requires g_tyranny: No
Minimum required version: 0.6.0
!ban
Kicks the player in slot number SLOT or with name containing NAME off the server and will not let them connect again for SECONDS seconds, or, if a modifier (m, h, d, or w) is used, a given amount of time. For example:
90 = 90 seconds
15m = 15 minutes
3h = 3 hours
5d = 5 days
1w = 1 week
Syntax: !ban (NAME|SLOT) (SECONDS|TIME_WITH_MODIFIER) REASON
Permission Flag: b
Requires g_tyranny: No
Minimum required version: 0.2.0
!baninfo
Shows detailed information of a ban in the ban list. Find the ban number with !showbans command.
Syntax: !baninfo (BAN NUMBER)
Permission Flag: e
Requires g_tyranny: No
Minimum required version: 0.3.0
!burn
Sets the player in slot number SLOT or with name containing NAME on fire. REASON will be center-printed to the victim.
Syntax: !burn (NAME|SLOT) [REASON]
Permission Flag: U
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!cancelvote
Makes a vote in progress fail.
Syntax: !cancelvote
Permission Flag: c
Requires g_tyranny: No
Minimum required version: 0.2.0
!country
Displays the country of the player. This command works only if GeoIP is enabled on server g_countryFlags
Syntax: !country
Permission Flag: i
Requires g_tyranny: No
Minimum required version: 0.8.0
!crazygravity
Enables random g_gravity changes with 30 second interval. If enabled, the crazy gravity is automatically disabled at map end.
Syntax: !crazygravity (ON|OFF)
Permission Flag: C
Requires g_tyranny: No
Minimum required version: 0.6.2
!crazyspeed
Enables random g_speed changes with 30 second interval. If enabled, the crazy speed is automatically disabled at map end.
Syntax: !crazyspeed (ON|OFF)
Permission Flag: C
Requires g_tyranny: No
Minimum required version: 0.6.2
!dewarn
Shows all the warnings of a user. When warning number is used, the warning with that number will be removed.
Syntax: !dewarn (NAME|SLOT) [WARNING#]
Permission Flag: R
Requires g_tyranny: No
Minimum required version: 0.2.0
!disorient
Turns the view upside down for the client in slot number SLOT or with name containing NAME. If REASON is specified it is printed to the client.
Syntax: !disorient (NAME|SLOT) [REASON]
Permission Flag: d
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!finger
Display the slot, partial guid, ip and clientversion of a player.
NOTE: This command should be available only to the highest server admins!
Syntax: !finger (NAME|SLOT)
Permission Flag: e
Requires g_tyranny: No
Minimum required version: 0.2.0
!freeze
Freezes the client in slot number SLOT or with name containing NAME. If no parameter is provided it freezes all players. Frozen player(s) cannot receive damage during this time. If REASON is specified it is printed to the client.
Syntax: !freeze [NAME|SLOT] [REASON]
Permission Flag: F
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!gib
Kills and gibs the player in slot number SLOT or with name containing NAME. If name is -1 or all or if no name is entered, everybody will be gibbed.
Syntax: !gib (NAME|SLOT|-1|all)
Permission Flag: g
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!giba
Kills and gibs all players.
Syntax: !giba
Permission Flag: Q
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!help
Lists all the available shrubbot commands. If COMMAND is given, then prints the help of that specific command. !help is always available to all clients.
Syntax: !help [COMMAND]
Permission Flag: None
Requires g_tyranny: No
Minimum required version: 0.2.0
!howfair
Prints a simple summary to everyone on the chat of team fairness based on player kill rating.
Syntax: !howfair
Permission Flag: I
Requires g_tyranny: No
Minimum required version: 0.2.0
!kick
Kicks the player in slot number SLOT or with name containing NAME off of the server. REASON is given to the client as the drop message. The client will be banned for 2 minutes.
Syntax: !kick (NAME|SLOT) REASON
Permission Flag: k
Requires g_tyranny: No
Minimum required version: 0.2.0
!levinfo
Lists all the details of the specific admin level. The listed information includes The name of the level, the greeting, the greeting sound path and the privilege flags for the level.
Syntax: !levinfo (Admin Level)
Permission Flag: s
Requires g_tyranny: No
Minimum required version: 0.5.2
!levlist
Lists all the admin levels loaded from the shrubbot.cfg.
Syntax: !levlist
Permission Flag: s
Requires g_tyranny: No
Minimum required version: 0.5.2
!list
Prints out a list of information about the connected players. The columns are:
- slot number
- team R=axis B=allies S=spectator C=connecting
- first letter of fireteam name
- admin level (and level name)
- last 8 digits of guid
- M if muted
- W if warned
- name
Syntax: !list
Permission Flag: i
Requires g_tyranny: No
Minimum required version: 0.2.0
!listteams
Prints out a list of statistical information about each team. This lists ends with ratings information based on how likely each team is to win the current map. The team with more points is LESS likely to win, therefore a good way to balance the teams is to join the team with more points, or move people to that team, until the points are about even.
Syntax: !listteams
Permission Flag: I
Requires g_tyranny: No
Minimum required version: 0.2.0
!lock
Locks the specified team. Recognized values are r=AXIS b=ALLIES s=SPECTATORS all=ALL.
Syntax: !lock (r|b|s|all)
Permission Flag: K
Requires g_tyranny: No
Minimum required version: 0.2.0
!lol
Makes all players drop grenades. If NAME or SLOT is provided only that player will drop grenades. GRENADES is the number of grenades to be dropped (default is 1, maximum is 16).
Syntax: !lol [NAME|SLOT] [GRENADES]
Permission Flag: x
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!mute
Mutes a player in a slot number SLOT or with a name containing NAME. TIME and REASON are optional. See !ban for more information on modifiers
Syntax: !mute (NAME|SLOT) [SECONDS|TIME_WITH_MODIFIER] REASON
Permission Flag: m
Requires g_tyranny: No
Minimum required version: 0.2.0
!news
Plays the map specific news audio to all players if it is available.
Syntax: !news
Permission Flag: W
Requires g_tyranny: No
Minimum required version: 0.2.0
!nextmap
Moves to the next map in campaign or in the objective cycle end game intermission is skipped. With mapvoting gametype the game will go to the intermission.
Syntax: !nextmap
Permission Flag: n
Requires g_tyranny: No
Minimum required version: 0.2.0
Changelog
- 0.4.0 The !nextmap will go to the intermission map voting when the gametype is set to 7 and the g_mapVoteFlags bitmask has flag 16 set.
- 0.5.1 The g_mapVoteFlags flag 16 was removed and the game will always go to the intermission with map voting game type. If old behaviour is needed, admin can create custom command executing "vstr nextmap".
!orient
Reverses the action of !disorient for the client in slot number SLOT or with name containing NAME.
Syntax: !orient (NAME|SLOT)
Permission Flag: d
Requires g_tryanny: Yes
Minimum required version: 0.2.0
!panzerwar
Enables panzerwar game mode. All the players will have their main weapon changed to panzerfaust.
Syntax: !panzerwar [on|off]
Permission Flag: q
Requires g_tyranny: No
Minimum required version: 0.2.0
!passvote
Makes a vote in progress pass.
Syntax: !passvote
Permission Flag: V
Requires g_tyranny: No
Minimum required version: 0.2.0
!pause
Pauses the match.
Syntax: !pause
Permission Flag: Z
Requires g_tyranny: No
Minimum required version: 0.2.0
!pip
Draws sparks (pixie dust) around the player in slot number SLOT or with name containing NAME. Does it to all players if NAME/SLOT is not providied.
Syntax: !pip [NAME|SLOT]
Permission Flag: z
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!pop
Pops the helmet off from a player in a slot number SLOT or with a name containing NAME. If no parameter is provided, it pops the helmets off from all the players.
Syntax: !pop [NAME|SLOT]
Permission Flag: z
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!putteam
Moves a player in a slot number SLOT or with a name containing NAME to the indicated team.
- r - Allies
- b - Axis
- s - Spectators
Syntax: !putteam (NAME|SLOT) (r|b|s)
Permission Flag: p
Requires g_tryanny: No
Minimum required version: 0.2.0
!readconfig
Reads shrubbot.cfg file from the directory set by g_dbDirectory cvar.
Syntax: !readconfig
Permission Flag: G
Requires g_tyranny: No
Minimum required version: 0.2.0
!rename
Sets the player in slot number SLOT or with name containing NAME to NEWNAME. The name change will not be persistent. The user database will store the renamed name for the player.
Syntax: !rename (NAME|SLOT) NEWNAME
Permission Flag: N
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!reset
Resets the match.
Syntax: !reset
Permission Flag: r
Requires g_tyranny: No
Minimum required version: 0.2.0
!resetmyxp
Clears all XP and skillpoints for the player who runs this command.
Syntax: !resetmyxp
Permission Flag: M
Requires g_tyranny: No
Minimum required version: 0.2.0
!resetxp
Clears all XP and skillpoints for the player in the slot number SLOT or with the name containing NAME. If reason is provided it is printed to the client.
Syntax: !resetxp (NAME|SLOT) [REASON]
Permission Flag: X
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!restart
Restarts the match.
Syntax: !restart
Permission Flag: r
Requires g_tyranny: No
Minimum required version: 0.2.0
!riflewar
Enables riflewar game mode. All the players will have their main weapon changed to either K43 or Garand.
Syntax: !riflewar [on|off]
Permission Flag: q
Requires g_tyranny: No
Minimum required version: 0.2.0
!rmsubnetban
Removes subnet ban. The given subnet ban number can be found using !subnets command.
Syntax: !rmsubnetban [ban number]
Permission Flag: .
Requires g_tyranny: No
Minimum required version: 0.4.0
!setlevel
Sets the connected player in the slot number SLOT or with name containing NAME to the level indicated by LEVEL. A player cannot !setlevel another player to a lever higher than him/herself.
Syntax: !setlevel (NAME|SLOT) LEVEL
Permission Flag: s
Requires g_tyranny: No
Minimum required version: 0.2.0
!showbans
Lists up to 30 shrubbot bans currently in effect. The columns are:
- ban number
- banned player's name
- date of the ban
- name of the banning admin
- when the ban will expire
- reason for the ban
If SKIP is provided, that number of bans are skipped before printing starts. SKIP can also be negative (e.g. '!showbans -10' would display the last 10 bans.
Syntax: !showbans [SKIP]
Permission Flag: B
Requires g_tyranny: No
Minimum required version: 0.2.0
!shuffle
Shuffles teams, but does NOT restart (see !restart).
Syntax: !shuffle
Permission Flag: S
Requires g_tyranny: No
Minimum required version: 0.2.0
!slap
Does DAMAGE (default 20) damage to player in slot SLOT or with name containing NAME. If REASON is specified it's center-printed to the victim.
Syntax: !slap (NAME|SLOT) [DAMAGE] [REASON]
Permission Flag: A
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!sniperwar
Enables sniperwar game mode. All the players will have their main weapon changed to sniper rifles.
Syntax: !sniperwar [on|off]
Permission Flag: q
Requires g_tyranny: No
Minimum required version: 0.2.0
!spec999
Moves all the players with a ping of 999 to the spectators team.
Syntax: !spec999
Permission Flag: P
Requires g_tyranny: No
Minimum required version: 0.2.0
!spree
Show the players current killing spree count.
Syntax: !spree
Permission Flag: E
Requires g_tyranny: No
Minimum required version: 0.2.0
!spreerecord
Displays the map and the overall spreerecord.
Syntax: !spreerecord
Permission Flag: E
Requires g_tyranny: No
Minimum required version: 0.2.0
!stats
Displays the Thompson, MP40 and PPSh total kills and deaths, kills and deaths during the map and accuracy, headshotratio and headshot distance during the map. Lists all connected players.
Syntax: !stats
Permission Flag: t
Requires g_tyranny: No
Minimum required version: 0.2.0
!subnets
This command displays all the issued subnet bans.
Syntax: !subnets (start at)
Permission Flag: B
Requires g_tyranny: No
Minimum required version: 0.4.0
!subnetban
With this command admin can issue subnet ban. Subnet ban is a ban where the connecting player IP is matched against a larger IP range. The command accepts only subnets between range x.* - x.x.x.*. If the admin attempts to issue subnet ban that would ban himself the command refuses to add the subnet. This can be circumvented using rcon commands. If admin wants to add a subnet that would ban himself he must first whitelist himself with !userwl command. If silEnT can confirm the admin can connect the subnet ban is added. The command accepts full IP as it's parameter in which case the subnet is created to the x.x.x.* address. To remove subnet bans admin can use the !rmsubnetban command. The syntax with this commnd is the same kind with ban and userban commandand reason andtime can be given. The reason should be given so that any player connecting would know the reason for not being able to connect.
Syntax: !subnetban [subnet] (time) (reason)
Permission Flag: .
Require g_tyranny: No
Minimum required version: 0.4.0
Changelog:
0.6.2 - Octets can be cut from inside with 'x'. For example, "!subnetban 12x" will ban all IP addresses matching 12x.xxx.xxx.xxx.
!swap
Swaps the players to the opposite team.
Syntax: !swap
Permission Flag: w
Requires g_tyranny: No
Minimum required version: 0.2.0
!time
Prints out localtime of the client in the chat. No other client can see this time message. The command doesn't have a flag but it is available to all clients always.
Syntax: !time
Permission Flag: No permission required
Requires g_tyranny: No
Minimum required version: 0.2.0
!throw
Send the player in slot number SLOT or with name containing NAME flying.
Syntax: !throw (NAME|SLOT)
Permission Flag: l
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!tspree
Show the top n current killing spree (default top 5).
Syntax: !tspree [amount]
Permission Flag: E
Requires g_tyranny: No
Minimum required version: 0.2.0
!unban
Removes the ban that !showbans lists as BAN_NUMBER.
Syntax: !unban BAN_NUMBER
Permission Flag: b
Requires g_tyranny: No
Minimum required version: 0.2.0
!unfreeze
Unfreezes the client in slot number SLOT or with name containing NAME. If no parameter is provided it unfreezes all players.
Syntax: !unfreeze [NAME|SLOT]
Permission Flag: F
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!unpause
Unpauses the match.
Syntax: !unpause
Permission Flag: Z
Requires g_tyranny: No
Minimum required version: 0.2.0
!unmute
Unmutes the player in slot number SLOT or with name containing NAME.
Syntax: !unmute (NAME|SLOT)
Permission Flag: m
Requires g_tyranny: No
Minimum required version: 0.2.0
!unlock
Unlocks the team specified. Recognized values are r=AXIS b=ALLIES s=SPECTATORS all=ALL.
Syntax: !unlock (r|b|s|all)
Permission Flag: K
Requires g_tyranny: No
Minimum required version: 0.2.0
!uptime
Show how long the server has been up and running.
Syntax: !uptime
Permission Flag: u
Requires g_tyranny: No
Minimum required version: 0.2.0
!fling
Send the player in slot number SLOT or with name containing NAME flying.
Syntax: !fling (NAME|SLOT)
Permission Flag: l
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!launch
Send the player in slot number SLOT or with name containing NAME flying.
Syntax: !launch(NAME|SLOT)
Permission Flag: l
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!throwa
Sends all players flying.
Syntax: !throwa
Permission Flag: L
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!flinga
Sends all players flying.
Syntax: !flinga
Permission Flag: L
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!launcha
Sends all players flying.
Syntax: !launcha
Permission Flag: L
Requires g_tyranny: Yes
Minimum required version: 0.2.0
!warn
Plays the whistle sound and center-prints WARNING to the player in slot number SLOT or with name containing NAME.
Syntax: !warn (NAME|SLOT) [WARNING]
Permission Flag: R
Requires g_tyranny: No
Minimum required version: 0.2.0
User Database & Commands
User database is intended to store information of all the players that connect to the server. To enable user database g_dbDirectory must be set. The database stores information to identify different players and also XP data, rating data, overall stats data and shrubbot admin data. silEnT GUIDs are used to identify single players.
Shrubbot includes functionality for server admins to handle database userdata. All commands that handle users in the database will take the last 8 characters of the player silEnT GUID to identify the player to edit. Internally, the full GUID is used to identify the players. Some commands have equivalent versions using last 8 characters of PunkBuster GUIDs to identify the player. These are needed for players who were stored into the database before the silEnT GUID was added and haven't connected to the server since.
!aliasesdel
Command removes all the aliases from the player identified by the 8 character silEnT ID.
Syntax: !aliasesdel [silEnT ID]
Permission Flag: [
Requires g_tyranny: No
Minimum required version: 0.6.0
!aliassearch
This command searches the whole aliases database for the pattern in the names. Note, this command is the most resource intensive shrubbot command of all commands, and it is not recommended to be used without a reason. How fast it performs in practice depends of the aliases database size.
For each player the following information is shown:
- identity information (silEnT ID)
- each used alias that fits the search pattern
- for each alias when it was first seen
- for each alias when it was last seen
- for each alias the total playtime with it
To see all the aliases of the found player, you can use "!userinfo aliases" command. In the case of all the data not fitting in one page, you can give an optional start parameter. The start parameter corresponds to the numbers shown in the first column of the results. So that each player has its own number and under that number, all the matching aliases from that player are printed.
Syntax: !aliassearch [name] [start]
Permission Flag: ]
Requires g_tyranny: No
Minimum required version: 0.6.0
!confirm
Confirms the player identity with a protected admin level. As a result, the confirmed player and the server will transfer authentication information allowing the player to use admin commands from thereafter. Unconfirmed players are players with admin level that is protected but the server can not ensure the identity. This usually happens when players admin level changes with offlinecommands or the protected levels are extended. This command does not give the player admin levels, it only confirms the identity of a player whos admin level is already set. Also, if the player loses his admin level identification, this command can not be used to reinstate it.
This command is safe to be given even to the lower levels of admins.
Syntax: !confirm [SLOT]
Permission Flag: :
Requires g_tyranny: No
Minimum required version: 0.5.0
!userlist
Lists all users in the database. If PAGE is given, the list starts from that page. If PAGE is not given the first page of the database is printed. The command prints all users, including clients that have connected during the level time and are not yet in the database. The connected clients are always printed first and then the rest of the userbase.
The printed rows have the following columns:
- '#' ; This is the serial number of the user in the printout. The number doesn't correspond to anything in the database.
- 'silEnT ID' ; This is the 8 character silEnT GUID of the player. This is used to identify different players in the database.
- 'PBGUID' ; This is the 8 character PB GUID of the user. This is used to identify different users in the database.
- 'Last Seen' ; This tells how long time ago the user was last seen on the server. For connected clients, this will print "connected".
- 'IP' ; This tells the last IP address user has had on the server.
- 'Ban' ; This is the ban number if the player is banned from the server. If the player is whitelisted from IP bans, this column reads white capital W.
- 'Name' ; This tells the last name with user has been saved on the server.
With userlist command an admin can list all the users saved in the database and those that are connected page by page. Optional page number can be given to the command to tell which page is to be displayed about the users. One page can have up to 20 players printed.
Syntax: !userlist [PAGE]
Permission Flag: ]
Requires g_tyranny: No
Minimum required version: 0.2.0
Changelog:
- 0.4.0 - New column 'Ban' is added to the output.
- 0.5.0 - New column 'silEnT ID' is added to the output.
!userinfo
Displays all information that is stored about the user in the database.
This information includes:
- identity information (name, IP, 8 character PunkBuster GUID, silEnT ID, Client Identification)
- admin level
- personal greeting
- personal greeting sound
- personal shrubbot flags
- saved XP per skill
- rating values
- total kills and deaths with SMG weapons
- the ban number of the player or whitelisting
- list of stored aliases if the aliases database is enabled on the server
Command can optionally print player's stored aliases if the optional aliases parameter is given and the aliases database is enabled by setting g_dbMaxAliases to a positive integer. If printed aliases don't fit in one page, optional page parameter can be used to access different pages.
Command requires the last 8 characters of the player silEnT GUID. This GUID can be found with !userlist or !usersearch commands. This command works for both online and offline players.
Syntax: !userinfo [silEnT ID] [aliases [page]]
Permission Flag: ]
Requires g_tyranny: No
Minimum required version: 0.2.0
Changelog:
- 0.4.0 - Information of possible ban and whitelisting is added.
- 0.5.0 - silEnT ID is added.
- 0.6.0 - Aliases option is added.
!useredit
Command is used to edit explicit userdata in the database. The command format is:
!useredit [silEnT ID] [add|remove|level|greeting|sound] [new value]
The command parameters in detail:
- silEnT ID - This is the last 8 characters of the silEnT GUID of the player. This is needed to identify the player to edit.
- add - If the command is given this parameter, the value(s) in the [new value] field will be added to the player's personal flags.
- remove - If the command is given this parameter, the value(s) in the [new value] field will be removed from the player's personal flags.
- level - If the command is given this parameter, the value in the [new value] field will be set as the players new level. The level may not be higher then the level of the player executing the command.
- greeting - If the command is given this parameter, the value in the [new value] field will be the players new personal greeting. If the [new value] field is empty, the personal greeting is cleared.
- sound - If the command is given this parameter, the value in the [new value] field will be the file path to the players new personal greeting sound. If the [new value] field is empty, the personal greeting sound is cleared.
- new value - This field is used to give values to the command.
If the optional new value field is not set with greeting or sound parameter, the value will be set to empty and level values will be used again with these players.
This command works with online and offline players.
Syntax: !useredit [silEnT ID] [add|remove|level|greeting|sound] [new value]
Permission Flag: [
Requires g_tyranny: No
Minimum required version: 0.2.0
Changelog:
- 0.5.0 - The command now uses the silEnT GUID instead of the PB GUID. The backward compatible version of the command is named !usereditpb.
!givexp
Command gives the online or offline player identified by PBGUID a defined amount of XP points to the selected skill. The possible skills are:
sold Soldier or Heavy Weapons
med Medics or First Aid
eng Engineering or Explosives and Construction
fops Field Ops or Signals
cov Covert Ops or Military Intelligence and Scoped Weapons
light Light Weapons
battle Battle Sense
Syntax: !givexp [silEnT ID] [sold|med|eng|fops|cov|light|battle] [amount to add]
Permission Flag: [
Requires g_tyranny: No
Minimum required version: 0.2.0
Changelog:
- 0.5.0 - The command now uses the last 8 characters of the silEnT GUID instead of the PB GUID. The backward compatible version of the command is named !givexppb.
!userban
Command bans user indentified by the 8 character silEnT GUID from the server. The data required for ban is taken from the database and the banned user does not need to be online when the command is given. Bot's cannot be banned with this command. Note that the bans are written in the human readable config file and you can still write the bans by hand if desired. Also, removing of the bans can be done by hand if desired.
Syntax: !userban [silEnT ID] [time] [reason]
Permission Flag: ]
Requires g_tyranny: No
Minimum required version: 0.2.0
Changelog:
- 0.5.0 - The command now uses the last 8 characters of the silEnT GUID instead of the PB GUID. The backward compatible version of the command is named !userbanpb.
!userwl
With this command admin can whitelist or remove whitelisting from any player. Whitelisting means that the player IP is not checked against any IP bans. Including subnet bans and individual bans.
Syntax: !userwl [silEnT GUID] [add|remove]
Permission Flag: .
Requires g_tyranny: No
Minimum required version: 0.4.0
!userdelete
Command removes the user identified by the 8 character silEnT GUID from the database. The actual actions are taken at the level end if needed. However, once the !userdelete command has been issued to the user, the information of the user is no longer available and after the shutdown game, it is permanently lost.
If the removed player is connected to the server while removing, a new entry is written to that player.
Syntax: !userdelete [silEnT ID]
Permission Flag: [
Requires g_tyranny: No
Minimum required version: 0.2.0
Changelog:
- 0.5.0 - The command now uses the last 8 characters of the silEnT GUID instead of the PB GUID. The backward compatible version of the command is named !userdeletepb.
!usersearch
With this command an admin can search the database for players with specific parameters. Arguments to the command can be pattern in the name, user admin system level and the beginning of the IP address. Additional page number can be given when the amount of found results exceed what can be shown in one page. All the arguments can be given in one command in any order. Any one of the arguments can be omitted, but each time when command is given at least one argument on top of the optional page number must be given. This command searches stored information only from the database. Connected players are not included unless they are already stored into the database.
This command can be performance intensive and it is not recommended to use it only for maintenance operations. The command will internally always try to optimise itself. If the command is given repeatedly with same arguments but only changing the page number, new searches are not performed but only different pages of the already found results are displayed. The optimisations include that the silEnT will try to use the already found results as the basis for the new search (e.g. "!usersearch name gao" followed by "!usersearch name gaoe" will first search the whole db to find all users with the pattern gao in their names and the follow up search will refine the already found results for gaoe). The maximum amount of results one search can return is 256 users. Users are displayed in the console in pages with 20 users on each page.
Syntax: !usersearch [name (name)]|&[level (level)]|&[IP (IP)] [page]
Permission Flag: ]
Requires g_tyranny: No
Minimum required version: 0.2.0
!updatepbguid
Updates the PB GUID that is stored in the database to the one which the player is currently using. With the exception that empty, invalid or dublicated PB GUIDs are not saved to the database.
Syntax: !updatepbguid [Name|Slot]
Permission Flag: ,
Requires g_tyranny: No
Minimum required version: 0.5.2
!readadmins
With this command an admin can read admin definitions from a specific admins.cfg file. The file must be placed in the directory pointed by g_dbDirectory server cvar. The file may have only admin definition blocks. Admin definitions use always the following syntax. The syntax is exactly the same used by the ETPub.
[admin]
name = name of the admin (can be left empty)
sguid = full 32 character silEnT GUID (this field is used to identify players in the database)
guid = full 32 character PB GUID (this field is used to identify players in the database)
level = level number
flags = personal admin flags (can be left empty)
greeting = personal greeting (can be left empty)
greeting_sound = path to personal greeting sound (can be left empty)
If the database doesn't yet have the player, it will be added there. Those players will have the last seen field reading NEVER with !userlist and !usersearch command outputs. If the player already exists in the database, the admin values will be overwritten with the ones in read from the admins.cfg file.
Syntax: !readadmins
Permission Flag: )
Requires g_tyranny: No
Minimum required version: 0.3.0
Change Log:
- Starting from silEnT 0.5.0, the field sguid was added to the admin blocks. This allows adding admins using the silEnT GUIDs to identify them.
Example::
[admin]
name = ETPlayer
sguid = 12345678912345678912345678912345
guid = 98765432198765432198765432198765
level = 5
flags =
greeting =
greeting_sound =
[admin]
name =
sguid = 98765432198765432198765432198765
guid = 12345678912345678912345678912345
level = 3
flags = AbC
greeting =
greeting_sound =
!resetpls
With this command an admin can reset all stored statistics from an online or an offline player. The stored statistics include total SMG kills and deaths, the player K/D rating and PRW rating.
Syntax: !resetpls [silEnT ID]
Permission Flag: (
Requires g_tyranny: No
Minimum required version: 0.3.0
Changelog:
- 0.5.0 - the command was changed to use silEnT ID instead of the last 8 characters of the PB GUID. There is no backward compatible command for PB GUIDs.
List of Permission Flags
Flags to privileges
- 1 - Cannot be vote kicked, vote muted, or complained against.
- 2 - Cannot be censored.
- 3 - Can run shrubbot commands silently by adding '/' character in front of the command.
- 4 - Can see Axis/Allies team chats as a spectator.
- 5 - Can switch teams any time, regardless of balance.
- 6 - Does not need to specify a reason for !mute, !kick or !ban.
- 7 - Can call a vote at any time (regardless of disabled voting or voting limitations).
- 8 - Does not need to specify a duration for a ban (defaults to PERMANENT).
- 9 - Can do shrubbot commands via team and fireteam chats.
- 0 - Is immune to g_inactivity and g_spectatorInactivity settings.
- ! - Is immune to all shrubbot commands (useful for server admins). Note, this flag must be specified explicitly the * flag does not grant it.
- @ - "incognito" flag shows the admin as level 0 with no a.k.a info in the output of !listplayers. Note, this flag must be specified explicitly the * flag does not grant it.
- $ - Can do !admintest on other players.
- ~ - Can read and write the adminchat with the /ma command. All referees and all other players with the ~ flag will be able to read this chat.
- & - Can rename himself regardless of g_maxNameChanges limit.
- ? - Can see all private messages while being in spectators. g_tyranny must be set for this flag to take effect.
- / - Cannot send private messages. Otherwise normal privileges.
- # - Cannot call votes.
- : - Can confirm admin identity.
Flags to commands
- A - !slap
- a - !admintest
- B - !showbans, !subnets
- b - !ban, !unban
- C - !crazygravity, !crazyspeed
- c - !cancelvote
- d - !disorient, !orient
- E - !spree, !spreerecord, !tspree
- e - !baninfo, !finger, !aliases
- F - !freeze, !unfreeze
- G - !readconfig
- g - !gib
- I - !howfair, !listteams
- i - !list
- K - !lock, !unlock
- k - !kick
- L - !flinga, !launcha, !throwa
- l - !fling, !launch, !throw
- M - !resetmyxp
- m - !mute, !unmute
- N - !rename
- n - !nextmap
- P - !spec999
- p - !putteam
- R - !warn, !dewarn
- r - !reset, !restart
- S - !shuffle
- s - !setlevel, !levlist, !levinfo
- t - !stats
- U - !burn
- u - !uptime
- Q - !giba
- q - !panzerwar, !riflewar, !sniperwar
- V - !passvote
- W - !news
- w - !swap
- X - !resetxp
- x - !lol
- Z - !pause, !unpause
- z - !pip, !pop
- ] - !userlist, !userinfo, !userban, !usersearch, !aliassearch
- [ - !useredit, !givexp, !userdelete, !aliasesdel
- ) - !readadmins
- ( - !resetpls
- . - !userwl, !rmsubnetban, !subnetban
- , - !updatepbguid
Shrubbot Files
To use shrubbot the g_dbDirectory must be set. All the shrubbot files are placed into that directory.
shrubbot.cfg
Shrubbot.cfg is the file that holds all the level definitions, custom commands, bans, warns and subnetbans for the server shrubbot. These configuration settings are hand editable. If the shrubbot.cfg file does not exists when !ban or!setlevel is used, a new one with default settings is created. The settings in the shrubbot.cfg are divided into following data blocks.
[level]
level = The level number.
name = The nameof the level used in e.g. !list command.
flags = The permission flags for the level.
greeting = The greetingtext that is displayed to every player joining the server with this level.
greeting_sound = The greeting sound played for every playerjoining the server with this level.
[command]
command = The name of the command.
exec = The executed command. These must be commands available to /rcon and these will be executed with rcon privileges.
desc = The help description of the cmmand.
syntax = List of parameters if the command uses them. This is used with !help and it is optional.
levels = Space separated list of levels this command is allowed.
- The exec field in the command block can use all the shortcuts that silEnT support. The shortcut is substituted as the command would have been a say from the player who issued the command. In addition to normal shortcuts, it is possible to use [i] which is replaced with the client number of the player who did the command.
- The exec field in the command block can additionally use parameter placeholders. These are [1] - [9] where the number is the n:th parameter given to the custom command. When these are used, the server will substitute the placeholder with the n:th parameter given to the command.
- Starting from silEnT 0.2.1, it is possible to add '?' to the parameter placeholders. This will make the server substitute the given string to a player name if only one player matches the string. For example:
[command] command = crybaby exec = playsound path/to/sound.wav; chat ^7[1?]^7 is crying like a little baby! desc = Make someone cry like a baby syntax = [name] levels = 0 1 2 3 4 5
[ban]
name = The name of the banned player.
guid = The PunkBuster GUID of the banned player.
sguid = The silEnT GUID if the banned player.
ip = The IP address of the banned player.
reason = The reason for the ban.
made = The time and date when the ban was issued.
expires = When the ban will expire.
banner = The name of the admin who banned the player.
ident = The silEnT ident if available.
[subnetban]
subnet = The subnet of the ban.
reason = The reason for the ban.
made = The time and date when the subnet ban was created.
expires = When the ban will expire.
banner = The name of the admin who created the ban.
[warning]
name = The name of the warned player.
guid = The silEnT GUID of the warned player.
ip = The IP addressof the warned player.
warning = The reason of the warning.
made = The time when the warning was made.
warner = The name of the player who warned.
[customvote]
name = The of the vote shown with the /callvote command. Maximum length 15 characters.
exec = Command string to execute if the vote passes. Maximum length 1023 characters.
description = Description of the vote shown with the /callvote command. Maximum length 1023 characters.
votetext = The text that is show for voters. Maximum length 255 characters.
passtext = Optionally, a text that is shown to players if the vote passes.
levels = Optionally, admins can define the vote to be available to only specific levels. Same format that is used with the custom commands.
userdb.db
This is a file where the silEnT stores information of the players. This file is not hand editable. By editing this file by hand you risk it getting corrupted or causing error conditions. The silEnT will automatically identify the file version for different silEnT versions and if necessary, silEnT will convert the file to a newer version. The old file will always be stored at the g_dbDirectory location with a _vxx added to its name.
If silEnT finds this file to be corrupted or unusable, it will not overwrite it. It will only refuse to initialize the shrubbot and therefore you must look at the logs if you encounter any problems with shrubbot. The error messages in the log are usually very descriptive.
userxdb.db
This is a file where silEnT stores less often needed information about the players. Such as personalized greetings. This file is not hand editable. By editing this file by hand you risk it getting corrupted or causing error conditions. The silEnT will automatically identify the file version for different silEnT versions and if necessary, silEnT will convert the file to a newer version. The old file will always be stored at the g_dbDirectory location with a _vxx added to its name.
If silEnT finds this file to be corrupted or unusable, it will not overwrite it. It will only refuse to initialize the shrubbot and therefore you must look at the logs if you encounter any problems with shrubbot. The error messages in the log are usually very descriptive.
useradb.db
Starting from silEnT 0.6.0, this file holds the optional aliases database. To enable the database, g_dbMaxAliases cvar must be set to a positive integer. The aliases database can be disabled by setting g_dbMaxAliases to 0 at any time and then re-enabled by setting the value back to a positive integer without any effect to the file. However, if the g_dbMaxAliases cvar is set to a smaller value than it was before, the aliases that exceed the threshold will be lost and cannot be recovered.
This file is not hand editable. By editing this file by hand you risk it getting corrupted or causing error conditions. The silEnT will automatically identify the file version for different silEnT versions and if necessary, silEnT will convert the file to a newer version. The old file will always be stored at the g_dbDirectory location with a _vxx added to its name.
If silEnT finds this file to be corrupted or unusable, it will not overwrite it. The error messages in the log are usually very descriptive about the errors.
Shrubbot Limitations
Maximum number of levels: 31
Maximum length of shrubbot level name: 35 (includes color codes)
Maximum number of players in the database: Unlimited
Maximum number of player bans: 1023
Maximum number of subnet bans: 128 (512 since 0.9.0)
Maximum length of ban reason: 1023
Maximum number of admin-defined commands: 63
Maximum admin-defined command name length: 63 characters
Maximum admin-defined command length (executable part): 1023 characters
Maximum admin-defined command length (help string): 1023 characters
Maximum number of warnings: 1023
Shortcuts
Server supports the replacement of the following keys in say messages
[a] last player who gave you ammo
[d] last player who killed you
[g] the last 8 characters of your GUID
[h] last player who gave you health
[k] last player you killed
[l] your location (letter,number)
[n] your name
[r] last player who revived you
[p] last player you looked at
[s] health remaining
[w] name of current weapon
[t] ammo for current weapon
Sample shrubbot config
// silEnT mod - Sample Shrubbot.cfg file [level] level = 0 name = Prole flags = iBaPzI greeting = greeting_sound = [level] level = 1 name = Level 1 flags = iBaPzIW1 greeting = Level 1 [n] ^7just connected greeting_sound = [level] level = 2 name = Level2 flags = iBaPzIW1mx greeting = Level 2 [n] ^7just connected greeting_sound = [level] level = 3 name = Level 3 flags = iBaPzIW1mxpZSAURKrwlLdX259 greeting = Level 3 [n] ^7just connected greeting_sound = [level] level = 4 name = Level 4 flags = iBaPzIW1mxpZSAURKrwlLdX259kbcVNn34678 greeting = Level 4 [n] ^7just connected greeting_sound = [level] level = 5 name = Level 5 flags = * greeting = Level 5 [n] ^7just connected greeting_sound =