Skip to main content

For client developers

Blazium Games chat is standard IRC (UnrealIRCd 6) with a few additions for games. Anything a normal IRC client does keeps working; the additions are opt-in.

Connecting​

TransportAddress
TLSirc.blazium.online:6697
Websocket (browsers)wss://irc.blazium.online:8000, one IRC line per text frame

Every connection must sign in before it is let on to the network.

Signing in​

The password is one of two tokens:

  • A chat token (bzc_...) the player made in Settings > Chat. Long-lived; see IRC clients.
  • A short-lived sign-in token that works for 10 minutes. BlaziumLauncher and the website get one for the signed-in player. An AI agent gets one from the player MCP tool get_chat_connection, which also returns the host, port, and websocket address.

SASL PLAIN (preferred):

CAP LS 302
CAP REQ :sasl blazium.games/tags blazium.games/commands blazium.games/membership
NICK username
USER username 0 * :username
AUTHENTICATE PLAIN
AUTHENTICATE <base64 of "\0username\0token">
CAP END

Send CAP END after 903. 904 means the token was refused.

GAMEAUTH, for clients without SASL: send GAMEAUTH <token> before NICK and USER. The answer is 1800 <username> :You are now logged in as <username>, or 1841/1846 on failure. Three failures in 30 seconds give 1852 until the window passes. A second login on the same connection gets 1843.

After sign-in the nick is forced to the account's username, and changing it is refused. Only PLAIN is offered as a SASL mechanism.

ISUPPORT​

After registration, 005 includes:

TokenMeaning
GAMESERVICES=2The game chat commands and numerics on this page are available. Version 2 added GAMEAUTH, spectating, GAMES, LFGWHO, LFGMETA, the capabilities, and the tags
GAMEVENDOR=blazium.gamesThe vendor prefix used by the capabilities and tags

Capabilities​

CapabilityWhat it adds
blazium.games/tagsMessages in game channels carry the blazium.games/game and blazium.games/role tags
blazium.games/commandsTurns on GAMES
blazium.games/membershipWith blazium.games/tags, the server sends you a TAGMSG to the channel when you join a game chat and whenever your role in it changes

Message tags​

TagValue
blazium.games/gameThe game's uid
blazium.games/roleThe sender's role in that game's chat: owner (owner and accepted admins), chat (voiced), or spectator (no voice)

Example, with blazium.games/tags:

@blazium.games/game=550e8400-e29b-41d4-a716-446655440000;blazium.games/role=chat;msgid=...;time=... :alice!alice@... PRIVMSG #g0123456789abcdef :gg

The membership TAGMSG carries your own role and the game uid:

@blazium.games/role=chat;blazium.games/game=550e8400-e29b-41d4-a716-446655440000 :irc1.blazium.online TAGMSG #g0123456789abcdef

Game channels are mode +A <uid>, so a client can map a channel back to its game without the tags.

Game invites​

BlaziumLauncher invites a friend to a game with a private message whose text is PLAY:<game uid>. The launcher shows a play card instead of the text. Other clients can send and recognise the same text.

Commands​

CommandNotes
GAMEJOIN <uid> / GAMEPART <uid>The only way into a game channel. JOIN on a game channel fails with 473 "Join game chat with GAMEJOIN"
LFGSUB <uid> / LFGUNSUB <uid>Spectate (no voice). Up to 10 at once
GAMES [uid]Needs blazium.games/commands
LFGWHO <uid>Members of a game chat you're in
LFGMETA <uid>Name, channel, and counts
REGISTER, VERIFYAnswer with 1822 pointers to the website; accounts aren't made over IRC

User-facing descriptions are on the Commands page.

Numerics​

Every numeric is sent as :<server> <numeric> <your nick> <parameters>.

NumericParametersWhen
1800<username> :You are now logged in as <username>GAMEAUTH succeeded
1801<channel> <uid> <role> :Joined game chatGAMEJOIN
1802<channel> <uid> :Spectating game chatLFGSUB
1803<uid> :Left game chatGAMEPART, LFGUNSUB
1804<uid> <channel> <users> :<name>One per game in GAMES
1805<count> :End of GAMESEnd of GAMES
1810<uid> <nick> <role> :<account>One per member in LFGWHO
1811<uid> <count> :End of LFGWHOEnd of LFGWHO
1812<uid> <key> :<value>LFGMETA keys: name, channel, users, chat, spectators, listed (yes/no), bound (yes/no)
1813<uid> :End of LFGMETAEnd of LFGMETA
1822REGISTER :<text> or VERIFY :<text>REGISTER or VERIFY
1830<nick> <uid> <role> :is in game chatIn your own WHOIS
1841:Authentication failedThe token was refused
1842<uid> :No such game chatGAMES <uid>, LFGWHO, LFGMETA
1843[<uid>] :...Already logged in, or already in that game chat
1844<max> :Too many spectated gamesLFGSUB over the limit
1845<uid> :Invalid game idNot a uid
1846:That chat token is not validGAMEAUTH with text that isn't a token
1847[<uid>] :Game chat is unavailable right nowThe game service couldn't be reached
1848<uid> :You are not in that game chatLFGWHO, LFGUNSUB
1850<command> <capability> :Capability required for this commandGAMES without blazium.games/commands
1851<channel> :Game chat is full on this serverThe game's channel is full on this server
1852:<text>Too many login attempts, or a login is already in progress
1860<channel> <server> :Try connecting to this serverSent after 1851 with a server that has room

Numerics 1818-1821 are for network operators.

Notices to expect​

NoticeMeaning
"Authenticate before joining game chat"A game command before sign-in
"You cannot join that game chat"No license with guests off, or banned
"You need a license to speak in this game chat"A message from someone without voice (404)
"This game chat has closed"The game's chat was taken down; the channel no longer belongs to a game
"License changed" (as a part reason)Access was re-checked and you're no longer allowed in

Good behaviour​

  • Reconnect with backoff. A rate-limited client (1852) should wait at least 30 seconds.
  • Don't store short-lived tokens; ask for a new one each time you connect.
  • Never log or display a chat token after the player has copied it.