Server protocol:SJOIN command

The SJOIN command is used to synchronize channel information between servers and for user joins.

Syntax
Syntax: SJOIN timestamp channel [modes and parameters] :buffer Where:
 * timestamp: creation time of the channel
 * channel: the channel name
 * modes and parameters: the modes, including parameters, eg: . If the channel has no modes set then this parameter will not exist.
 * buffer: the sjoin buffer, explained further down

Creation time and behavior
Similar to, different rules apply depending on how their_ts (the timestamp of the other server) compares to our_ts (the timestamp we have on record for the channel):

So, the channel creation time decides what to do with the contents of the SJOIN command.

Channel members
A simple SJOIN for three users in a channel that only has modes +nt set would look like this: SJOIN 1548605089 #test +nt :One Two @Three Upon receipt of such a message, the IRC server will send the following to it's locally connected users: *** One joins #test
 * Two joins #test
 * Three joins #test
 * other.server sets modes: +o Three

In the SJOIN buffer each item is separated by spaces. The nick can be prefixed with the following characters to give the user certain channel privileges:

IMPORTANT: As you can see, the characters for +a and +q differ from the ones you see in NAMES as PREFIX on IRC. For example,  in SJOIN means +a, while on regular IRC it means +q. Do not mix them up!

Multiple characters can be combined if the user holds multiple privileges, eg +vo for user Ein will be communicated as

Mode lists
The SJOIN command is also used to communicate +b (bans), +e (ban exempts) and +I (invite exceptions). For example: SJOIN 1548605089 #test +nt :&this!is@a.ban "this!is@an.exempt 'this!is@an.invex

The first letter of each item tells the type of the list:

Extended information
For lists it is possible to prefix the buffer with additional information to communicate when and who set the +beI. This requires SJSBY to be enabled via

Example without extended information: SJOIN 1548605089 #test +nt :&this!is@a.ban Example with extended information: SJOIN 1548605089 #test +nt :<1548605202,UserOne>&this!is@a.ban

So, the  prefix is used to communicate this information. Being  in the example.

The server would still show this as: *** some.server.net sets mode: +b this!is@a.ban ...but if the user queries the list at a later point by doing  then it will show the user and time of the ban:
 * 1) test this!is@a.ban set by UserOne (Sun Jan 27 17:06:42 2019)
 * 2) test End of Channel Ban List