This is another Steambot. But what is a Steambot ? Well, it's a steam account, being managed by a bot. That's it.
What does it really means ? Well, you can do everything a humain will do, but fast and without the needs of a... humain !
Right now, it can do automatic trade offer, change his name, reply to messages, etc.
Many more plugins lays around Alliedmodders. Search a bit.
Please read :
You need a valid steam account, it's seems obvious, but a lot of people message me and send me text like "duh, doesn't work, I didn't put my username nor password, but I still wonder why it doesn't work.".
It's a bot it means, it require real steam logins. This program just does actions that a normal human have to do it itself. It saves times. Automate things.
Everything is fully automatic
Support mobile confirmation
Too much things, I can't list them all, and if you find something that he do not, well, message me.
*** NOTE ****
ASteambot is written in C#, using .NET framework .NET Core (starting from version V11). Therefor, it will run on both Windows AND Unix system.
ASteambot will require a connection to a DATABASE server and also need one TCP PORT OPEN !
Usually, you want to use 27018, if you have no game server running on port 27018. If you don't know what is, ask your host. He will explain you how all this work.
//Your bot's account steam user name, THE ONE YOU USE TO LOG IN !
//Your bot's account steam password
//Your steam API key, that can be found here : https://steamcommunity.com/dev/apikey
//SteamID of admins; unlock various feature. Exemple : STEAMID_X:Y:ZZZZZ,STEAMID_X:Y:ZZZZ2,STEAMID_X...
//The database server IP address or DNS
//The database server username
//The database server password
//The database name
//The database server port, usually : 3306
//TCP server settings, I personnally use port 4765, it works great.
//The TCP password, it can be ANYTHING you want, for exemple : 567dcavieg
//[COLOR="red"][B]This is not necessary anymore![/B][/COLOR] Arkarr's server API key, get it from here : https://arkarrsourceservers.freeddns.org/apikey \nYOU NEED THE WHOLE THING \nExemple :HGUIHZXXXXXX43653HJKVUZFTUZ567
//Disable or enable market scan (YES/NO):
//Enable or disable welcome message.\nCreate some crash for some OS, I don't know why (YES/NO):
//Enable or disable automatic updates, might crash on Linux (YES/NO):
//Display location of ASteambot in the website (YES/NO)\nhttps://arkarrsourceservers.freeddns.org/map/
//The port from where the HTTP requests should be handled
This list is incomplete :
[X] broadcast chat from specified server to admin requesting it. Hook to broadcast and stop. Cfg file to configure servers ip port rcon. Ability to interact with ingame chat through bot.
[X] report calls to all admins. On calls, display : Callid, server, caller id, reported id, connect url, hook to open chat broadcast. Also broadcast à message when à call is handled with who handled it.
[X] hook to broadcast a message all admins.
[X] display list of servers with map and players with à hook (!servers !list).<id> <hostname> <map> <players>.
[X] help to display all available command.
[X] show steam status (!steamstats)
[X] some high level power allowed for only 1 steamid like list friendlist, delete friend, join group, add friend. Steamid from cfg file
[X] allow all incoming trades (out empty). Allow outgoing trades to specific steamid (high lvl power)
[ ] on call, check if reported steam has already been banned in sourceban and display if yes.
[ ] Ability to invite to group and add as friend a specific steamid (!invite STEAM_X:X:XXXXX) for high power only
[ ] calls statistics on who handled most calls over time (!topcall = all time top, !callweek = top of week, !call june,) displayed with id, nick and or steam, number of handled calls
[ ] ability to set bot idle to any game ? (high power lvl)
[ ] !review STEAMID or select player from servers list to check his account history / steamrep / friends bans / VAC / economy / community ban
[ ] !google <request> will print out a link to first google reply to this request
[ ] ability to set custom triggers with custom replies from a cfg file
[ ] log everything into mysql ?
[ ] On calls, add ability to admins to tell the bot to add original caller to his friendlist to open a direct chat between admin and caller, then delete the caller from friendlist when the chat is closed by admin.
[ ] So there should basicaly be 3 levels of rights :
- Owner (from steamid)
- admins (from steamgroup)
- regulars (added by admin to handle call)
Copyright (c) ASteamBot Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
God... Another steambot ? Really ?
Yeah, but wait, there is more ! This one provide a simple interface but complete (okay, well, not yet, still in version 1.0) through TCP messages. So, the bot warn in REAL-TIME when something happen, as exemple : When someone finsih a trade with him ! You might want to give a close look at the "Features" section !
But before continuing I would like to say this :
This bot is been made by Jessecar96 and I slighty modified it to provide such small features (like trades end handling and a speak module, I want to add more in the futur, but I need time). Also this bot is made in C#, so, Mac (heheehhe) and Linux (sorry D;)https://forums.alliedmods.net/showpo...&postcount=124 can already quit. Except if you find a way to run it on Wine or something else.
Also it's a pre-release, many people pushed me to publish this as fast as possible. So, don't except a lot of features YET. But, the things who are already implemented are working fine !
So, why the f. should I use that thing ?
Because like I said 84134803214 times above, this thing have a (simple, okay ?) interface, where you can handle the trades, etc... to create things on your server, so now. Let's said I would like to display a nice message each time someone has finished to trade with the bot, well, you can, take a look at the template plugin (availables in the downloads.)
A progression / feature request can be found here !
No commands No Cvar
What did you excepted ? It's a steambot !
The admin ("MySteamID" in Setting.json) can retrieve ALL items of the bot by typing "ALL" in the trade chat !
Also, you can write "LIST" in the chat window, and he will display is inventory.
1) Download the zip archive (The sources are included inside, also the compilled binaries)
2) Go to "SteamBot_Arkarr\SteamBotInterface\bin\Debug" and edit Serttings.json with your favorite text editor.
3) Start the bot by double-clicking on the SteamBotInterface.exe executable file.
5) Enjoy !
What I plan to do ?
- a hudge list of features. I don't want to write them down now, will take me all the after-noon.
REQUEST_CONNECTION - He has to be the first TCP paquet to send to the bot (Right after the connection is made), it's basically just a subscriber, like : Yep, I want you (steambot) to send me all the other event !
TRADEOFFER_ENDED - Called when someone finish (confirm through his emails) the trade offer.
Exemple : TRADEOFFER_ENDED|STEAM_0:1:XXXXXXX|5000,5000, 5001|5002,
those numbers (5000, 5001, etc...) are item definition index. For exemple, here, it's scarp, reclaimed and raffined metal who are traded. The left part is the items that the BOT will have and on the right, it's the items that the USER will have.
Template ? Yeah, this is how you 'speak' with the bot, he send you event, and you handle them.
Here is a template about how to create, and communicate with the bot.
public Plugin myinfo =
name = "[ANY] TCP connection to Steambot",
author = PLUGIN_AUTHOR,
description = "A template to create a simple TCP connection with the steambot",
version = PLUGIN_VERSION,
url = "http://www.sourcemod.net"
public void OnPluginStart()
CVAR_SteambotServerIP = CreateConVar("sm_steambot_server_ip", "XXX.XXX.XXX.XXX", "The ip of the server where the steambot is hosted.");
CVAR_SteambotServerPort = CreateConVar("sm_steambot_server_port", "11000", "The port of the server where the steambot is hosted, WATCH OUT ! In version 1.0 of the bot, the port is hardcoded and is 11000 !!");
CVAR_SteambotTCPPassword = CreateConVar("sm_steambot_tcp_password", "Pa$Sw0Rd", "The password to allow TCP data to be read / send (TCPPassword in settings.json)");
public void AttemptSteamBotConnection()
connected = false;
clientSocket = SocketCreate(SOCKET_TCP, OnClientSocketError);
PrintToServer("Attempt to connect to %s:%i ...", steambotIP, StringToInt(steambotPort));
SocketConnect(clientSocket, OnClientSocketConnected, OnChildSocketReceive, OnChildSocketDisconnected, steambotIP, StringToInt(steambotPort));
public OnClientSocketConnected(Handle socket, any arg)
We NEED to send the data 'REQUEST_CONNECTION' ONCE and AT THE FIRST CONNECTION so the steambot register us in his client list.
PrintToServer(">>> CONNECTED !");
Format(data, sizeof(data), "%sREQUEST_CONNECTION%s", steambotPassword, map);
SocketSend(clientSocket, data, sizeof(data));
//Destroying the reconnect timer on failure :
if(TimerReconnect != INVALID_HANDLE)
TimerReconnect = INVALID_HANDLE;
public OnClientSocketError(Handle socket, const int errorType, const int errorNum, any ary)
connected = false; //Client NOT connected anymore, this is very important.
LogError("socket error %d (errno %d)", errorType, errorNum);
public OnChildSocketReceive(Handle socket, char receiveData, const int dataSize, any hFile)
//Data received by the bot, warning, password included (pretty dumb ?) !
ReplaceString(receiveData, dataSize, steambotPassword, "");
//Password removed, priting the message :
PrintToServer(">>> %s", receiveData);
public OnChildSocketDisconnected(Handle socket, any hFile)
//Connection to steam bot lost !
PrintToServer(">>> DISCONNECTED !");
connected = false;