Skip to content
Hsilamot edited this page Jan 13, 2020 · 14 revisions

Contents

How does it work?

Setting not documented?

Configuration

Default configuration

How does it work?

Multiple servers and clusters are configured as separate elements in the configuration.

Keys are unique identifiers used to identify each server and cluster. They must be unique, not contain spaces or any special characters and ideally be short, descriptive and easy to remember and type.

Keys are in some cases used to indicate a relationship between two or more configuration elements: i.e. each server link to a cluster by referencing a particular cluster key.

Many features make use of these unique keys. Occasionally it is part of the user interaction as is the case with the !food <server key> or !admin <server key> ... commands.

When utilizing server management features, including start-, stop-, restart- and update-server commands, the server key is used to identify a particular running process. The server key configured for a particular instance must be appended to the ShooterGameServer.exe parameter list as -serverkey=yourserverinstancekey. An example of this is found in the defaultconfig.json file. Do not forget to append this parameter even when manually starting a server.

Setting not documented?

If there are any settings missing from this page you may check the xml descriptions that can be found in: https://github.com/tsebring/ArkBot/blob/master/ArkBot/Config.cs.

Configuration

Root

Key Description
botId Simple non-whitespace or special character ID to identify the bot (A-Za-z0-9).
botName Short name to identify the bot.
botNamespace Unique namespace URL given to the bot.
botUrl Website URL associated with the bot or ARK server.
appUrl External URL pointing to the Web App.
enabledChannels A list of channels where the bot will listen to and answer commands.
infoTopicChannel Channel where the topic is set to display information about last update, next update and how to use bot commands.
announcementChannel Channel where announcements are made (votes etc.).
tempFileOutputDirPath An existing directory path where temporary binary files can be stored (map-images etc.)
botToken Discord bot authentication token from https://discordapp.com/developers.
steamOpenIdRelyingServiceListenPrefix Http listen prefix for Steam OpenID Relying Party web service (requires a port that is open to external connections).
steamOpenIdRedirectUri Publicly accessible URL for incoming Steam OpenID Relying Party web service connections (requires a port that is open to external connections).
googleApiKey Google API key used for URL-shortening services. From https://console.developers.google.com/.
steamApiKey Steam API key used for fetching user information. From http://steamcommunity.com/dev/.
memberRoleName The name of the member role in Discord.
discord Discord bot settings.
userRoles Explicit steam user role assignment.
accessControl Per-feature role-based access control configuration.
disableDeveloperFetchSaveData Diable users in "developer"-role fetching JSON or save file data.
backupsEnabled Option to enable savegame backups.
backupsDirectoryPath Directory path where savegame backups are stored.
discordBotEnabled Option to enable/disable the discord bot component.
webApiListenPrefix Http listen prefix for WebAPI service (requires a port that is open to external connections).
webAppListenPrefix Http listen prefix for Web App (requires a port that is open to external connections).
webAppRedirectListenPrefix Http listen prefix(es) that are redirected to BotUrl.
powershellFilePath Absolute file path of the powershell executable (only used with Server.UsePowershellOutputRedirect).
useCompatibilityChangeWatcher Use timer based .ark save file watcher rather than the default (based on FileSystemWatcher).
ssl Configure Web App and WebAPI to use SSL with a free certificate from Lets Encrypt.
arkMultipliers Server specific multipliers.
savegameExtractionMaxDegreeOfParallelism Max degree of parallelism to use for savegame extraction. Change only if experiencing out of memory exceptions.
servers Server instance configurations.
clusters Cluster instance configurations.

Discord

Discord is configured under discord.

Key Description
discordBotEnabled This sets if the discord bot is enabled or disabled
accessControl This object contains channels and commands arrays which define access control to the bot from discord.
The channels object contains two members: public and private, each one contains an array with a list of the Discord Role Names that have access to that channel (public channel or private channel).
The Commands Object contains eleven members: admin, cloud, rcon, debug, commands, version, servers, linksteam, unlinksteam, whoami, disabled. Each member is an Array with a list of the Names of the Discord Roles that are allowed to use that command. You need to have the role name added on the Channels object before using it on the Commands object.
The special rolename @everyone can be used to allow access to all users.
botToken This is the access token you got from Discord's bot developer page
enabledChannels This is an Array with a list of the enabled channels for the bot, the name of the channel not the ID
infoTopicChannel
announcementChannel
memberRoleName This is the name (Not ID) of the role which members have on Discord
disableDeveloperFetchSaveData
steamOpenIdRelyingServiceListenPrefix
steamOpenIdRedirectUri This is the return URL to which steam openid will return the authenticated user back

Web App

Web App is configured under webApp.

Key Description
tribeLogLimit Limit for how many tribe logs are displayed in the Web App.
tribeLogColors Enable colored tribe log entries in the Web App.

