VBot is a program that is utilised by the TF2Maps community, accessible via the steam group chat and discord channel. Its primary purpose is to improve the capability of the online chatroom as well as improve the development process for members.
VBot allows users to actively add their Maps into the chat-bot’s list, and all maps in the list can be recited anytime through a command. Furthermore VBot will actively connect to TF2Map’s Game Servers and remove maps from the list when they are ran, and notify the user through a private message (as well as post in the chatroom on map-change to encourage users to join).
VBot’s module-based design allows for the easy integration and isolated development of numerous functions w/o causing disturbance to the primary features, the Bot has a MOTD module that broadcasts a message hourly to the chatroom, a Saved Replies Module (e.g: /maps replies http://vbot.site/) and an online search module for the Team Fortress 2 development reference site as well as TF2maps.net itself.
The design of the bot allows for a single “UserHandler” to handle and process requests on multiple platforms simultaneously (and has been integrated to also work with Discord) as instead ‘InterfacePlatforms’ normalize the data across platforms and serve as a bridge. VBot also hosts a website at: http://vbot.site/ that allows users to view the maps currently in the queue.
This program is primarily written, maintained, deployed and updated by Ben "Fantasmos" Krajancic, all questions should be sent to him.
Maxine Dupis https://github.com/maxdup was responsible for developing the initial modules and command system, however due to issues with github the initial commit was made under fantasmos' account at: https://github.com/TF2Maps/SteamBotLite/commit/fe204c423372e8038c1a77ded378a22630d8522a
A general idea of the code is:
There are "interfaces" to external services (Steam and Discord Currently) There are "Chathandlers" which will respond to messages through events. (VBot being the major one)
Interfaces can be linked to chathandlers. Interfaces will translate the data into an abstract form for the chathandlers to do work on, similarly chathandlers will fire events in response TO the interfaces, in a similarly abstract form. A cool thing is a single chathandler can be linked to many interfaces.
In bin/example there are several files.
config.json is used by the VBot Userhandler, i've provided an example configuration for it. If there's a module loaded in VBot that isn't in the config it'll throw an error upon initialisation.
The files in applicationconfigs are used for "Interfaces" to login, as well as restrict their chat. They are named (and case-sensitive) to the classes that load them. For example "SteamAccountVBot" class will load SteamAccountVBot.json
In examples/bins/ a set of configuration and example files are provided for VBot. Here is an explanation for them. Knowledge of VBot's capabilities is assumed in the following explanations.
The config.json provides configuration for VBot's various modules. This section is organised per module.
HeaderfileName/TrailerFileName: VBot hosts a website. The webpage is generated by combining: header.html, a generated html, and the trailer html. These values provide the files which are the header and trailer.
FilesDirectory: The folder which contains the header and trailer file
Address: The address to run the webserver. http://*:80 is good for default.
CSSPath: The path of the CSS file
THis module handles the username and status displayed of VBot. The values are self explanatory
ServerMapListURL: This is the URL used to check if a map is already uploaded
MaxMapList: How many maps are shown when !maps is used
These are now unused, but are kept in as these modules could be reactivated one day if needed and are needed for example.
UpdateInterval: How frequently to check for server changes
Servers: Unused value, configuration is in module configuration.
Unsure what this is used for TBH.
In the configuration files, there is the VBot directory which has further configuration for each module, and also saved data.
This file contains data used for making searches using VBot. The search module works by loading the contents of a webpage (which is generated by query string, eg "!VDC " will make a url consisting of then spidering the result using spiderprefix and spidersuffix.
Examples provided demonstrate how to include a google search of a website.
These modules can be configured through commands in VBot, therefore it is not needed to be discussed here.
The other modules are either there for consistency, or saved data and do not need to thought about.
Httpinterface is used to communicate with Discord through the webhook API. Setup an application at: https://discordapp.com/developers/ and learn about webooks at: https://support.discordapp.com/hc/en-us/articles/228383668-Intro-to-Webhooks
Some values are unused, and have defaults set. The others are:
Webhook: When the Discord Account is loaded, it will post "Hello World" to this webhook.
Token: The discord API token. Get one at: https://discordapp.com/developers/applications/222204046260305922/information
Channels: The channel id's to track, and webhooks used to respond to the channel with. The ID is found in discord by right clicking the channel and selecting "Copy ID". Webhooks are made in the usual manner on discord.
Broadcast: The webhook used for broadcast messages.
PrivateMSGS: As VBot is supposed to send Private messages but can't do so using webhooks, what channel should be used to send private messages
Whitelist/Blacklist: Unused
Admins: ID's of roles to treat as admins. Retrieve by posting @ to discord.
This provides an example of how to login to a steam account, most fields are self explanatory.
Whitelist is an array of groupid's used to automatically join steam chat rooms.
VBot running on linux is able to run bash scripts. This directory contains the files which can be run.
Simply download the git repo, and compile the program, you will need to copy the files from bin/example into the build directory.
First install mono, instructions are at: https://www.mono-project.com/docs/getting-started/install/linux/
You will then need to install mono-devel (to compile) and git (to download the repo)
sudo apt install mono-devel
sudo apt install git
Then you need to download the project
git clone https://github.com/TF2Maps/TF2MChatBots.git
cd TF2MChatBots
git pull You need to get the compiler
sudo apt-get install msbuild
The software utilises a variety of nuget packages, so you need to install nuget, then run it to retrieve needed packages
sudo apt install nuget
nuget restore
Then you can compile the bot. There will be errors as the test suite will fail to compile, but the main project which outputs the executable needed to run the software will succeed.
msbuild /p:Configuration=Release
You then need to copy files from bin/example into bin/release, or use your own configuration files.
cp -r bin/example/* bin/Release
Once you configire the software by editing the files, it can be run with:
cd bin
cd Release
mono SteamBotLite.exe