196 ratings
[2016 Update] Automatically Join Multiple Steam Group Chats when Computer Starts or On-Demand
By class101 [ѕtеαмdеcκ]
This guide will show you how you can join multiple steam group chats at the computer startup or on-demand with one little file and without applying a single modification to the original Steam files

Guide version : 1.1 (latest changes)
Guide difficulty : Easy
Requirements : Any Microsoft Windows supported by Steam
Updates : Feel free to vote and favorite, there is no browsable Steam Client section
Advantages : Auto-join multiple channels when computer starts (For 1 chat you do not need this, just add the steam:// command to the shortcut path)
(Sorry for MAC and Linux users, I don't use Steam on, if you plan to build a guide let me know and I will link it)
   
Award
Favorite
Favorited
Unfavorite
1: Creating the vbs script
  • Hit the + keys of your keyboard



  • In the Run Window, type : notepad and hit



  • Copy and paste the the code below in the new Notepad file
    MIRROR
    The code on pastebin http://pastebin.com/Zg9dv0xn

    ''' Multiple Chat Auto Joiner for Steam ''' v1.1 '''  http://goo.gl/fJd12 ''' by class101 ''' Configurable settings CPU_THRESHOLD = 25 ' From 0 to 100%, joining chat will only be allowed when steam cpu usage is below this threshold ' TIP: 25 is recommended threshold, 5 was in 1.0 and was a bit too low but if you notice the script is slow joining, increase the value, the goal is to increase that value ' until you notice you are missing chat chanels it did not successfully joined. GLOBALTIMEOUT = 150 ' In seconds, the maximum time the script executes THDELTA = 3000 ' In milliseconds, the time the script sleeps waiting for threads > 30 JOINDELTA = 1500 ' In milliseconds, the time the script waits for Steam cpu usage < 5% ''' DO NOT TOUCH BELOW UNTIL THE NEXT CONFIGURABLE SECTION ! tout = 0 thCount = 0 sl = 100 last = 0 num = 0 onDemand = False Set Shell = CreateObject("WScript.Shell") On Error Resume Next Err.Clear Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") If Err.Number <> 0 Then MsgBox "Make sure the Windows Management Instrumentation service is set to start automatically" & VbCrLf & VbCrLf & "(Hit Windows + R => Run services.msc => set to Automatic a service called Windows Management Instrumentation, shortname is Winmgmt)", vbOKOnly, "SteamJoinChats.vbs -  http://goo.gl/fJd12" WScript.Quit 0 End If On Error Goto 0 If GetProcess("Steam.exe") Is Nothing Then ' If Steam is not loaded start it On Error Resume Next Err.Clear Shell.Run "steam://" ' Simplest way to start Steam on Windows If Err.Number <> 0 Then MsgBox "Steam is not installed, get Steam at https://steamhost.cn", vbOKOnly, "SteamJoinChats.vbs -  http://goo.gl/fJd12" WScript.Quit 0 End If On Error Goto 0 Else onDemand = True End If If Not onDemand Then Do WScript.Sleep sl On Error Resume Next Err.Clear thCount = GetProcess("Steam.exe").ThreadCount If Err.Number <> 0 Then WScript.Quit 1 End If tout = tout + sl If tout > GLOBALTIMEOUT * 1000 Then MsgBox "The script for auto joining chat channels has timeout after waiting " & GLOBALTIMEOUT & "s." & VbCrLf & VbCrLf & "(You can change the value GLOBALTIMEOUT actually set to " & GLOBALTIMEOUT & ")", vbOKOnly, "SteamJoinChats.vbs -  http://goo.gl/fJd12" Exit Do End If If thCount - last <= 0 And thCount > 30 Then If num > (THDELTA / sl) Then Exit Do End If num = num + 1 Else num = 0 End If last = thCount Loop While True ' Steam seen to be fully loaded with approximatively 30 threads or 510 handles (may change) If tout > GLOBALTIMEOUT * 1000 Then WScript.Quit 1 End If End If On Error Resume Next Set PerfProcess = WMI.Get("Win32_PerfFormattedData_PerfProc_Process.Name='Steam'") Err.Clear 'MsgBox "Script executed" ''' Configurable chats, they are those used by class101 for demonstration purpose, feel free to edit to your needs 'WaitSteam() 'Shell.Run "steam://friends/joinchat/103582791434377659" ''' testgroup-01 WaitSteam() Shell.Run "steam://friends/joinchat/103582791434377662" ''' testgroup-02 WaitSteam() Shell.Run "steam://friends/joinchat/103582791434377665" ''' testgroup-03 WaitSteam() Shell.Run "steam://friends/joinchat/103582791434377668" ''' testgroup-04 WaitSteam() Shell.Run "steam://friends/joinchat/103582791434377669" ''' testgroup-05 WaitSteam() Shell.Run "steam://friends/joinchat/103582791434377672" ''' testgroup-06 WaitSteam() Shell.Run "steam://friends/joinchat/103582791434377673" ''' testgroup-07 WaitSteam() Shell.Run "steam://friends/joinchat/103582791434377675" ''' testgroup-08 WaitSteam() Shell.Run "steam://friends/joinchat/103582791434377676" ''' testgroup-09 WaitSteam() Shell.Run "steam://friends/joinchat/103582791434377679" ''' testgroup-10 'WaitSteam() 'Shell.Run "steam://friends/joinchat/103582791429848363" ''' SteamPowered Users (SPUFU) 'WaitSteam() 'Shell.Run "steam://friends/joinchat/103582791434752700" ''' Banished 'WaitSteam() 'Shell.Run "steam://friends/joinchat/103582791433982613" ''' King Arthur's Gold 'WaitSteam() 'Shell.Run "steam://friends/joinchat/103582791433982354" ''' Project Zomboid 'WaitSteam() 'Shell.Run "steam://friends/joinchat/103582791433980119" ''' PAYDAY 2 'WaitSteam() 'Shell.Run "steam://friends/joinchat/103582791433588849" ''' FTL: Faster Than Light 'WaitSteam() 'Shell.Run "steam://friends/joinchat/103582791434601223" ''' Godus 'WaitSteam() 'Shell.Run "steam://friends/joinchat/103582791433992766" ''' Starbound official 'WaitSteam() 'Shell.Run "steam://friends/joinchat/103582791433184424" ''' Skyrim 'WaitSteam() 'Shell.Run "steam://friends/joinchat/103582791433984807" ''' Kerbal 'WaitSteam() 'Shell.Run "steam://friends/joinchat/103582791433471177" ''' Terraria 'WaitSteam() 'Shell.Run "steam://friends/joinchat/103582791430075519" ''' TF2 'WaitSteam() 'Shell.Run "steam://friends/joinchat/103582791433224455" ''' Dota 2 'WaitSteam() 'Shell.Run "steam://friends/joinchat/103582791434277245" ''' Steam Trading Card Group 'WaitSteam() 'Shell.Run "steam://friends/joinchat/103582791434672565" ''' Steam Universe If Err.Number <> 0 Then MsgBox "Steam is not installed, get Steam at https://steamhost.cn", vbOKOnly, "SteamJoinChats.vbs -  http://goo.gl/fJd12" End If WScript.Quit 0 Function GetProcess(name) Set GetProcess = Nothing Set procList = WMI.ExecQuery ("Select * from Win32_Process Where Name = '" & name & "'") For Each process In procList Set GetProcess = process Next End Function Sub WaitSteam() last = 0 tout = 0 Do WScript.Sleep sl PerfProcess.Refresh_ tout = tout + sl If PerfProcess.PercentProcessorTime <> "" Then If ( PerfProcess.PercentProcessorTime * 1000 ) < (CPU_THRESHOLD * 1000) Then If last >= (JOINDELTA / sl) Then Exit Sub End If last = last + 1 Else last = 0 End If End If If tout > GLOBALTIMEOUT * 1000 Then WScript.Quit 1 End If Loop While True End Sub



  • In the File menu of Notepad, hit Save As...



  • In the Save As window, navigate to your Desktop, in File name type: SteamJoinChats.vbs and Hit or Click the Save button



    The file is now created and ready to run, you can now proceed to the next step, testing the file
2: Testing the vbs script
What is interesting with VBScript .vbs files is that they are recognized in all versions of Microsoft Windows and there is not specific dependencies to install.

For manual testing purpose you can start the script by:
  • Just Double-Click SteamJoinChats.vbs
    or
  • Right-Click SteamJoinChats.vbs and Select Open

The script is made so that if Steam is not running, the script starts it and if Steam is already running the script will just automatically the configured Chats, for instance they are mine but the goal of this guide is that you set yours.

Now that you have validated it works (if any problem let me know in Comments or the Chat channels you have just joined), you can now proceed to the Next step, configuring your own Chat channels
3: Configuring your own chat channels
Basically the hardest part here is to identify the IDs of the Steam groups you would like the script automatically joins. The group id is a number that is 18 characters long and is randomly generated by Steam at the group creation, so it is a stable number as long as the group is not deleted by its owner

The group ID is sometimes showing in Steam as a literal name but that is not the right ID, we need the 18 numbers long version of the ID.

To get it for your groups, follow the tips below :
  • In Steam, Locate the page of the group you would like to automatically join, then Right-Click anywhere on the page and select View Source...



  • Steam should open the page source with your default editor for .txt files



  • Hit + to open the Search function of your text editor and search for : steam://friends/joinchat/



  • Congratulations, you have just found the right ID 103582791434356213 used by Steam to join the chat

  • Now just remains to edit our SteamJoinChats.vbs with the ID you have just found

  • Right-Click the SteamJoinChats.vbs that you have created previously and select Edit
    (It should be on you Desktop if you have followed the guide)



  • And finally add the following just before WScript.Quit 0
    (Don't forget to replace 103582791434356213 by the ID you have found for your group)
    WaitSteam() winShell.Run "steam://friends/joinchat/103582791434356213"



    Important : It is important to keep WaitSteam() before each .Run calls to let Steam the time to join multiple channels

    Save the file and you are done setting up your first group !
4: Storing the script to a safer place
Now that I showed you how to create SteamJoinChats.vbs on the Desktop, this is probably tempting for you to copy paste the file everywhere you need, but there is something better to do.

Find a place like C:\ or D:\ or X:\ or C:\GAMES where you will paste once SteamJoinChats.vbs
(If you tell me, I'm using X:\GAMES\)

The advantages is that the file is less subject to accidental deletions from the Desktop and it resides in a single place so that you will be able later to Right Click and Create Shortcut and select a Custom Icon for it.

This last shortcut will be helpful for the next steps, to set the script to execute upon Windows startup
5: Creating the shortcut of the vbs script
This is a simple step you should know with Microsoft Windows :
  • Locate where you have stored SteamJoinChats.vbs, Right Click the file and select Create shortcut
    (Tip: I don't recommend to store SteamJoinChats.vbs on the Desktop see the previous guide section if you missed it, personnally I store it in X:\GAMES\ as shown in the picture below)



  • You now have a shortcut to the file that looks like :



  • Now make it looks like better, Right Click => Properties => In the Shortcut tab Hit the Change Icon... button



  • In the Change Icon Window, Hit the Browse button



  • In the New Window, Locate the Steam.exe executable of your Steam installation and hit or hit the Open button
    (It is usually located in C:\Program Files (x86)\Steam\)



  • Then select the Steam icon showing up in the Change Icon window and hit OK



  • And finally rename the SteamJoinChats.vbs - Shortcut to Steam


Congratulations you are now ready to make the script automatically starts when the computer does, follow the next section to do so.
6: Running the script when computer starts
Now you have a shortcut to the vbs script the next is very easy :
  • First you need to disable the Steam option 'Run Steam when computer starts' because this will be the script's job, leave the option Unchecked and hit OK



  • Hit the + keys of your keyboard



  • In the Run Window, type : shell:Startup and hit (It works in all Windows)



  • Notice the Windows Explorer opened a new window that is set in the Startup folder, basically any shortcut pasted in this directory will be executed when you log into your Windows session and ONLY your current session. This is an option present in all versions of Microsoft Windows.
    Simply paste the Steam shortcut you have previously created in the guide in this Startup directory as shown below (Notice I did the same for my mice battery indicator and a suite of tools called LiberKey)



  • Optionally, if you are interested to know under which user folder account you have been sent to after hitting OK in the Run window, you can highlight the Address bar and the account name shows up after C:\Users\ (or C:\Documents and Settings\ under XP)
    In the picture below you can notice mine is Administrator, this is not really important to know, this is much to explain where you have been sent to with the shell:Startup shortcut

7: Running the vbs script On-Demand
Now that you have followed all the guide section you should have one shortcut to the vbs script called Steam, just Copy and Paste it on your desktop, start menu, task bar etc...



You will be able the to insta-join all the channels by just double clicking the Steam icon, even if Steam is already running it will just attempt to join all your channels, this will be helpful in the future if by any chance on Startup the script missed to join all your channels.

If Steam is not running, the script will attempt to run it and will join the channels when Steam is ready , if Steam is already running the script does not attempt to start it and joins the channels directly
Frequently Asked Questions
Is it legal ? Will I be banned for this ?
As far as I know you don't have to worry about this, HTML sources of a website are free to look for anyone and Valve permits the use of switches like steam://, they are developer switches documented on Valve website, as long as you don't abuse of the developers switches this should not be a problem.

On which operating systems did you tested your script ?
On Windows 8 Pro and Windows XP SP3

I see your guide is written in English, is it compatible with my Windows in a localized language ?
Sure

Why did you made it with VBScript, do you know this could be done with a .bat Batch script too
Technically to load multiple channels at startup, you have to find a way to know when Steam is ready and not busy. The first idea that came to mind was finding a specific window title but this was too problematic because of the window title are localized in Steam and so on this is not a reliable way to know when Steam is ready for entering chat. After a few tries I have found out that steam uses a few thread at login prompt and the count goes approximately up to 40 threads when it is completely loaded and entering the chat. This requires a more advanced scripting language to access WMI, so VBscript is for me the easiest and stabler way to determinate when Steam is truly ready to execute steam:// commands.

Sometimes not all the channels I have configured are joined, do you know why ?
I improve the code to lower the chance you get this problem, technically now in code v0.3 it has less chance to happen than earlier versions, you can try slower the script by changing THDELTA = 3000 and JOINDELTA = 1000 to THDELTA = 4000 and JOINDELTA = 2000

Could you explain precisely what the script does ?
To know when Steam has more chance to be ready the script checks the thread count that Steam.exe uses, if the count is below 30 threads the script waits a maximum of 150s.
When the script detect 30 threads running it starts a loop with a simple algorithm, the loop is waiting for a 3s. period without a single thread created, at this point it ensures Steam has loaded and is about to enter a sleeping state. So technically waiting for the threads takes 3s. minimum but it will most likely wait more in reality because Steam often requires 10-20s. to start.
Once granted, the joins are started, between each channel join, a loop ensures Steam CPU usage is below 5% for 1s., so for joining chats the script will wait a minimal time of 1s. betweens joins but can take more depending on your CPU speed.
That is probably the simplest way to achieve this, no dependencies, nothing is changed in Steam, only Microsoft WMI service is used to collect Steam.exe resources usage.
I haven't found a stabler way to do this but I'm open to feedbacks so you are welcome to share your spell =)

Why did you do that many typos ?
I'm French sorry, I strive my best to make the guide clean, let me know anything you would like to see changed you are Welcome and I will learn things =)
Latest Changes
Guide - Workaround Valve's bright boycott idea hxxp://goo.gl (Jan. 21 2014)
version 1.1 - Option to speed-up chat channel joining, tied to Steam CPU usage from 0 to 100% (December 30th 2015)
version 1.0 - Script updated, should be the last version published, even more stable than 0.3 (December 23th 2013)
Guide - Some guide sections updated with v0.3 changes (June 21th 2013)
version 0.3 - Script delays improvements for joining multiple channels (June 20th 2013)
version 0.2 - Some XP and Win8 compatibility changes, code error handlers (June 19th 2013)
version 0.1 - Initial guide creation (June 18th 2013)
26 Comments
SHARKE BYTE 27 Jun, 2017 @ 1:03am 
Thanks!

:OTTTD_Shark::byte:
Veterans Until Valhalla 6 Jan, 2017 @ 8:10pm 
WHAT HAPPENED?
:steambored:
Tony 19 Oct, 2016 @ 6:00am 
Is there a way to let it scan trough the groups you are in and join all of those group chat rooms?
poopoohgoboom 11 Mar, 2016 @ 11:14am 
Thank you so much. I'd been looking for away to do this. I did however run into a small inconvenience. So I keep all my programs that I regularly use on my taskbar and I keep my desktop empty. When I move the shortcut to the taskbar, the icon changes to Microsoft Windows Based Script Host icon. How do I force the shortcut to retain the steam icon when I move it to the taskbar? I am running Windows 10. Any help would be appreciated.
medic 26 Jan, 2015 @ 11:18am 
Thanks for the script.

Also, it is simply insane that this is not built into Steam. People have been asking for this since when? 2008? Yes I see a thread from 2008. Come on Valve, this would at most take a few hours to implement...
Toasty 8 Dec, 2014 @ 10:22pm 
I created a similar batch file. It creates an array of chat room IDs, checks if Steam is running (and if not, starts Steam and waits 15 seconds), then opens each chat room in the array. You can view it here: http://pastebin.com/tjcrzgmx
RestrainedRaptor 7 Dec, 2014 @ 10:00am 
It's a shame we can't get an auto-join feature built into Steam properly, but this is a good start.

I modded your script to use an array of group IDs instead of copy-pasting code. Feel free to use it! http://pastebin.com/N1rqHGz3
i am onion 22 Oct, 2014 @ 9:50am 
I figured it out yesterday
Thanks though.
(and you are right it is id7. id8 is winui2)
class101 [ѕtеαмdеcκ]  [author] 22 Oct, 2014 @ 5:18am 
hmm if I remember I have slightly modified the id of the create guide link you find in other hubs, can't remember for sure the ID but if I remember it was 7
i am onion 21 Oct, 2014 @ 10:16am 
how did you post a guide for the steam client