User roles settings

User roles are configured under userRoles. Multiple roles can be configured and each contains a list of steam ids who belong to that role. Roles are used in accessControl to grant access to specific pages/features.

Example

"userRoles": {
    "role1": [ "steamid1", "steamid2", "..." ],
    "role2": [ "steamid1", "steamid2", "..." ]
  },

Access control settings

Access control is configured under accessControl. There is a predefined set of pages/features to grant access to. Each page/feature contains a list of roles that have access to that particular resource.

SSL settings

SSL is configured under ssl. Enabling SSL (HTTPS) is important to protect users against session hijacking. With SSL enabled the bot will attempt to issue a free SSL-certificate using Lets Encrypt. Once the SSL-certificate has been issued, it is valid for 90 days, after which it must be renewed.

Key Description
enabled Toggle ssl.
challengeListenPrefix Http listen prefix for ssl challenge request (external port must be 80).
name Friendly name of the certificate.
password Private password.
email Registration contact email.
domains Domain name(s) to issue the certificate for.
ports Ports to bind the ssl certificate to.
useCompatibilityNonSNIBindings Use non SNI SSL bindings for previous Windows OS (before Windows 8/2012).

ARK multiplier settings

ARK multipliers are configured under arkMultipliers.

Key Description
eggHatchSpeedMultiplier Pregnancy/incubation time multiplier.
babyMatureSpeedMultiplier Baby mature time multiplier.
cuddleIntervalMultiplier Multiplier for duration between cuddles.

Server instance settings

Each server instance is configured in a separate element under servers.

Key Description
key Unique key/name for this server instance.
cluster Optional key for the cluster instance this server is part of.
saveFilePath Absolute file path of the .ark save file to monitor/extract data from.
displayAddress Public server address visible to players.
ip The IP address used to connect to this server instance.
port The port used to connect to this server instance.
rconPort The port used to connect to this server instance over rcon.
rconPassword The password used to connect to this server instance via rcon.
serverExecutablePath Absolute file path of the server instance executable.
serverExecutableArguments Command line arguments used when starting the server instance.
steamCmdExecutablePath Absolute file path of the steamcmd executable.
serverInstallDirPath The directory path to force steamcmd updates to.
usePowershellOutputRedirect Use alternative powershell/file based output redirect for update progress notifications.
disableChatNotificationOnGlobalCountdown Disable chat notifications for this server instance when trigged by admin multiple server countdown (feature is used for compatibility with cross server chat).

Cluster instance settings

Each cluster instance is configured in a separate element under clusters.

Key Description
key Unique key/name for this cluster instance.
savePath Absolute path of the directory where cluster-files are stored. Cluster-files are extracted as part of the server update process triggered by savegame-file (.ark) watchers.

Default configuration

