Transport Layer:Transmission Control Protocol (TCP)
Application Layer:Battle.net v1 TCP Messages (SID)
Message Id:0x0C
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
Message Format:
(does not include protocol header)
(UINT32) Flags
(STRING) Channel 


Joins a channel after entering chat.

The Channel name must be no greater than 31 characters, otherwise it becomes trimmed by Battle.net.

Flags Description
0x00 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 EID_CHANNELDOESNOTEXIST, upon which official clients prompt for confirmation that the user wishes to create the channel, in which case, it resends this packet with Flags set to Forced join (0x02).
0x01 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.
0x02 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 The Void.
0x05 D2 first join: The same as First join (0x01), but is used for D2DV/D2XP clients.
| Edited: LordVader



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).