C>S 0x0C SID_JOINCHANNEL
|Transport Layer:||Transmission Control Protocol (TCP)|
|Application Layer:||Battle.net v1 TCP Messages (SID)|
|Direction:||Client to Server|
|Used By:||Starcraft Original, Starcraft Broodwar|
Starcraft Shareware, Starcraft Japanese
Diablo Retail, Diablo Shareware
Diablo II, Diablo II Lord of Destruction
Warcraft II BNE, Warcraft III Reign of Chaos
Warcraft III The Frozen Throne
(does not include protocol header)
Joins a channel after entering chat.
The Channel name must be no greater than 31 characters, otherwise it becomes trimmed by Battle.net.
||NoCreate join: This will only join the channel specified if it is not empty, and is used by clients when selecting a channel from the channels menu. If the channel is empty, Battle.net sends a S>C 0x0F SID_CHATEVENT of type
||First join: Places user in a channel starting with the specified channel name, followed by a 2-digit language code and a number, ie 'Brood War En-1'. Also automatically sends MOTD after entering the channel. This is sent when first logging onto Battle.net.|
||Forced join: This is sent when leaving a game, and joins the specified channel without supplying a MOTD. If the Client is banned or restricted from joining the channel, the Client will enter
||D2 first join: The same as First join (
If you send any flags except those above, you will not get any chat events back for it (meaning you did not join the channel).
If you send first join or forced join with the channel being the one you are in currently, Battle.net will make you join the channel you were in last. If you were not in a channel last, you will join The Void.
As of March 2018, WarCraft III sends flags 1 and "W3" as the channel name.
0000024A ff 0c 0b 00 01 00 00 00 57 33 00 ........ W3.
Typing /join in chat sends 0x0E SID_CHATCOMMAND rather than using SID_JOINCHANNEL.
00000269 ff 0e 13 00 2f 6a 6f 69 6e 20 63 6c 61 6e 20 62 ..../joi n clan b
00000279 6f 74 00 ot.
D2DV was seen using flags 1 for first join, while D2XP was seen using flags 5, both with the string "Diablo II".
000008F1 ff 0c 12 00 01 00 00 00 44 69 61 62 6c 6f 20 49 ........ Diablo I
00000901 49 00
000008DD ff 0c 12 00 05 00 00 00 44 69 61 62 6c 6f 20 49 ........ Diablo I
000008ED 49 00 I.
Sometime in the late 2010's the official Battle.net servers updated and started using the channel field for 0x01 (first join) to indicate the base channel name, and then followed that with a language identifier and number, rather than the traditional country code.
For example the WAR3 client sent "W3" as the channel name and was put in "W3 En-1".
Also the server does not seem to care or do anything differently if you use D2 join (0x05) for non-D2 clients, and treats values not listed here (all the ones that I've tried anyways) as NoCreate join (0x00).