{
  "botId": "arkbot",
  "botName": "ARK Bot",
  "botNamespace": "http://www.arkbot.com/",
  "botUrl": "",
  "appUrl": "",
  "enabledChannels": [ "bot-commands" ],
  "infoTopicChannel": "bot-commands",
  "announcementChannel":  "bot-notifications",
  "tempFileOutputDirPath": "C:\\ArkBot\\temp",
  "botToken": "<token from discord>",
  "steamOpenIdRelyingServiceListenPrefix":  "http://+:60002/openid/",
  "steamOpenIdRedirectUri": "http://<your public ip or domain>:60002/openid/",
  "googleApiKey": "<google api key>",
  "steamApiKey": "<steam webapi key>",
  "memberRoleName": "ark",
  "discord": {
    "accessControl": {
      "channels": {
        "public": [ "@everyone", "admin", "developer" ],
        "private": [ "@everyone", "admin", "developer" ]
      },
      "commands": {
        "admin": [ "admin", "developer" ],
        "cloud": [ "admin", "developer" ],
        "rcon": [ "admin", "developer" ],
        "debug": [ "developer" ],
        "commands": [ "@everyone" ],
        "version": [ "@everyone" ],
        "servers": [ "@everyone" ],
        "linksteam": [ "@everyone" ],
        "unlinksteam": [ "@everyone" ],
        "whoami": [ "@everyone" ],
        "disabled": [ "@everyone" ]
      }
    }
  },
  "userRoles": {
    "admin": [ ]
  },
  "accessControl": {
  	"pages": {
		  "home": [ "guest" ],
		  "server": [ "guest" ],
		  "player": [ "self", "admin" ],
		  "admin-server": [ "admin" ]
  	},
  	"home": {
  		"myprofile": [ "user" ],
		  "serverlist": [ "guest" ],
		  "serverdetails": [ "guest" ],
		  "online": [ "guest" ],
		  "externalresources": [ "guest" ]
  	},
  	"server": {
	  	"players": [ "guest" ],
	  	"tribes": [ "guest" ],
	  	"wildcreatures": [ "admin" ],
	  	"wildcreatures-basestats": [ "admin" ],
	  	"wildcreatures-ids": [ "admin" ],
	  	"wildcreatures-statistics": [ "admin" ]
  	},
  	"player": {
		  "profile": [ "guest" ],
		  "profile-detailed": [ "self", "admin" ],
		  "creatures": [ "guest" ],
		  "creatures-basestats": [ "self", "admin" ],
		  "creatures-ids": [ "admin" ],
		  "creatures-cloud": [ "guest" ],
		  "breeding": [ "self", "admin" ],
		  "crops": [ "self", "admin" ],
		  "generators": [ "self", "admin" ],
		  "kibbles-eggs": [ "self", "admin" ],
		  "tribelog": [ "self", "admin" ]
  	},
  	"admin-server": {
	  	"players": [ "admin" ],
	  	"tribes": [ "admin" ],
	  	"structures": [ "admin" ],
	  	"structures-rcon": [ "disabled" ]
  	}
  },
  "disableDeveloperFetchSaveData" :  false,
  "backupsEnabled": false,
  "backupsDirectoryPath": "C:\\ARK Servers\\Backups",
  "discordBotEnabled": true,
  "webApiListenPrefix": "http://+:60001/",
  "webAppListenPrefix": "http://+:80/",
  "webAppRedirectListenPrefix": [
  ],
  "powershellFilePath": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
  "useCompatibilityChangeWatcher": true,
  "ssl": {
    "enabled":  false,
    "challengeListenPrefix": "http://+:80/",
    "name": "ark-bot-ssl",
    "password": "secret123",
    "email": "youremail@yourdomain.com",
    "domains": [
      "app.yourdomain.com"
    ],
    "ports": [ 443, 60001 ],
    "useCompatibilityNonSNIBindings":  true
  },
  "arkMultipliers": {
    "eggHatchSpeedMultiplier": 1.0,
    "babyMatureSpeedMultiplier": 1.0,
    "cuddleIntervalMultiplier": 1.0
  },
  "savegameExtractionMaxDegreeOfParallelism":  null,
  "servers": [
    {
      "key": "server1",
      "cluster": "cluster1",
      "saveFilePath": "C:\\ARK Servers\\server1\\ShooterGame\\Saved\\SavedArks\\TheIsland.ark",
      "displayAddress": "myarkserver.domain.com:27015",
      "ip": "127.0.0.1",
      "port": 27015,
      "rconPort": 27020,
      "rconPassword":  "password",
      "serverExecutablePath": "C:\\ARK Servers\\server1\\ShooterGame\\Binaries\\Win64\\ShooterGameServer.exe",
      "serverExecutableArguments":  "TheIsland?listen?Port=7777?QueryPort=27015?RCONPort=27020?RCONEnabled=True?SessionName=Server1?ServerPassword=?ServerAdminPassword=password?SpectatorPassword=password?MaxPlayers=5 -culture=en -nosteamclient -clusterid=cluster1 -ClusterDirOverride=\"C:\\ARK Servers\\cluster1\" -serverkey=server1",
      "steamCmdExecutablePath": "C:\\SteamCmd\\steamcmd.exe",
      "serverInstallDirPath": "C:\\ARK Servers\\server1",
      "usePowershellOutputRedirect": false,
      "disableChatNotificationOnGlobalCountdown": false
    },
    {
      "key": "server2",
      "cluster" :  "cluster1",
      "saveFilePath": "C:\\ARK Servers\\server2\\ShooterGame\\Saved\\SavedArks\\TheIsland.ark",
      "displayAddress": "myarkserver.domain.com:27016",
      "ip": "127.0.0.1",
      "port": 27016,
      "rconPort": 27021,
      "rconPassword":  "password",
      "serverExecutablePath": "C:\\ARK Servers\\server2\\ShooterGame\\Binaries\\Win64\\ShooterGameServer.exe",
      "serverExecutableArguments":  "TheIsland?listen?Port=7779?QueryPort=27016?RCONPort=27021?RCONEnabled=True?SessionName=Server2?ServerPassword=?ServerAdminPassword=password?SpectatorPassword=password?MaxPlayers=5 -culture=en -nosteamclient -clusterid=cluster1 -ClusterDirOverride=\"C:\\ARK Servers\\cluster1\" -serverkey=server2",
      "steamCmdExecutablePath": "C:\\SteamCmd\\steamcmd.exe",
      "serverInstallDirPath": "C:\\ARK Servers\\server2",
      "usePowershellOutputRedirect": false,
      "disableChatNotificationOnGlobalCountdown": false
    }
  ],
  "clusters": [
    {
      "key": "cluster1",
      "savePath": "C:\\ARK Servers\\cluster1"
    }
  ]
}